Module Name: src Committed By: martin Date: Tue Dec 12 16:45:00 UTC 2023
Modified Files: src/sbin/ifconfig [netbsd-10]: lagg.c src/sys/net/lagg [netbsd-10]: if_lagg.c Log Message: Pull up following revision(s) (requested by yamaguchi in ticket #491): sys/net/lagg/if_lagg.c: revision 1.56 sys/net/lagg/if_lagg.c: revision 1.57 sbin/ifconfig/lagg.c: revision 1.4 lagg(4): use sadl for lagg(4) configured by a user lagg(4): eliminate unnecessary reset by the change of if_flags Fix "ifconfig lagg* lagglacp -maxports" command This command clears the setting of the maximum number of lacp active ports. The command was accepted but it did not work until this change. To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.3.2.1 src/sbin/ifconfig/lagg.c cvs rdiff -u -r1.48.4.2 -r1.48.4.3 src/sys/net/lagg/if_lagg.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sbin/ifconfig/lagg.c diff -u src/sbin/ifconfig/lagg.c:1.3 src/sbin/ifconfig/lagg.c:1.3.2.1 --- src/sbin/ifconfig/lagg.c:1.3 Thu Mar 31 01:53:22 2022 +++ src/sbin/ifconfig/lagg.c Tue Dec 12 16:45:00 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: lagg.c,v 1.3 2022/03/31 01:53:22 yamaguchi Exp $ */ +/* $NetBSD: lagg.c,v 1.3.2.1 2023/12/12 16:45:00 martin Exp $ */ /* * Copyright (c) 2021 Internet Initiative Japan Inc. @@ -28,7 +28,7 @@ #include <sys/cdefs.h> #if !defined(lint) -__RCSID("$NetBSD: lagg.c,v 1.3 2022/03/31 01:53:22 yamaguchi Exp $"); +__RCSID("$NetBSD: lagg.c,v 1.3.2.1 2023/12/12 16:45:00 martin Exp $"); #endif /* !defined(lint) */ #include <sys/param.h> @@ -132,27 +132,35 @@ struct piface laggportpri_if = PIFACE_I static const struct kwinst lagglacpkw[] = { {.k_word = "dumpdu", .k_key = "lacpdumpdu", - .k_type = KW_T_INT, .k_int = LAGGLACPOPT_DUMPDU} + .k_type = KW_T_INT, .k_int = LAGGLACPOPT_DUMPDU, + .k_exec = setlagglacp} , {.k_word = "-dumpdu", .k_key = "lacpdumpdu", - .k_type = KW_T_INT, .k_int = -LAGGLACPOPT_DUMPDU} + .k_type = KW_T_INT, .k_int = -LAGGLACPOPT_DUMPDU, + .k_exec = setlagglacp} , {.k_word = "stopdu", .k_key = "lacpstopdu", - .k_type = KW_T_INT, .k_int = LAGGLACPOPT_STOPDU} + .k_type = KW_T_INT, .k_int = LAGGLACPOPT_STOPDU, + .k_exec = setlagglacp} , {.k_word = "-stopdu", .k_key = "lacpstopdu", - .k_type = KW_T_INT, .k_int = -LAGGLACPOPT_STOPDU} + .k_type = KW_T_INT, .k_int = -LAGGLACPOPT_STOPDU, + .k_exec = setlagglacp} , {.k_word = "optimistic", .k_key = "lacpoptimistic", - .k_type = KW_T_INT, .k_int = LAGGLACPOPT_OPTIMISTIC} + .k_type = KW_T_INT, .k_int = LAGGLACPOPT_OPTIMISTIC, + .k_exec = setlagglacp} , {.k_word = "-optimistic", .k_key = "lacpoptimistic", - .k_type = KW_T_INT, .k_int = -LAGGLACPOPT_OPTIMISTIC} + .k_type = KW_T_INT, .k_int = -LAGGLACPOPT_OPTIMISTIC, + .k_exec = setlagglacp} , {.k_word = "maxports", .k_nextparser = &lagglacpmaxports.pi_parser} , {.k_word = "-maxports", .k_key = "lacpmaxports", - .k_type = KW_T_INT, .k_int = 0} + .k_type = KW_T_INT, .k_int = 0, .k_exec = setlagglacpmaxports} , {.k_word = "multi-linkspeed", .k_key = "lacpmultils", - .k_type = KW_T_INT, .k_int = LAGGLACPOPT_MULTILS} + .k_type = KW_T_INT, .k_int = LAGGLACPOPT_MULTILS, + .k_exec = setlagglacp} , {.k_word = "-multi-linkspeed", .k_key = "lacpmultils", - .k_type = KW_T_INT, .k_int = -LAGGLACPOPT_MULTILS} + .k_type = KW_T_INT, .k_int = -LAGGLACPOPT_MULTILS, + .k_exec = setlagglacp} }; struct pkw lagglacp = PKW_INITIALIZER(&lagglacp, "lagg-lacp-option", - setlagglacp, NULL, lagglacpkw, __arraycount(lagglacpkw), + NULL, NULL, lagglacpkw, __arraycount(lagglacpkw), &lagglacp_root.pb_parser); static const struct kwinst laggfailkw[] = { Index: src/sys/net/lagg/if_lagg.c diff -u src/sys/net/lagg/if_lagg.c:1.48.4.2 src/sys/net/lagg/if_lagg.c:1.48.4.3 --- src/sys/net/lagg/if_lagg.c:1.48.4.2 Mon Nov 27 20:05:57 2023 +++ src/sys/net/lagg/if_lagg.c Tue Dec 12 16:45:00 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: if_lagg.c,v 1.48.4.2 2023/11/27 20:05:57 martin Exp $ */ +/* $NetBSD: if_lagg.c,v 1.48.4.3 2023/12/12 16:45:00 martin Exp $ */ /* * Copyright (c) 2005, 2006 Reyk Floeter <r...@openbsd.org> @@ -20,7 +20,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_lagg.c,v 1.48.4.2 2023/11/27 20:05:57 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_lagg.c,v 1.48.4.3 2023/12/12 16:45:00 martin Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -722,7 +722,6 @@ lagg_ioctl(struct ifnet *ifp, u_long cmd if_stop(ifp, 1); break; case IFF_UP: - case IFF_UP | IFF_RUNNING: error = if_init(ifp); break; } @@ -2178,13 +2177,20 @@ lagg_port_setup(struct lagg_softc *sc, struct ifnet *ifp; u_char if_type; int error; - bool stopped, is_1st_port; + bool stopped, use_lagg_sadl; KASSERT(LAGG_LOCKED(sc)); IFNET_ASSERT_UNLOCKED(ifp_port); ifp = &sc->sc_if; - is_1st_port = SIMPLEQ_EMPTY(&sc->sc_ports); + + use_lagg_sadl = true; + if (SIMPLEQ_EMPTY(&sc->sc_ports) && + ifp_port->if_type == IFT_ETHER) { + if (lagg_lladdr_equal(CLLADDR(ifp->if_sadl), + sc->sc_lladdr_rand)) + use_lagg_sadl = false; + } if (&sc->sc_if == ifp_port) { LAGG_DPRINTF(sc, "cannot add a lagg to itself as a port\n"); @@ -2252,11 +2258,14 @@ lagg_port_setup(struct lagg_softc *sc, ifp_port->if_ioctl = lagg_port_ioctl; ifp_port->_if_input = lagg_input_ethernet; ifp_port->if_output = lagg_port_output; - if (is_1st_port) { + + /* update Link address */ + if (use_lagg_sadl) { + lagg_port_setsadl(lp, CLLADDR(ifp->if_sadl)); + } else { + /* update if_type in if_sadl */ if (lp->lp_iftype != ifp_port->if_type) lagg_port_setsadl(lp, NULL); - } else { - lagg_port_setsadl(lp, CLLADDR(ifp->if_sadl)); } error = lagg_setmtu(ifp_port, ifp->if_mtu); @@ -2277,13 +2286,9 @@ lagg_port_setup(struct lagg_softc *sc, /* setup of ifp_port is complete */ IFNET_UNLOCK(ifp_port); - if (is_1st_port) { - if (lp->lp_iftype == IFT_ETHER && - lagg_lladdr_equal(sc->sc_lladdr_rand, - CLLADDR(ifp->if_sadl))) { - lagg_if_setsadl(sc, lp->lp_lladdr); - } - } + /* copy sadl from added port to lagg */ + if (!use_lagg_sadl) + lagg_if_setsadl(sc, lp->lp_lladdr); SIMPLEQ_INSERT_TAIL(&sc->sc_ports, lp, lp_entry); sc->sc_nports++;