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);
 	}

Reply via email to