Deleted Added
full compact
iflagg.c (191693) iflagg.c (232629)
1/*-
2 */
3
4#ifndef lint
5static const char rcsid[] =
1/*-
2 */
3
4#ifndef lint
5static const char rcsid[] =
6 "$FreeBSD: head/sbin/ifconfig/iflagg.c 191693 2009-04-30 14:31:52Z thompsa $";
6 "$FreeBSD: head/sbin/ifconfig/iflagg.c 232629 2012-03-06 22:58:13Z thompsa $";
7#endif /* not lint */
8
9#include <sys/param.h>
10#include <sys/ioctl.h>
11#include <sys/socket.h>
12#include <sys/sockio.h>
13
14#include <stdlib.h>

--- 61 unchanged lines hidden (view full) ---

76 if (ra.ra_proto == LAGG_PROTO_MAX)
77 errx(1, "Invalid aggregation protocol: %s", val);
78
79 strlcpy(ra.ra_ifname, name, sizeof(ra.ra_ifname));
80 if (ioctl(s, SIOCSLAGG, &ra) != 0)
81 err(1, "SIOCSLAGG");
82}
83
7#endif /* not lint */
8
9#include <sys/param.h>
10#include <sys/ioctl.h>
11#include <sys/socket.h>
12#include <sys/sockio.h>
13
14#include <stdlib.h>

--- 61 unchanged lines hidden (view full) ---

