Module Name: src
Committed By: roy
Date: Tue Sep 24 13:03:30 UTC 2024
Modified Files:
src/share/man/man4: vether.4
src/sys/net: if_vether.c
Log Message:
vether(4): allow link state to be toggled by link0
Take link state down: ifconfig vether0 link0
Bring link state up: ifconfig vether0 -link0
Handy for testing how programs react to link state change on a VM.
To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/share/man/man4/vether.4
cvs rdiff -u -r1.1 -r1.2 src/sys/net/if_vether.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/share/man/man4/vether.4
diff -u src/share/man/man4/vether.4:1.2 src/share/man/man4/vether.4:1.3
--- src/share/man/man4/vether.4:1.2 Sun Sep 27 13:59:24 2020
+++ src/share/man/man4/vether.4 Tue Sep 24 13:03:30 2024
@@ -1,4 +1,4 @@
-.\" $NetBSD: vether.4,v 1.2 2020/09/27 13:59:24 wiz Exp $
+.\" $NetBSD: vether.4,v 1.3 2024/09/24 13:03:30 roy Exp $
.\"
.\" $OpenBSD: vether.4,v 1.5 2017/10/17 22:47:58 schwarze Exp $
.\"
@@ -16,7 +16,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd October 17, 2017
+.Dd September 24, 2017
.Dt VETHER 4
.Os
.Sh NAME
@@ -41,6 +41,17 @@ An Ethernet header will be prepended and
interface is a member of a
.Xr bridge 4 ,
the frame will show up there.
+.Pp
+The
+.Nm
+link state can be controlled using
+.Xr ifconfig 8 .
+.Bl -tag -width ".Cm -link0" -compact
+.It Cm link0
+link state DOWN
+.It Cm -link0
+link state UP
+.El
.Sh SEE ALSO
.Xr bridge 4 ,
.Xr ifconfig 8
Index: src/sys/net/if_vether.c
diff -u src/sys/net/if_vether.c:1.1 src/sys/net/if_vether.c:1.2
--- src/sys/net/if_vether.c:1.1 Sun Sep 27 13:31:04 2020
+++ src/sys/net/if_vether.c Tue Sep 24 13:03:30 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: if_vether.c,v 1.1 2020/09/27 13:31:04 roy Exp $ */
+/* $NetBSD: if_vether.c,v 1.2 2024/09/24 13:03:30 roy Exp $ */
/* $OpenBSD: if_vether.c,v 1.27 2016/04/13 11:41:15 mpi Exp $ */
/*
@@ -19,7 +19,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_vether.c,v 1.1 2020/09/27 13:31:04 roy Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vether.c,v 1.2 2024/09/24 13:03:30 roy Exp $");
#include <sys/cprng.h>
#include <sys/kmem.h>
@@ -108,7 +108,8 @@ vether_init(struct ifnet *ifp)
{
ifp->if_flags |= IFF_RUNNING;
- if_link_state_change(ifp, LINK_STATE_UP);
+ if (!(ifp->if_flags & IFF_LINK0))
+ if_link_state_change(ifp, LINK_STATE_UP);
vether_start(ifp);
return 0;
}
@@ -137,7 +138,6 @@ vether_stop(struct ifnet *ifp, __unused
{
ifp->if_flags &= ~IFF_RUNNING;
- if_link_state_change(ifp, LINK_STATE_DOWN);
}
static int
@@ -150,6 +150,13 @@ vether_ioctl(struct ifnet *ifp, unsigned
case SIOCDELMULTI:
break;
+ case SIOCSIFFLAGS:
+ if ((error = ifioctl_common(ifp, cmd, data)) != 0)
+ break;
+ if_link_state_change(ifp, ifp->if_flags & IFF_LINK0 ?
+ LINK_STATE_DOWN : LINK_STATE_UP);
+ break;
+
default:
error = ether_ioctl(ifp, cmd, data);
}