if_lagg.h revision 1.1 1 /* $NetBSD: if_lagg.h,v 1.1 2021/05/17 04:07:43 yamaguchi Exp $ */
2
3 #ifndef _NET_LAGG_IF_LAGG_H_
4 #define _NET_LAGG_IF_LAGG_H_
5
6 typedef enum {
7 LAGG_PROTO_NONE = 0,
8 LAGG_PROTO_LACP, /* 802.1ax lacp */
9 LAGG_PROTO_FAILOVER,
10 LAGG_PROTO_LOADBALANCE,
11 LAGG_PROTO_MAX,
12 } lagg_proto;
13
14 /* IEEE802.3ad LACP protocol definitions.*/
15 #define LACP_STATE_ACTIVITY __BIT(0)
16 #define LACP_STATE_TIMEOUT __BIT(1)
17 #define LACP_STATE_AGGREGATION __BIT(2)
18 #define LACP_STATE_SYNC __BIT(3)
19 #define LACP_STATE_COLLECTING __BIT(4)
20 #define LACP_STATE_DISTRIBUTING __BIT(5)
21 #define LACP_STATE_DEFAULTED __BIT(6)
22 #define LACP_STATE_EXPIRED __BIT(7)
23 #define LACP_STATE_BITS \
24 "\020" \
25 "\001ACTIVITY" \
26 "\002TIMEOUT" \
27 "\003AGGREGATION" \
28 "\004SYNC" \
29 "\005COLLECTING" \
30 "\006DISTRIBUTING" \
31 "\007DEFAULTED" \
32 "\010EXPIRED"
33 #define LACP_STATESTR_LEN 256
34 #define LACP_MAC_LEN ETHER_ADDR_LEN
35
36 enum lagg_ioctl_lacp {
37 LAGGIOC_LACPSETFLAGS = 1,
38 LAGGIOC_LACPCLRFLAGS,
39 LAGGIOC_LACPSETMAXPORTS,
40 LAGGIOC_LACPCLRMAXPORTS,
41 };
42
43 #define LAGGREQLACP_OPTIMISTIC __BIT(0)
44 #define LAGGREQLACP_DUMPDU __BIT(1)
45 #define LAGGREQLACP_STOPDU __BIT(2)
46 #define LAGGREQLACP_MULTILS __BIT(3)
47 #define LAGGREQLACP_BITS \
48 "\020" \
49 "\001OPTIMISTIC" \
50 "\002DUMPDU" \
51 "\003STOPDU" \
52 "\004MULTILS"
53
54 struct laggreq_lacp {
55 uint32_t command;
56 uint32_t flags;
57 size_t maxports;
58
59 uint16_t actor_prio;
60 uint8_t actor_mac[LACP_MAC_LEN];
61 uint16_t actor_key;
62 uint16_t partner_prio;
63 uint8_t partner_mac[LACP_MAC_LEN];
64 uint16_t partner_key;
65 };
66
67 enum lagg_ioctl_fail {
68 LAGGIOC_FAILSETFLAGS = 1,
69 LAGGIOC_FAILCLRFLAGS
70 };
71
72 #define LAGGREQFAIL_RXALL __BIT(0)
73
74 struct laggreq_fail {
75 uint32_t command;
76 uint32_t flags;
77 };
78
79 struct laggreqproto {
80 union {
81 struct laggreq_lacp proto_lacp;
82 struct laggreq_fail proto_fail;
83 } rp_proto;
84 #define rp_lacp rp_proto.proto_lacp
85 #define rp_fail rp_proto.proto_fail
86 };
87
88 #define LAGG_PORT_SLAVE 0
89 #define LAGG_PORT_MASTER __BIT(0)
90 #define LAGG_PORT_STACK __BIT(1)
91 #define LAGG_PORT_ACTIVE __BIT(2)
92 #define LAGG_PORT_COLLECTING __BIT(3)
93 #define LAGG_PORT_DISTRIBUTING __BIT(4)
94 #define LAGG_PORT_STANDBY __BIT(5)
95 #define LAGG_PORT_BITS \
96 "\020" \
97 "\001MASTER" \
98 "\002STACK" \
99 "\003ACTIVE" \
100 "\004COLLECTING" \
101 "\005DISTRIBUTING" \
102 "\006STANDBY"
103 #define LACP_PORTSTR_LEN 256
104
105 struct laggreq_lacpport {
106 uint16_t partner_prio;
107 uint8_t partner_mac[LACP_MAC_LEN];
108 uint16_t partner_key;
109
110 uint16_t actor_portprio;
111 uint16_t actor_portno;
112 uint8_t actor_state;
113 uint16_t partner_portprio;
114 uint16_t partner_portno;
115 uint8_t partner_state;
116 };
117
118 struct laggreqport {
119 char rp_portname[IFNAMSIZ];
120 uint32_t rp_prio;
121 uint32_t rp_flags;
122
123 union {
124 struct laggreq_lacpport port_lacp;
125 } rp_port;
126 #define rp_lacpport rp_port.port_lacp
127 };
128
129 enum lagg_ioctl {
130 LAGGIOC_NOCMD,
131 LAGGIOC_SETPROTO = 1,
132 LAGGIOC_SETPROTOOPT,
133 LAGGIOC_ADDPORT,
134 LAGGIOC_DELPORT,
135 LAGGIOC_SETPORTPRI,
136 };
137
138 struct lagg_req {
139 uint32_t lrq_ioctl;
140 lagg_proto lrq_proto;
141 size_t lrq_nports;
142 struct laggreqproto lrq_reqproto;
143 struct laggreqport lrq_reqports[1];
144 };
145
146 #define SIOCGLAGG SIOCGIFGENERIC
147 #define SIOCSLAGG SIOCSIFGENERIC
148 #define SIOCGLAGGPORT SIOCGIFGENERIC
149 #endif
150