Deleted Added
full compact
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 ---