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