diff options
author | thompsa <thompsa@FreeBSD.org> | 2007-05-07 00:35:15 +0000 |
---|---|---|
committer | thompsa <thompsa@FreeBSD.org> | 2007-05-07 00:35:15 +0000 |
commit | e52d185c9e35bf348185a8f1bc19b9991cb99b7d (patch) | |
tree | 84a9a701611ca5a74493f390ecb29d7a52bfa774 /sys/net/if_lagg.h | |
parent | 46904da6708bef5c82473bee8fa21f4e0d2a8730 (diff) | |
download | FreeBSD-src-e52d185c9e35bf348185a8f1bc19b9991cb99b7d.zip FreeBSD-src-e52d185c9e35bf348185a8f1bc19b9991cb99b7d.tar.gz |
Call if_setlladdr() on the aggregation port from a taskqueue so the softc lock
is not held. The short delay between aggregating the port and setting the MAC
address is fine.
Diffstat (limited to 'sys/net/if_lagg.h')
-rw-r--r-- | sys/net/if_lagg.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/sys/net/if_lagg.h b/sys/net/if_lagg.h index 968568a..e85fe68 100644 --- a/sys/net/if_lagg.h +++ b/sys/net/if_lagg.h @@ -140,6 +140,13 @@ struct lagg_mc { SLIST_ENTRY(lagg_mc) mc_entries; }; +/* List of interfaces to have the MAC address modified */ +struct lagg_llq { + struct ifnet *llq_ifp; + uint8_t llq_lladdr[ETHER_ADDR_LEN]; + SLIST_ENTRY(lagg_llq) llq_entries; +}; + struct lagg_softc { struct ifnet *sc_ifp; /* virtual interface */ struct mtx sc_mtx; @@ -152,6 +159,10 @@ struct lagg_softc { SLIST_HEAD(__tplhd, lagg_port) sc_ports; /* list of interfaces */ SLIST_ENTRY(lagg_softc) sc_entries; + struct task sc_lladdr_task; + SLIST_HEAD(__llqhd, lagg_llq) sc_llq_head; /* interfaces to program + the lladdr on */ + /* lagg protocol callbacks */ int (*sc_detach)(struct lagg_softc *); int (*sc_start)(struct lagg_softc *, struct mbuf *); |