76 if (ra.ra_proto == LAGG_PROTO_MAX)
77 errx(1, "Invalid aggregation protocol: %s", val);
78
79 strlcpy(ra.ra_ifname, name, sizeof(ra.ra_ifname));
80 if (ioctl(s, SIOCSLAGG, &ra) != 0)
81 err(1, "SIOCSLAGG");
82}
83
84static void
85setlagghash(const char *val, int d, int s, const struct afswtch *afp)
86{
87 struct lagg_reqflags rf;
88 char *str, *tmp, *tok;
89
90
91 rf.rf_flags = 0;
92 str = tmp = strdup(val);
93 while ((tok = strsep(&tmp, ",")) != NULL) {
94 if (strcmp(tok, "l2") == 0)
95 rf.rf_flags |= LAGG_F_HASHL2;
96 else if (strcmp(tok, "l3") == 0)
97 rf.rf_flags |= LAGG_F_HASHL3;
98 else if (strcmp(tok, "l4") == 0)
99 rf.rf_flags |= LAGG_F_HASHL4;
100 else {
101 free(str);
102 errx(1, "Invalid lagghash option: %s", tok);
103 }
104 }
105 free(str);
106 if (rf.rf_flags == 0)
107 errx(1, "No lagghash options supplied");
108
109 strlcpy(rf.rf_ifname, name, sizeof(rf.rf_ifname));
110 if (ioctl(s, SIOCSLAGGHASH, &rf))
111 err(1, "SIOCSLAGGHASH");
112}
113
84static char *
85lacp_format_mac(const uint8_t *mac, char *buf, size_t buflen)
86{
87 snprintf(buf, buflen, "%02X-%02X-%02X-%02X-%02X-%02X",
88 (int)mac[0], (int)mac[1], (int)mac[2], (int)mac[3],
89 (int)mac[4], (int)mac[5]);
90
91 return (buf);

--- 18 unchanged lines hidden (view full) ---

110}
111
112static void
113lagg_status(int s)
114{
115 struct lagg_protos lpr[] = LAGG_PROTOS;
116 struct lagg_reqport rp, rpbuf[LAGG_MAX_PORTS];
117 struct lagg_reqall ra;
114static char *
115lacp_format_mac(const uint8_t *mac, char *buf, size_t buflen)
116{
117 snprintf(buf, buflen, "%02X-%02X-%02X-%02X-%02X-%02X",
118 (int)mac[0], (int)mac[1], (int)mac[2], (int)mac[3],
119 (int)mac[4], (int)mac[5]);
120
121 return (buf);

--- 18 unchanged lines hidden (view full) ---

140}
141
142static void
143lagg_status(int s)
144{
145 struct lagg_protos lpr[] = LAGG_PROTOS;
146 struct lagg_reqport rp, rpbuf[LAGG_MAX_PORTS];
147 struct lagg_reqall ra;
148 struct lagg_reqflags rf;
118 struct lacp_opreq *lp;
119 const char *proto = "<unknown>";
120 int i, isport = 0;
121
122 bzero(&rp, sizeof(rp));
123 bzero(&ra, sizeof(ra));
124
125 strlcpy(rp.rp_ifname, name, sizeof(rp.rp_ifname));
126 strlcpy(rp.rp_portname, name, sizeof(rp.rp_portname));
127
128 if (ioctl(s, SIOCGLAGGPORT, &rp) == 0)
129 isport = 1;
130
131 strlcpy(ra.ra_ifname, name, sizeof(ra.ra_ifname));
132 ra.ra_size = sizeof(rpbuf);
133 ra.ra_port = rpbuf;
134
149 struct lacp_opreq *lp;
150 const char *proto = "<unknown>";
151 int i, isport = 0;
152
153 bzero(&rp, sizeof(rp));
154 bzero(&ra, sizeof(ra));
155
156 strlcpy(rp.rp_ifname, name, sizeof(rp.rp_ifname));
157 strlcpy(rp.rp_portname, name, sizeof(rp.rp_portname));
158
159 if (ioctl(s, SIOCGLAGGPORT, &rp) == 0)
160 isport = 1;
161
162 strlcpy(ra.ra_ifname, name, sizeof(ra.ra_ifname));
163 ra.ra_size = sizeof(rpbuf);
164 ra.ra_port = rpbuf;
165
166 strlcpy(rf.rf_ifname, name, sizeof(rf.rf_ifname));
167 if (ioctl(s, SIOCGLAGGFLAGS, &rf) != 0)
168 rf.rf_flags = 0;
169
135 if (ioctl(s, SIOCGLAGG, &ra) == 0) {
136 lp = (struct lacp_opreq *)&ra.ra_lacpreq;
137
138 for (i = 0; i < (sizeof(lpr) / sizeof(lpr[0])); i++) {
139 if (ra.ra_proto == lpr[i].lpr_proto) {
140 proto = lpr[i].lpr_name;
141 break;
142 }
143 }
144
145 printf("\tlaggproto %s", proto);
170 if (ioctl(s, SIOCGLAGG, &ra) == 0) {
171 lp = (struct lacp_opreq *)&ra.ra_lacpreq;
172
173 for (i = 0; i < (sizeof(lpr) / sizeof(lpr[0])); i++) {
174 if (ra.ra_proto == lpr[i].lpr_proto) {
175 proto = lpr[i].lpr_name;
176 break;
177 }
178 }
179
180 printf("\tlaggproto %s", proto);
181 if (rf.rf_flags & LAGG_F_HASHMASK) {
182 const char *sep = "";
183
184 printf(" lagghash ");
185 if (rf.rf_flags & LAGG_F_HASHL2) {
186 printf("%sl2", sep);
187 sep = ",";
188 }
189 if (rf.rf_flags & LAGG_F_HASHL3) {
190 printf("%sl3", sep);
191 sep = ",";
192 }
193 if (rf.rf_flags & LAGG_F_HASHL4) {
194 printf("%sl4", sep);
195 sep = ",";
196 }
197 }
146 if (isport)
147 printf(" laggdev %s", rp.rp_ifname);
148 putchar('\n');
149 if (verbose && ra.ra_proto == LAGG_PROTO_LACP)
150 printf("\tlag id: %s\n",
151 lacp_format_peer(lp, "\n\t\t "));
152
153 for (i = 0; i < ra.ra_ports; i++) {

--- 15 unchanged lines hidden (view full) ---

169 }
170 }
171}
172
173static struct cmd lagg_cmds[] = {
174 DEF_CMD_ARG("laggport", setlaggport),
175 DEF_CMD_ARG("-laggport", unsetlaggport),
176 DEF_CMD_ARG("laggproto", setlaggproto),
198 if (isport)
199 printf(" laggdev %s", rp.rp_ifname);
200 putchar('\n');
201 if (verbose && ra.ra_proto == LAGG_PROTO_LACP)
202 printf("\tlag id: %s\n",
203 lacp_format_peer(lp, "\n\t\t "));
204
205 for (i = 0; i < ra.ra_ports; i++) {

--- 15 unchanged lines hidden (view full) ---

221 }
222 }
223}
224
225static struct cmd lagg_cmds[] = {
226 DEF_CMD_ARG("laggport", setlaggport),
227 DEF_CMD_ARG("-laggport", unsetlaggport),
228 DEF_CMD_ARG("laggproto", setlaggproto),
229 DEF_CMD_ARG("lagghash", setlagghash),
177};
178static struct afswtch af_lagg = {
179 .af_name = "af_lagg",
180 .af_af = AF_UNSPEC,
181 .af_other_status = lagg_status,
182};
183
184static __constructor void
185lagg_ctor(void)
186{
187#define N(a) (sizeof(a) / sizeof(a[0]))
188 int i;
189
190 for (i = 0; i < N(lagg_cmds); i++)
191 cmd_register(&lagg_cmds[i]);
192 af_register(&af_lagg);
193#undef N
194}
230};
231static struct afswtch af_lagg = {
232 .af_name = "af_lagg",
233 .af_af = AF_UNSPEC,
234 .af_other_status = lagg_status,
235};
236
237static __constructor void
238lagg_ctor(void)
239{
240#define N(a) (sizeof(a) / sizeof(a[0]))
241 int i;
242
243 for (i = 0; i < N(lagg_cmds); i++)
244 cmd_register(&lagg_cmds[i]);
245 af_register(&af_lagg);
246#undef N
247}