Changeset View
Changeset View
Standalone View
Standalone View
sbin/ifconfig/iflagg.c
Show All 24 Lines | |||||
#include <string.h> | #include <string.h> | ||||
#include <stdlib.h> | #include <stdlib.h> | ||||
#include <unistd.h> | #include <unistd.h> | ||||
#include <err.h> | #include <err.h> | ||||
#include <errno.h> | #include <errno.h> | ||||
#include "ifconfig.h" | #include "ifconfig.h" | ||||
char lacpbuf[120]; /* LACP peer '[(a,a,a),(p,p,p)]' */ | static struct iflaggparam params = { | ||||
.lagg_type = LAGG_TYPE_DEFAULT, | |||||
}; | |||||
static char lacpbuf[120]; /* LACP peer '[(a,a,a),(p,p,p)]' */ | |||||
static void | static void | ||||
setlaggport(const char *val, int d, int s, const struct afswtch *afp) | setlaggport(const char *val, int d, int s, const struct afswtch *afp) | ||||
{ | { | ||||
struct lagg_reqport rp; | struct lagg_reqport rp; | ||||
bzero(&rp, sizeof(rp)); | bzero(&rp, sizeof(rp)); | ||||
strlcpy(rp.rp_ifname, name, sizeof(rp.rp_ifname)); | strlcpy(rp.rp_ifname, name, sizeof(rp.rp_ifname)); | ||||
strlcpy(rp.rp_portname, val, sizeof(rp.rp_portname)); | strlcpy(rp.rp_portname, val, sizeof(rp.rp_portname)); | ||||
▲ Show 20 Lines • Show All 253 Lines • ▼ Show 20 Lines | if (ioctl(s, SIOCGLAGG, &ra) == 0) { | ||||
if (0 /* XXX */) { | if (0 /* XXX */) { | ||||
printf("\tsupported aggregation protocols:\n"); | printf("\tsupported aggregation protocols:\n"); | ||||
for (i = 0; i < nitems(lpr); i++) | for (i = 0; i < nitems(lpr); i++) | ||||
printf("\t\tlaggproto %s\n", lpr[i].lpr_name); | printf("\t\tlaggproto %s\n", lpr[i].lpr_name); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
static | |||||
DECL_CMD_FUNC(setlaggtype, arg, d) | |||||
{ | |||||
static const struct lagg_types lt[] = LAGG_TYPES; | |||||
int i; | |||||
for (i = 0; i < nitems(lt); i++) { | |||||
if (strcmp(arg, lt[i].lt_name) == 0) { | |||||
params.lagg_type = lt[i].lt_value; | |||||
return; | |||||
} | |||||
} | |||||
errx(1, "invalid lagg type: %s", arg); | |||||
} | |||||
static void | |||||
lagg_create(int s, struct ifreq *ifr) | |||||
{ | |||||
ifr->ifr_data = (caddr_t) ¶ms; | |||||
if (ioctl(s, SIOCIFCREATE2, ifr) < 0) | |||||
err(1, "SIOCIFCREATE2"); | |||||
} | |||||
static struct cmd lagg_cmds[] = { | static struct cmd lagg_cmds[] = { | ||||
DEF_CLONE_CMD_ARG("laggtype", setlaggtype), | |||||
DEF_CMD_ARG("laggport", setlaggport), | DEF_CMD_ARG("laggport", setlaggport), | ||||
DEF_CMD_ARG("-laggport", unsetlaggport), | DEF_CMD_ARG("-laggport", unsetlaggport), | ||||
DEF_CMD_ARG("laggproto", setlaggproto), | DEF_CMD_ARG("laggproto", setlaggproto), | ||||
DEF_CMD_ARG("lagghash", setlagghash), | DEF_CMD_ARG("lagghash", setlagghash), | ||||
DEF_CMD("use_flowid", LAGG_OPT_USE_FLOWID, setlaggsetopt), | DEF_CMD("use_flowid", LAGG_OPT_USE_FLOWID, setlaggsetopt), | ||||
DEF_CMD("-use_flowid", -LAGG_OPT_USE_FLOWID, setlaggsetopt), | DEF_CMD("-use_flowid", -LAGG_OPT_USE_FLOWID, setlaggsetopt), | ||||
DEF_CMD("use_numa", LAGG_OPT_USE_NUMA, setlaggsetopt), | DEF_CMD("use_numa", LAGG_OPT_USE_NUMA, setlaggsetopt), | ||||
DEF_CMD("-use_numa", -LAGG_OPT_USE_NUMA, setlaggsetopt), | DEF_CMD("-use_numa", -LAGG_OPT_USE_NUMA, setlaggsetopt), | ||||
Show All 17 Lines | |||||
static __constructor void | static __constructor void | ||||
lagg_ctor(void) | lagg_ctor(void) | ||||
{ | { | ||||
int i; | int i; | ||||
for (i = 0; i < nitems(lagg_cmds); i++) | for (i = 0; i < nitems(lagg_cmds); i++) | ||||
cmd_register(&lagg_cmds[i]); | cmd_register(&lagg_cmds[i]); | ||||
af_register(&af_lagg); | af_register(&af_lagg); | ||||
clone_setdefcallback("lagg", lagg_create); | |||||
} | } |