[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]

FreeBSD/Linux Kernel Cross Reference
sys/net/if_lagg.h

Version: -  FREEBSD  -  FREEBSD7  -  FREEBSD70  -  FREEBSD6  -  FREEBSD63  -  FREEBSD62  -  FREEBSD61  -  FREEBSD60  -  FREEBSD5  -  FREEBSD55  -  FREEBSD54  -  FREEBSD53  -  FREEBSD52  -  FREEBSD51  -  FREEBSD50  -  FREEBSD4  -  FREEBSD3  -  FREEBSD22  -  linux-2.6  -  linux-2.4.22  -  MK83  -  MK84  -  PLAN9  -  DFBSD  -  NETBSD  -  NETBSD4  -  NETBSD3  -  NETBSD20  -  OPENBSD  -  xnu-517  -  xnu-792  -  xnu-792.6.70  -  xnu-1228  -  OPENSOLARIS  -  minix-3-1-1  -  TRUSTEDBSD-SEBSD  -  FREEBSD-LIBC  -  FREEBSD7-LIBC  -  FREEBSD6-LIBC  -  GLIBC27 
SearchContext: -  none  -  excerpts  -  bigexcerpts 

  1 /*      $OpenBSD: if_trunk.h,v 1.11 2007/01/31 06:20:19 reyk Exp $      */
  2 
  3 /*
  4  * Copyright (c) 2005, 2006 Reyk Floeter <reyk@openbsd.org>
  5  *
  6  * Permission to use, copy, modify, and distribute this software for any
  7  * purpose with or without fee is hereby granted, provided that the above
  8  * copyright notice and this permission notice appear in all copies.
  9  *
 10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 11  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 12  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 13  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 14  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 15  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 16  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 17  *
 18  * $FreeBSD: src/sys/net/if_lagg.h,v 1.11 2007/10/12 03:03:16 thompsa Exp $
 19  */
 20 
 21 #ifndef _NET_LAGG_H
 22 #define _NET_LAGG_H
 23 
 24 /*
 25  * Global definitions
 26  */
 27 
 28 #define LAGG_MAX_PORTS          32      /* logically */
 29 #define LAGG_MAX_NAMESIZE       32      /* name of a protocol */
 30 #define LAGG_MAX_STACKING       4       /* maximum number of stacked laggs */
 31 
 32 /* Port flags */
 33 #define LAGG_PORT_SLAVE         0x00000000      /* normal enslaved port */
 34 #define LAGG_PORT_MASTER        0x00000001      /* primary port */
 35 #define LAGG_PORT_STACK         0x00000002      /* stacked lagg port */
 36 #define LAGG_PORT_ACTIVE        0x00000004      /* port is active */
 37 #define LAGG_PORT_COLLECTING    0x00000008      /* port is receiving frames */
 38 #define LAGG_PORT_DISTRIBUTING  0x00000010      /* port is sending frames */
 39 #define LAGG_PORT_DISABLED      0x00000020      /* port is disabled */
 40 #define LAGG_PORT_BITS          "\2\01MASTER\02STACK\03ACTIVE\04COLLECTING" \
 41                                   "\05DISTRIBUTING\06DISABLED"
 42 
 43 /* Supported lagg PROTOs */
 44 #define LAGG_PROTO_NONE         0       /* no lagg protocol defined */
 45 #define LAGG_PROTO_ROUNDROBIN   1       /* simple round robin */
 46 #define LAGG_PROTO_FAILOVER     2       /* active failover */
 47 #define LAGG_PROTO_LOADBALANCE  3       /* loadbalance */
 48 #define LAGG_PROTO_LACP         4       /* 802.3ad lacp */
 49 #define LAGG_PROTO_ETHERCHANNEL 5       /* Cisco FEC */
 50 #define LAGG_PROTO_MAX          6
 51 
 52 struct lagg_protos {
 53         const char              *lpr_name;
 54         int                     lpr_proto;
 55 };
 56 
 57 #define LAGG_PROTO_DEFAULT      LAGG_PROTO_FAILOVER
 58 #define LAGG_PROTOS     {                                               \
 59         { "failover",           LAGG_PROTO_FAILOVER },                  \
 60         { "fec",                LAGG_PROTO_ETHERCHANNEL },              \
 61         { "lacp",               LAGG_PROTO_LACP },                      \
 62         { "loadbalance",        LAGG_PROTO_LOADBALANCE },               \
 63         { "roundrobin",         LAGG_PROTO_ROUNDROBIN },                \
 64         { "none",               LAGG_PROTO_NONE },                      \
 65         { "default",            LAGG_PROTO_DEFAULT }                    \
 66 }
 67 
 68 /*
 69  * lagg ioctls.
 70  */
 71 
 72 /*
 73  * LACP current operational parameters structure.
 74  */
 75 struct lacp_opreq {
 76         uint16_t                actor_prio;
 77         uint8_t                 actor_mac[ETHER_ADDR_LEN];
 78         uint16_t                actor_key;
 79         uint16_t                actor_portprio;
 80         uint16_t                actor_portno;
 81         uint8_t                 actor_state;
 82         uint16_t                partner_prio;
 83         uint8_t                 partner_mac[ETHER_ADDR_LEN];
 84         uint16_t                partner_key;
 85         uint16_t                partner_portprio;
 86         uint16_t                partner_portno;
 87         uint8_t                 partner_state;
 88 };
 89 
 90 /* lagg port settings */
 91 struct lagg_reqport {
 92         char                    rp_ifname[IFNAMSIZ];    /* name of the lagg */
 93         char                    rp_portname[IFNAMSIZ];  /* name of the port */
 94         u_int32_t               rp_prio;                /* port priority */
 95         u_int32_t               rp_flags;               /* port flags */
 96         union {
 97                 struct lacp_opreq rpsc_lacp;
 98         } rp_psc;
 99 #define rp_lacpreq      rp_psc.rpsc_lacp
100 };
101 
102 #define SIOCGLAGGPORT           _IOWR('i', 140, struct lagg_reqport)
103 #define SIOCSLAGGPORT            _IOW('i', 141, struct lagg_reqport)
104 #define SIOCSLAGGDELPORT         _IOW('i', 142, struct lagg_reqport)
105 
106 /* lagg, ports and options */
107 struct lagg_reqall {
108         char                    ra_ifname[IFNAMSIZ];    /* name of the lagg */
109         u_int                   ra_proto;               /* lagg protocol */
110 
111         size_t                  ra_size;                /* size of buffer */
112         struct lagg_reqport     *ra_port;               /* allocated buffer */
113         int                     ra_ports;               /* total port count */
114         union {
115                 struct lacp_opreq rpsc_lacp;
116         } ra_psc;
117 #define ra_lacpreq      ra_psc.rpsc_lacp
118 };
119 
120 #define SIOCGLAGG               _IOWR('i', 143, struct lagg_reqall)
121 #define SIOCSLAGG                _IOW('i', 144, struct lagg_reqall)
122 
123 #ifdef _KERNEL
124 /*
125  * Internal kernel part
126  */
127 
128 #define lp_ifname               lp_ifp->if_xname        /* interface name */
129 #define lp_link_state           lp_ifp->if_link_state   /* link state */
130 
131 #define LAGG_PORTACTIVE(_tp)    (                                       \
132         ((_tp)->lp_link_state == LINK_STATE_UP) &&                      \
133         ((_tp)->lp_ifp->if_flags & IFF_UP)                              \
134 )
135 
136 struct lagg_ifreq {
137         union {
138                 struct ifreq ifreq;
139                 struct {
140                         char ifr_name[IFNAMSIZ];
141                         struct sockaddr_storage ifr_ss;
142                 } ifreq_storage;
143         } ifreq;
144 };
145 
146 #define sc_ifflags              sc_ifp->if_flags                /* flags */
147 #define sc_ifname               sc_ifp->if_xname                /* name */
148 #define sc_capabilities         sc_ifp->if_capabilities /* capabilities */
149 
150 #define IFCAP_LAGG_MASK         0xffff0000      /* private capabilities */
151 #define IFCAP_LAGG_FULLDUPLEX   0x00010000      /* full duplex with >1 ports */
152 
153 /* Private data used by the loadbalancing protocol */
154 struct lagg_lb {
155         u_int32_t               lb_key;
156         struct lagg_port        *lb_ports[LAGG_MAX_PORTS];
157 };
158 
159 struct lagg_mc {
160         struct ifmultiaddr      *mc_ifma;
161         SLIST_ENTRY(lagg_mc)    mc_entries;
162 };
163 
164 /* List of interfaces to have the MAC address modified */
165 struct lagg_llq {
166         struct ifnet            *llq_ifp;
167         uint8_t                 llq_lladdr[ETHER_ADDR_LEN];
168         SLIST_ENTRY(lagg_llq)   llq_entries;
169 };
170 
171 struct lagg_softc {
172         struct ifnet                    *sc_ifp;        /* virtual interface */
173         struct rwlock                   sc_mtx;
174         int                             sc_proto;       /* lagg protocol */
175         u_int                           sc_count;       /* number of ports */
176         struct lagg_port                *sc_primary;    /* primary port */
177         struct ifmedia                  sc_media;       /* media config */
178         caddr_t                         sc_psc;         /* protocol data */
179         uint32_t                        sc_seq;         /* sequence counter */
180 
181         SLIST_HEAD(__tplhd, lagg_port)  sc_ports;       /* list of interfaces */
182         SLIST_ENTRY(lagg_softc) sc_entries;
183 
184         struct task                     sc_lladdr_task;
185         SLIST_HEAD(__llqhd, lagg_llq)   sc_llq_head;    /* interfaces to program
186                                                            the lladdr on */
187 
188         /* lagg protocol callbacks */
189         int     (*sc_detach)(struct lagg_softc *);
190         int     (*sc_start)(struct lagg_softc *, struct mbuf *);
191         struct mbuf *(*sc_input)(struct lagg_softc *, struct lagg_port *,
192                     struct mbuf *);
193         int     (*sc_port_create)(struct lagg_port *);
194         void    (*sc_port_destroy)(struct lagg_port *);
195         void    (*sc_linkstate)(struct lagg_port *);
196         void    (*sc_init)(struct lagg_softc *);
197         void    (*sc_stop)(struct lagg_softc *);
198         void    (*sc_lladdr)(struct lagg_softc *);
199         void    (*sc_req)(struct lagg_softc *, caddr_t);
200         void    (*sc_portreq)(struct lagg_port *, caddr_t);
201 };
202 
203 struct lagg_port {
204         struct ifnet                    *lp_ifp;        /* physical interface */
205         struct lagg_softc               *lp_softc;      /* parent lagg */
206         uint8_t                         lp_lladdr[ETHER_ADDR_LEN];
207 
208         u_char                          lp_iftype;      /* interface type */
209         uint32_t                        lp_prio;        /* port priority */
210         uint32_t                        lp_flags;       /* port flags */
211         int                             lp_ifflags;     /* saved ifp flags */
212         void                            *lh_cookie;     /* if state hook */
213         caddr_t                         lp_psc;         /* protocol data */
214         int                             lp_detaching;   /* ifnet is detaching */
215 
216         SLIST_HEAD(__mclhd, lagg_mc)    lp_mc_head;     /* multicast addresses */
217 
218         /* Redirected callbacks */
219         int     (*lp_ioctl)(struct ifnet *, u_long, caddr_t);
220         int     (*lp_output)(struct ifnet *, struct mbuf *, struct sockaddr *,
221                      struct rtentry *);
222 
223         SLIST_ENTRY(lagg_port)          lp_entries;
224 };
225 
226 #define LAGG_LOCK_INIT(_sc)     rw_init(&(_sc)->sc_mtx, "if_lagg rwlock")
227 #define LAGG_LOCK_DESTROY(_sc)  rw_destroy(&(_sc)->sc_mtx)
228 #define LAGG_RLOCK(_sc)         rw_rlock(&(_sc)->sc_mtx)
229 #define LAGG_WLOCK(_sc)         rw_wlock(&(_sc)->sc_mtx)
230 #define LAGG_RUNLOCK(_sc)       rw_runlock(&(_sc)->sc_mtx)
231 #define LAGG_WUNLOCK(_sc)       rw_wunlock(&(_sc)->sc_mtx)
232 #define LAGG_RLOCK_ASSERT(_sc)  rw_assert(&(_sc)->sc_mtx, RA_RLOCKED)
233 #define LAGG_WLOCK_ASSERT(_sc)  rw_assert(&(_sc)->sc_mtx, RA_WLOCKED)
234 
235 extern struct mbuf *(*lagg_input_p)(struct ifnet *, struct mbuf *);
236 extern void     (*lagg_linkstate_p)(struct ifnet *, int );
237 
238 int             lagg_enqueue(struct ifnet *, struct mbuf *);
239 uint32_t        lagg_hashmbuf(struct mbuf *, uint32_t);
240 
241 #endif /* _KERNEL */
242 
243 #endif /* _NET_LAGG_H */
244 

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.