Deleted Added
sdiff udiff text old ( 241394 ) new ( 241610 )
full compact
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 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 *);
88static struct if_clone *lagg_cloner;
89static const char laggname[] = "lagg";
90
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
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);
191 lagg_cloner = if_clone_simple(laggname, lagg_clone_create,
192 lagg_clone_destroy, 0);
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);
202 if_clone_detach(lagg_cloner);
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
316 if_initname(ifp, laggname, unit);
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 ---