Module Name: src Committed By: roy Date: Sun Oct 25 08:18:39 UTC 2020
Modified Files: src/sys/net: if_l2tp.c Log Message: l2tp: call if_link_state_change rather then directly setting it. This allows protocols to do their thing. To generate a diff of this commit: cvs rdiff -u -r1.45 -r1.46 src/sys/net/if_l2tp.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/net/if_l2tp.c diff -u src/sys/net/if_l2tp.c:1.45 src/sys/net/if_l2tp.c:1.46 --- src/sys/net/if_l2tp.c:1.45 Sun Oct 25 08:15:54 2020 +++ src/sys/net/if_l2tp.c Sun Oct 25 08:18:39 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: if_l2tp.c,v 1.45 2020/10/25 08:15:54 roy Exp $ */ +/* $NetBSD: if_l2tp.c,v 1.46 2020/10/25 08:18:39 roy Exp $ */ /* * Copyright (c) 2017 Internet Initiative Japan Inc. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_l2tp.c,v 1.45 2020/10/25 08:15:54 roy Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_l2tp.c,v 1.46 2020/10/25 08:18:39 roy Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -324,6 +324,7 @@ l2tpattach0(struct l2tp_softc *sc) rv = if_attach(&sc->l2tp_ec.ec_if); if (rv != 0) return rv; + if_link_state_change(&sc->l2tp_ec.ec_if, LINK_STATE_DOWN); if_alloc_sadl(&sc->l2tp_ec.ec_if); bpf_attach(&sc->l2tp_ec.ec_if, DLT_EN10MB, sizeof(struct ether_header)); @@ -1354,6 +1355,7 @@ l2tp_set_state(struct l2tp_softc *sc, in { struct ifnet *ifp = &sc->l2tp_ec.ec_if; struct l2tp_variant *nvar; + int ostate; nvar = kmem_alloc(sizeof(*nvar), KM_SLEEP); @@ -1361,16 +1363,21 @@ l2tp_set_state(struct l2tp_softc *sc, in *nvar = *sc->l2tp_var; psref_target_init(&nvar->lv_psref, lv_psref_class); + ostate = nvar->lv_state; nvar->lv_state = state; l2tp_variant_update(sc, nvar); + mutex_exit(&sc->l2tp_lock); - if (nvar->lv_state == L2TP_STATE_UP) { - ifp->if_link_state = LINK_STATE_UP; - } else { - ifp->if_link_state = LINK_STATE_DOWN; - } + if (ostate != state) { + int lstate; - mutex_exit(&sc->l2tp_lock); + if (state == L2TP_STATE_UP) + lstate = LINK_STATE_UP; + else + lstate = LINK_STATE_DOWN; + + if_link_state_change(ifp, lstate); + } #ifdef NOTYET vlan_linkstate_notify(ifp, ifp->if_link_state);