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