if_lagg.h revision 1.2.2.2 1 1.2.2.2 cjep /* $NetBSD: if_lagg.h,v 1.2.2.2 2021/05/31 22:15:21 cjep Exp $ */
2 1.2.2.2 cjep
3 1.2.2.2 cjep /*
4 1.2.2.2 cjep * Copyright (c) 2005, 2006 Reyk Floeter <reyk (at) openbsd.org>
5 1.2.2.2 cjep *
6 1.2.2.2 cjep * Permission to use, copy, modify, and distribute this software for any
7 1.2.2.2 cjep * purpose with or without fee is hereby granted, provided that the above
8 1.2.2.2 cjep * copyright notice and this permission notice appear in all copies.
9 1.2.2.2 cjep *
10 1.2.2.2 cjep * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 1.2.2.2 cjep * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 1.2.2.2 cjep * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 1.2.2.2 cjep * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 1.2.2.2 cjep * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 1.2.2.2 cjep * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 1.2.2.2 cjep * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 1.2.2.2 cjep *
18 1.2.2.2 cjep * $FreeBSD$
19 1.2.2.2 cjep */
20 1.2.2.2 cjep
21 1.2.2.2 cjep /*
22 1.2.2.2 cjep * Copyright (c) 2021 Internet Initiative Japan Inc.
23 1.2.2.2 cjep * All rights reserved.
24 1.2.2.2 cjep *
25 1.2.2.2 cjep * Redistribution and use in source and binary forms, with or without
26 1.2.2.2 cjep * modification, are permitted provided that the following conditions
27 1.2.2.2 cjep * are met:
28 1.2.2.2 cjep * 1. Redistributions of source code must retain the above copyright
29 1.2.2.2 cjep * notice, this list of conditions and the following disclaimer.
30 1.2.2.2 cjep * 2. Redistributions in binary form must reproduce the above copyright
31 1.2.2.2 cjep * notice, this list of conditions and the following disclaimer in the
32 1.2.2.2 cjep * documentation and/or other materials provided with the distribution.
33 1.2.2.2 cjep *
34 1.2.2.2 cjep * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
35 1.2.2.2 cjep * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
36 1.2.2.2 cjep * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
37 1.2.2.2 cjep * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
38 1.2.2.2 cjep * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
39 1.2.2.2 cjep * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
40 1.2.2.2 cjep * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
41 1.2.2.2 cjep * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
42 1.2.2.2 cjep * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
43 1.2.2.2 cjep * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
44 1.2.2.2 cjep * POSSIBILITY OF SUCH DAMAGE.
45 1.2.2.2 cjep */
46 1.2.2.2 cjep
47 1.2.2.2 cjep #ifndef _NET_LAGG_IF_LAGG_H_
48 1.2.2.2 cjep #define _NET_LAGG_IF_LAGG_H_
49 1.2.2.2 cjep
50 1.2.2.2 cjep typedef enum {
51 1.2.2.2 cjep LAGG_PROTO_NONE = 0,
52 1.2.2.2 cjep LAGG_PROTO_LACP, /* 802.1ax lacp */
53 1.2.2.2 cjep LAGG_PROTO_FAILOVER,
54 1.2.2.2 cjep LAGG_PROTO_LOADBALANCE,
55 1.2.2.2 cjep LAGG_PROTO_MAX,
56 1.2.2.2 cjep } lagg_proto;
57 1.2.2.2 cjep
58 1.2.2.2 cjep /* IEEE802.3ad LACP protocol definitions.*/
59 1.2.2.2 cjep #define LACP_STATE_ACTIVITY __BIT(0)
60 1.2.2.2 cjep #define LACP_STATE_TIMEOUT __BIT(1)
61 1.2.2.2 cjep #define LACP_STATE_AGGREGATION __BIT(2)
62 1.2.2.2 cjep #define LACP_STATE_SYNC __BIT(3)
63 1.2.2.2 cjep #define LACP_STATE_COLLECTING __BIT(4)
64 1.2.2.2 cjep #define LACP_STATE_DISTRIBUTING __BIT(5)
65 1.2.2.2 cjep #define LACP_STATE_DEFAULTED __BIT(6)
66 1.2.2.2 cjep #define LACP_STATE_EXPIRED __BIT(7)
67 1.2.2.2 cjep #define LACP_STATE_BITS \
68 1.2.2.2 cjep "\020" \
69 1.2.2.2 cjep "\001ACTIVITY" \
70 1.2.2.2 cjep "\002TIMEOUT" \
71 1.2.2.2 cjep "\003AGGREGATION" \
72 1.2.2.2 cjep "\004SYNC" \
73 1.2.2.2 cjep "\005COLLECTING" \
74 1.2.2.2 cjep "\006DISTRIBUTING" \
75 1.2.2.2 cjep "\007DEFAULTED" \
76 1.2.2.2 cjep "\010EXPIRED"
77 1.2.2.2 cjep #define LACP_STATESTR_LEN 256
78 1.2.2.2 cjep #define LACP_MAC_LEN ETHER_ADDR_LEN
79 1.2.2.2 cjep
80 1.2.2.2 cjep enum lagg_ioctl_lacp {
81 1.2.2.2 cjep LAGGIOC_LACPSETFLAGS = 1,
82 1.2.2.2 cjep LAGGIOC_LACPCLRFLAGS,
83 1.2.2.2 cjep LAGGIOC_LACPSETMAXPORTS,
84 1.2.2.2 cjep LAGGIOC_LACPCLRMAXPORTS,
85 1.2.2.2 cjep };
86 1.2.2.2 cjep
87 1.2.2.2 cjep #define LAGGREQLACP_OPTIMISTIC __BIT(0)
88 1.2.2.2 cjep #define LAGGREQLACP_DUMPDU __BIT(1)
89 1.2.2.2 cjep #define LAGGREQLACP_STOPDU __BIT(2)
90 1.2.2.2 cjep #define LAGGREQLACP_MULTILS __BIT(3)
91 1.2.2.2 cjep #define LAGGREQLACP_BITS \
92 1.2.2.2 cjep "\020" \
93 1.2.2.2 cjep "\001OPTIMISTIC" \
94 1.2.2.2 cjep "\002DUMPDU" \
95 1.2.2.2 cjep "\003STOPDU" \
96 1.2.2.2 cjep "\004MULTILS"
97 1.2.2.2 cjep
98 1.2.2.2 cjep struct laggreq_lacp {
99 1.2.2.2 cjep uint32_t command;
100 1.2.2.2 cjep uint32_t flags;
101 1.2.2.2 cjep size_t maxports;
102 1.2.2.2 cjep
103 1.2.2.2 cjep uint16_t actor_prio;
104 1.2.2.2 cjep uint8_t actor_mac[LACP_MAC_LEN];
105 1.2.2.2 cjep uint16_t actor_key;
106 1.2.2.2 cjep uint16_t partner_prio;
107 1.2.2.2 cjep uint8_t partner_mac[LACP_MAC_LEN];
108 1.2.2.2 cjep uint16_t partner_key;
109 1.2.2.2 cjep };
110 1.2.2.2 cjep
111 1.2.2.2 cjep enum lagg_ioctl_fail {
112 1.2.2.2 cjep LAGGIOC_FAILSETFLAGS = 1,
113 1.2.2.2 cjep LAGGIOC_FAILCLRFLAGS
114 1.2.2.2 cjep };
115 1.2.2.2 cjep
116 1.2.2.2 cjep #define LAGGREQFAIL_RXALL __BIT(0)
117 1.2.2.2 cjep
118 1.2.2.2 cjep struct laggreq_fail {
119 1.2.2.2 cjep uint32_t command;
120 1.2.2.2 cjep uint32_t flags;
121 1.2.2.2 cjep };
122 1.2.2.2 cjep
123 1.2.2.2 cjep struct laggreqproto {
124 1.2.2.2 cjep union {
125 1.2.2.2 cjep struct laggreq_lacp proto_lacp;
126 1.2.2.2 cjep struct laggreq_fail proto_fail;
127 1.2.2.2 cjep } rp_proto;
128 1.2.2.2 cjep #define rp_lacp rp_proto.proto_lacp
129 1.2.2.2 cjep #define rp_fail rp_proto.proto_fail
130 1.2.2.2 cjep };
131 1.2.2.2 cjep
132 1.2.2.2 cjep #define LAGG_PORT_SLAVE 0
133 1.2.2.2 cjep #define LAGG_PORT_MASTER __BIT(0)
134 1.2.2.2 cjep #define LAGG_PORT_STACK __BIT(1)
135 1.2.2.2 cjep #define LAGG_PORT_ACTIVE __BIT(2)
136 1.2.2.2 cjep #define LAGG_PORT_COLLECTING __BIT(3)
137 1.2.2.2 cjep #define LAGG_PORT_DISTRIBUTING __BIT(4)
138 1.2.2.2 cjep #define LAGG_PORT_STANDBY __BIT(5)
139 1.2.2.2 cjep #define LAGG_PORT_BITS \
140 1.2.2.2 cjep "\020" \
141 1.2.2.2 cjep "\001MASTER" \
142 1.2.2.2 cjep "\002STACK" \
143 1.2.2.2 cjep "\003ACTIVE" \
144 1.2.2.2 cjep "\004COLLECTING" \
145 1.2.2.2 cjep "\005DISTRIBUTING" \
146 1.2.2.2 cjep "\006STANDBY"
147 1.2.2.2 cjep #define LACP_PORTSTR_LEN 256
148 1.2.2.2 cjep
149 1.2.2.2 cjep struct laggreq_lacpport {
150 1.2.2.2 cjep uint16_t partner_prio;
151 1.2.2.2 cjep uint8_t partner_mac[LACP_MAC_LEN];
152 1.2.2.2 cjep uint16_t partner_key;
153 1.2.2.2 cjep
154 1.2.2.2 cjep uint16_t actor_portprio;
155 1.2.2.2 cjep uint16_t actor_portno;
156 1.2.2.2 cjep uint8_t actor_state;
157 1.2.2.2 cjep uint16_t partner_portprio;
158 1.2.2.2 cjep uint16_t partner_portno;
159 1.2.2.2 cjep uint8_t partner_state;
160 1.2.2.2 cjep };
161 1.2.2.2 cjep
162 1.2.2.2 cjep struct laggreqport {
163 1.2.2.2 cjep char rp_portname[IFNAMSIZ];
164 1.2.2.2 cjep uint32_t rp_prio;
165 1.2.2.2 cjep uint32_t rp_flags;
166 1.2.2.2 cjep
167 1.2.2.2 cjep union {
168 1.2.2.2 cjep struct laggreq_lacpport port_lacp;
169 1.2.2.2 cjep } rp_port;
170 1.2.2.2 cjep #define rp_lacpport rp_port.port_lacp
171 1.2.2.2 cjep };
172 1.2.2.2 cjep
173 1.2.2.2 cjep enum lagg_ioctl {
174 1.2.2.2 cjep LAGGIOC_NOCMD,
175 1.2.2.2 cjep LAGGIOC_SETPROTO = 1,
176 1.2.2.2 cjep LAGGIOC_SETPROTOOPT,
177 1.2.2.2 cjep LAGGIOC_ADDPORT,
178 1.2.2.2 cjep LAGGIOC_DELPORT,
179 1.2.2.2 cjep LAGGIOC_SETPORTPRI,
180 1.2.2.2 cjep };
181 1.2.2.2 cjep
182 1.2.2.2 cjep struct lagg_req {
183 1.2.2.2 cjep uint32_t lrq_ioctl;
184 1.2.2.2 cjep lagg_proto lrq_proto;
185 1.2.2.2 cjep size_t lrq_nports;
186 1.2.2.2 cjep struct laggreqproto lrq_reqproto;
187 1.2.2.2 cjep struct laggreqport lrq_reqports[1];
188 1.2.2.2 cjep };
189 1.2.2.2 cjep
190 1.2.2.2 cjep #define SIOCGLAGG SIOCGIFGENERIC
191 1.2.2.2 cjep #define SIOCSLAGG SIOCSIFGENERIC
192 1.2.2.2 cjep #define SIOCGLAGGPORT SIOCGIFGENERIC
193 1.2.2.2 cjep #endif
194