ieee8023ad_lacp.h (175005) | ieee8023ad_lacp.h (177274) |
---|---|
1/* $NetBSD: ieee8023ad_impl.h,v 1.2 2005/12/10 23:21:39 elad Exp $ */ 2 3/*- 4 * Copyright (c)2005 YAMAMOTO Takashi, 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions --- 11 unchanged lines hidden (view full) --- 20 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * SUCH DAMAGE. 27 * | 1/* $NetBSD: ieee8023ad_impl.h,v 1.2 2005/12/10 23:21:39 elad Exp $ */ 2 3/*- 4 * Copyright (c)2005 YAMAMOTO Takashi, 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions --- 11 unchanged lines hidden (view full) --- 20 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * SUCH DAMAGE. 27 * |
28 * $FreeBSD: head/sys/net/ieee8023ad_lacp.h 175005 2007-12-31 01:16:35Z thompsa $ | 28 * $FreeBSD: head/sys/net/ieee8023ad_lacp.h 177274 2008-03-16 19:25:30Z thompsa $ |
29 */ 30 31/* 32 * IEEE802.3ad LACP 33 * 34 * implementation details. 35 */ 36 --- 150 unchanged lines hidden (view full) --- 187enum lacp_mux_state { 188 LACP_MUX_DETACHED, 189 LACP_MUX_WAITING, 190 LACP_MUX_ATTACHED, 191 LACP_MUX_COLLECTING, 192 LACP_MUX_DISTRIBUTING, 193}; 194 | 29 */ 30 31/* 32 * IEEE802.3ad LACP 33 * 34 * implementation details. 35 */ 36 --- 150 unchanged lines hidden (view full) --- 187enum lacp_mux_state { 188 LACP_MUX_DETACHED, 189 LACP_MUX_WAITING, 190 LACP_MUX_ATTACHED, 191 LACP_MUX_COLLECTING, 192 LACP_MUX_DISTRIBUTING, 193}; 194 |
195#define LACP_MAX_PORTS 32 196 197struct lacp_portmap { 198 int pm_count; 199 struct lacp_port *pm_map[LACP_MAX_PORTS]; 200}; 201 |
|
195struct lacp_port { 196 TAILQ_ENTRY(lacp_port) lp_dist_q; 197 LIST_ENTRY(lacp_port) lp_next; 198 struct lacp_softc *lp_lsc; 199 struct lagg_port *lp_lagg; 200 struct ifnet *lp_ifp; 201 struct lacp_peerinfo lp_partner; 202 struct lacp_peerinfo lp_actor; --- 20 unchanged lines hidden (view full) --- 223 TAILQ_HEAD(, lacp_port) la_ports; /* distributing ports */ 224 struct lacp_peerinfo la_partner; 225 struct lacp_peerinfo la_actor; 226 int la_pending; /* number of ports in wait_while */ 227}; 228 229struct lacp_softc { 230 struct lagg_softc *lsc_softc; | 202struct lacp_port { 203 TAILQ_ENTRY(lacp_port) lp_dist_q; 204 LIST_ENTRY(lacp_port) lp_next; 205 struct lacp_softc *lp_lsc; 206 struct lagg_port *lp_lagg; 207 struct ifnet *lp_ifp; 208 struct lacp_peerinfo lp_partner; 209 struct lacp_peerinfo lp_actor; --- 20 unchanged lines hidden (view full) --- 230 TAILQ_HEAD(, lacp_port) la_ports; /* distributing ports */ 231 struct lacp_peerinfo la_partner; 232 struct lacp_peerinfo la_actor; 233 int la_pending; /* number of ports in wait_while */ 234}; 235 236struct lacp_softc { 237 struct lagg_softc *lsc_softc; |
238 struct mtx lsc_mtx; |
|
231 struct lacp_aggregator *lsc_active_aggregator; 232 TAILQ_HEAD(, lacp_aggregator) lsc_aggregators; 233 boolean_t lsc_suppress_distributing; 234 struct callout lsc_transit_callout; 235 struct callout lsc_callout; 236 LIST_HEAD(, lacp_port) lsc_ports; | 239 struct lacp_aggregator *lsc_active_aggregator; 240 TAILQ_HEAD(, lacp_aggregator) lsc_aggregators; 241 boolean_t lsc_suppress_distributing; 242 struct callout lsc_transit_callout; 243 struct callout lsc_callout; 244 LIST_HEAD(, lacp_port) lsc_ports; |
245 struct lacp_portmap lsc_pmap[2]; 246 volatile u_int lsc_activemap; |
|
237 u_int32_t lsc_hashkey; | 247 u_int32_t lsc_hashkey; |
238 struct task lsc_qtask; 239 struct ifqueue lsc_queue; /* pdu input queue */ | |
240}; 241 242#define LACP_TYPE_ACTORINFO 1 243#define LACP_TYPE_PARTNERINFO 2 244#define LACP_TYPE_COLLECTORINFO 3 245 246/* timeout values (in sec) */ 247#define LACP_FAST_PERIODIC_TIME (1) --- 7 unchanged lines hidden (view full) --- 255#define LACP_STATE_EQ(s1, s2, mask) \ 256 ((((s1) ^ (s2)) & (mask)) == 0) 257 258#define LACP_SYS_PRI(peer) (peer).lip_systemid.lsi_prio 259 260#define LACP_PORT(_lp) ((struct lacp_port *)(_lp)->lp_psc) 261#define LACP_SOFTC(_sc) ((struct lacp_softc *)(_sc)->sc_psc) 262 | 248}; 249 250#define LACP_TYPE_ACTORINFO 1 251#define LACP_TYPE_PARTNERINFO 2 252#define LACP_TYPE_COLLECTORINFO 3 253 254/* timeout values (in sec) */ 255#define LACP_FAST_PERIODIC_TIME (1) --- 7 unchanged lines hidden (view full) --- 263#define LACP_STATE_EQ(s1, s2, mask) \ 264 ((((s1) ^ (s2)) & (mask)) == 0) 265 266#define LACP_SYS_PRI(peer) (peer).lip_systemid.lsi_prio 267 268#define LACP_PORT(_lp) ((struct lacp_port *)(_lp)->lp_psc) 269#define LACP_SOFTC(_sc) ((struct lacp_softc *)(_sc)->sc_psc) 270 |
271#define LACP_LOCK_INIT(_lsc) mtx_init(&(_lsc)->lsc_mtx, \ 272 "lacp mtx", NULL, MTX_DEF); 273#define LACP_LOCK_DESTROY(_lsc) mtx_destroy(&(_lsc)->lsc_mtx); 274#define LACP_LOCK(_lsc) mtx_lock(&(_lsc)->lsc_mtx) 275#define LACP_UNLOCK(_lsc) mtx_unlock(&(_lsc)->lsc_mtx) 276#define LACP_LOCK_ASSERT(_lsc) mtx_assert(&(_lsc)->lsc_mtx, MA_OWNED) 277 |
|
263struct mbuf *lacp_input(struct lagg_port *, struct mbuf *); 264struct lagg_port *lacp_select_tx_port(struct lagg_softc *, struct mbuf *); 265int lacp_attach(struct lagg_softc *); 266int lacp_detach(struct lagg_softc *); 267void lacp_init(struct lagg_softc *); 268void lacp_stop(struct lagg_softc *); 269int lacp_port_create(struct lagg_port *); 270void lacp_port_destroy(struct lagg_port *); 271void lacp_linkstate(struct lagg_port *); | 278struct mbuf *lacp_input(struct lagg_port *, struct mbuf *); 279struct lagg_port *lacp_select_tx_port(struct lagg_softc *, struct mbuf *); 280int lacp_attach(struct lagg_softc *); 281int lacp_detach(struct lagg_softc *); 282void lacp_init(struct lagg_softc *); 283void lacp_stop(struct lagg_softc *); 284int lacp_port_create(struct lagg_port *); 285void lacp_port_destroy(struct lagg_port *); 286void lacp_linkstate(struct lagg_port *); |
272int lacp_port_isactive(struct lagg_port *); | |
273void lacp_req(struct lagg_softc *, caddr_t); 274void lacp_portreq(struct lagg_port *, caddr_t); 275 | 287void lacp_req(struct lagg_softc *, caddr_t); 288void lacp_portreq(struct lagg_port *, caddr_t); 289 |
290static __inline int 291lacp_isactive(struct lagg_port *lgp) 292{ 293 struct lacp_port *lp = LACP_PORT(lgp); 294 struct lacp_softc *lsc = lp->lp_lsc; 295 struct lacp_aggregator *la = lp->lp_aggregator; 296 297 /* This port is joined to the active aggregator */ 298 if (la != NULL && la == lsc->lsc_active_aggregator) 299 return (1); 300 301 return (0); 302} 303 304static __inline int 305lacp_iscollecting(struct lagg_port *lgp) 306{ 307 struct lacp_port *lp = LACP_PORT(lgp); 308 309 return ((lp->lp_state & LACP_STATE_COLLECTING) != 0); 310} 311 312static __inline int 313lacp_isdistributing(struct lagg_port *lgp) 314{ 315 struct lacp_port *lp = LACP_PORT(lgp); 316 317 return ((lp->lp_state & LACP_STATE_DISTRIBUTING) != 0); 318} 319 |
|
276/* following constants don't include terminating NUL */ 277#define LACP_MACSTR_MAX (2*6 + 5) 278#define LACP_SYSTEMPRIOSTR_MAX (4) 279#define LACP_SYSTEMIDSTR_MAX (LACP_SYSTEMPRIOSTR_MAX + 1 + LACP_MACSTR_MAX) 280#define LACP_PORTPRIOSTR_MAX (4) 281#define LACP_PORTNOSTR_MAX (4) 282#define LACP_PORTIDSTR_MAX (LACP_PORTPRIOSTR_MAX + 1 + LACP_PORTNOSTR_MAX) 283#define LACP_KEYSTR_MAX (4) 284#define LACP_PARTNERSTR_MAX \ 285 (1 + LACP_SYSTEMIDSTR_MAX + 1 + LACP_KEYSTR_MAX + 1 \ 286 + LACP_PORTIDSTR_MAX + 1) 287#define LACP_LAGIDSTR_MAX \ 288 (1 + LACP_PARTNERSTR_MAX + 1 + LACP_PARTNERSTR_MAX + 1) 289#define LACP_STATESTR_MAX (255) /* XXX */ | 320/* following constants don't include terminating NUL */ 321#define LACP_MACSTR_MAX (2*6 + 5) 322#define LACP_SYSTEMPRIOSTR_MAX (4) 323#define LACP_SYSTEMIDSTR_MAX (LACP_SYSTEMPRIOSTR_MAX + 1 + LACP_MACSTR_MAX) 324#define LACP_PORTPRIOSTR_MAX (4) 325#define LACP_PORTNOSTR_MAX (4) 326#define LACP_PORTIDSTR_MAX (LACP_PORTPRIOSTR_MAX + 1 + LACP_PORTNOSTR_MAX) 327#define LACP_KEYSTR_MAX (4) 328#define LACP_PARTNERSTR_MAX \ 329 (1 + LACP_SYSTEMIDSTR_MAX + 1 + LACP_KEYSTR_MAX + 1 \ 330 + LACP_PORTIDSTR_MAX + 1) 331#define LACP_LAGIDSTR_MAX \ 332 (1 + LACP_PARTNERSTR_MAX + 1 + LACP_PARTNERSTR_MAX + 1) 333#define LACP_STATESTR_MAX (255) /* XXX */ |