if_lagg.c (241394) | if_lagg.c (241610) |
---|---|
1/* $OpenBSD: if_trunk.c,v 1.30 2007/01/31 06:20:19 reyk Exp $ */ 2 3/* 4 * Copyright (c) 2005, 2006 Reyk Floeter <reyk@openbsd.org> 5 * Copyright (c) 2007 Andrew Thompson <thompsa@FreeBSD.org> 6 * 7 * Permission to use, copy, modify, and distribute this software for any 8 * purpose with or without fee is hereby granted, provided that the above --- 4 unchanged lines hidden (view full) --- 13 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 14 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 15 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 16 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 17 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 18 */ 19 20#include <sys/cdefs.h> | 1/* $OpenBSD: if_trunk.c,v 1.30 2007/01/31 06:20:19 reyk Exp $ */ 2 3/* 4 * Copyright (c) 2005, 2006 Reyk Floeter <reyk@openbsd.org> 5 * Copyright (c) 2007 Andrew Thompson <thompsa@FreeBSD.org> 6 * 7 * Permission to use, copy, modify, and distribute this software for any 8 * purpose with or without fee is hereby granted, provided that the above --- 4 unchanged lines hidden (view full) --- 13 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 14 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 15 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 16 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 17 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 18 */ 19 20#include <sys/cdefs.h> |
21__FBSDID("$FreeBSD: head/sys/net/if_lagg.c 241394 2012-10-10 08:36:38Z kevlo $"); | 21__FBSDID("$FreeBSD: head/sys/net/if_lagg.c 241610 2012-10-16 13:37:54Z glebius $"); |
22 23#include "opt_inet.h" 24#include "opt_inet6.h" 25 26#include <sys/param.h> 27#include <sys/kernel.h> 28#include <sys/malloc.h> 29#include <sys/mbuf.h> --- 50 unchanged lines hidden (view full) --- 80}; 81 82SLIST_HEAD(__trhead, lagg_softc) lagg_list; /* list of laggs */ 83static struct mtx lagg_list_mtx; 84eventhandler_tag lagg_detach_cookie = NULL; 85 86static int lagg_clone_create(struct if_clone *, int, caddr_t); 87static void lagg_clone_destroy(struct ifnet *); | 22 23#include "opt_inet.h" 24#include "opt_inet6.h" 25 26#include <sys/param.h> 27#include <sys/kernel.h> 28#include <sys/malloc.h> 29#include <sys/mbuf.h> --- 50 unchanged lines hidden (view full) --- 80}; 81 82SLIST_HEAD(__trhead, lagg_softc) lagg_list; /* list of laggs */ 83static struct mtx lagg_list_mtx; 84eventhandler_tag lagg_detach_cookie = NULL; 85 86static int lagg_clone_create(struct if_clone *, int, caddr_t); 87static void lagg_clone_destroy(struct ifnet *); |
88static struct if_clone *lagg_cloner; 89static const char laggname[] = "lagg"; 90 |
|
88static void lagg_lladdr(struct lagg_softc *, uint8_t *); 89static void lagg_capabilities(struct lagg_softc *); 90static void lagg_port_lladdr(struct lagg_port *, uint8_t *); 91static void lagg_port_setlladdr(void *, int); 92static int lagg_port_create(struct lagg_softc *, struct ifnet *); 93static int lagg_port_destroy(struct lagg_port *, int); 94static struct mbuf *lagg_input(struct ifnet *, struct mbuf *); 95static void lagg_linkstate(struct lagg_softc *); --- 17 unchanged lines hidden (view full) --- 113static int lagg_transmit(struct ifnet *, struct mbuf *); 114static void lagg_qflush(struct ifnet *); 115static int lagg_media_change(struct ifnet *); 116static void lagg_media_status(struct ifnet *, struct ifmediareq *); 117static struct lagg_port *lagg_link_active(struct lagg_softc *, 118 struct lagg_port *); 119static const void *lagg_gethdr(struct mbuf *, u_int, u_int, void *); 120 | 91static void lagg_lladdr(struct lagg_softc *, uint8_t *); 92static void lagg_capabilities(struct lagg_softc *); 93static void lagg_port_lladdr(struct lagg_port *, uint8_t *); 94static void lagg_port_setlladdr(void *, int); 95static int lagg_port_create(struct lagg_softc *, struct ifnet *); 96static int lagg_port_destroy(struct lagg_port *, int); 97static struct mbuf *lagg_input(struct ifnet *, struct mbuf *); 98static void lagg_linkstate(struct lagg_softc *); --- 17 unchanged lines hidden (view full) --- 116static int lagg_transmit(struct ifnet *, struct mbuf *); 117static void lagg_qflush(struct ifnet *); 118static int lagg_media_change(struct ifnet *); 119static void lagg_media_status(struct ifnet *, struct ifmediareq *); 120static struct lagg_port *lagg_link_active(struct lagg_softc *, 121 struct lagg_port *); 122static const void *lagg_gethdr(struct mbuf *, u_int, u_int, void *); 123 |
121IFC_SIMPLE_DECLARE(lagg, 0); 122 | |
123/* Simple round robin */ 124static int lagg_rr_attach(struct lagg_softc *); 125static int lagg_rr_detach(struct lagg_softc *); 126static int lagg_rr_start(struct lagg_softc *, struct mbuf *); 127static struct mbuf *lagg_rr_input(struct lagg_softc *, struct lagg_port *, 128 struct mbuf *); 129 130/* Active failover */ --- 51 unchanged lines hidden (view full) --- 182static int 183lagg_modevent(module_t mod, int type, void *data) 184{ 185 186 switch (type) { 187 case MOD_LOAD: 188 mtx_init(&lagg_list_mtx, "if_lagg list", NULL, MTX_DEF); 189 SLIST_INIT(&lagg_list); | 124/* Simple round robin */ 125static int lagg_rr_attach(struct lagg_softc *); 126static int lagg_rr_detach(struct lagg_softc *); 127static int lagg_rr_start(struct lagg_softc *, struct mbuf *); 128static struct mbuf *lagg_rr_input(struct lagg_softc *, struct lagg_port *, 129 struct mbuf *); 130 131/* Active failover */ --- 51 unchanged lines hidden (view full) --- 183static int 184lagg_modevent(module_t mod, int type, void *data) 185{ 186 187 switch (type) { 188 case MOD_LOAD: 189 mtx_init(&lagg_list_mtx, "if_lagg list", NULL, MTX_DEF); 190 SLIST_INIT(&lagg_list); |
190 if_clone_attach(&lagg_cloner); | 191 lagg_cloner = if_clone_simple(laggname, lagg_clone_create, 192 lagg_clone_destroy, 0); |
191 lagg_input_p = lagg_input; 192 lagg_linkstate_p = lagg_port_state; 193 lagg_detach_cookie = EVENTHANDLER_REGISTER( 194 ifnet_departure_event, lagg_port_ifdetach, NULL, 195 EVENTHANDLER_PRI_ANY); 196 break; 197 case MOD_UNLOAD: 198 EVENTHANDLER_DEREGISTER(ifnet_departure_event, 199 lagg_detach_cookie); | 193 lagg_input_p = lagg_input; 194 lagg_linkstate_p = lagg_port_state; 195 lagg_detach_cookie = EVENTHANDLER_REGISTER( 196 ifnet_departure_event, lagg_port_ifdetach, NULL, 197 EVENTHANDLER_PRI_ANY); 198 break; 199 case MOD_UNLOAD: 200 EVENTHANDLER_DEREGISTER(ifnet_departure_event, 201 lagg_detach_cookie); |
200 if_clone_detach(&lagg_cloner); | 202 if_clone_detach(lagg_cloner); |
201 lagg_input_p = NULL; 202 lagg_linkstate_p = NULL; 203 mtx_destroy(&lagg_list_mtx); 204 break; 205 default: 206 return (EOPNOTSUPP); 207 } 208 return (0); --- 97 unchanged lines hidden (view full) --- 306 TASK_INIT(&sc->sc_lladdr_task, 0, lagg_port_setlladdr, sc); 307 308 /* Initialise pseudo media types */ 309 ifmedia_init(&sc->sc_media, 0, lagg_media_change, 310 lagg_media_status); 311 ifmedia_add(&sc->sc_media, IFM_ETHER | IFM_AUTO, 0, NULL); 312 ifmedia_set(&sc->sc_media, IFM_ETHER | IFM_AUTO); 313 | 203 lagg_input_p = NULL; 204 lagg_linkstate_p = NULL; 205 mtx_destroy(&lagg_list_mtx); 206 break; 207 default: 208 return (EOPNOTSUPP); 209 } 210 return (0); --- 97 unchanged lines hidden (view full) --- 308 TASK_INIT(&sc->sc_lladdr_task, 0, lagg_port_setlladdr, sc); 309 310 /* Initialise pseudo media types */ 311 ifmedia_init(&sc->sc_media, 0, lagg_media_change, 312 lagg_media_status); 313 ifmedia_add(&sc->sc_media, IFM_ETHER | IFM_AUTO, 0, NULL); 314 ifmedia_set(&sc->sc_media, IFM_ETHER | IFM_AUTO); 315 |
314 if_initname(ifp, ifc->ifc_name, unit); | 316 if_initname(ifp, laggname, unit); |
315 ifp->if_softc = sc; 316 ifp->if_transmit = lagg_transmit; 317 ifp->if_qflush = lagg_qflush; 318 ifp->if_init = lagg_init; 319 ifp->if_ioctl = lagg_ioctl; 320 ifp->if_flags = IFF_SIMPLEX | IFF_BROADCAST | IFF_MULTICAST; 321 322 /* --- 1573 unchanged lines hidden --- | 317 ifp->if_softc = sc; 318 ifp->if_transmit = lagg_transmit; 319 ifp->if_qflush = lagg_qflush; 320 ifp->if_init = lagg_init; 321 ifp->if_ioctl = lagg_ioctl; 322 ifp->if_flags = IFF_SIMPLEX | IFF_BROADCAST | IFF_MULTICAST; 323 324 /* --- 1573 unchanged lines hidden --- |