aboutsummaryrefslogtreecommitdiff
path: root/sbin/ifconfig
diff options
context:
space:
mode:
authorAlexander V. Chernikov <melifaro@FreeBSD.org>2023-06-14 13:00:49 +0000
committerAlexander V. Chernikov <melifaro@FreeBSD.org>2023-06-16 07:19:21 +0000
commit7fa282e616c303261904cb6158959d5a784dc3ee (patch)
tree16ae79d99e60e88a91fbd93d3dccf70dd0380a5e /sbin/ifconfig
parent9e8174289236de996199aadc6357c05eafba3b38 (diff)
downloadsrc-7fa282e616c303261904cb6158959d5a784dc3ee.tar.gz
src-7fa282e616c303261904cb6158959d5a784dc3ee.zip
Diffstat (limited to 'sbin/ifconfig')
-rw-r--r--sbin/ifconfig/af_inet6.c4
-rw-r--r--sbin/ifconfig/af_link.c10
-rw-r--r--sbin/ifconfig/af_nd6.c30
-rw-r--r--sbin/ifconfig/ifclone.c5
-rw-r--r--sbin/ifconfig/ifconfig.c128
-rw-r--r--sbin/ifconfig/ifconfig.h5
-rw-r--r--sbin/ifconfig/ifconfig_netlink.c5
-rw-r--r--sbin/ifconfig/iffib.c8
-rw-r--r--sbin/ifconfig/ifgif.c8
-rw-r--r--sbin/ifconfig/ifgre.c22
-rw-r--r--sbin/ifconfig/ifipsec.c9
-rw-r--r--sbin/ifconfig/ifpfsync.c35
-rw-r--r--sbin/ifconfig/ifstf.c6
-rw-r--r--sbin/ifconfig/ifvlan.c44
-rw-r--r--sbin/ifconfig/ifvxlan.c8
15 files changed, 170 insertions, 157 deletions
diff --git a/sbin/ifconfig/af_inet6.c b/sbin/ifconfig/af_inet6.c
index b8a5cb3012ed..1acfc28cad94 100644
--- a/sbin/ifconfig/af_inet6.c
+++ b/sbin/ifconfig/af_inet6.c
@@ -291,7 +291,7 @@ print_lifetime(const char *prepend, time_t px_time, struct timespec *now)
#ifdef WITHOUT_NETLINK
static void
-in6_status(if_ctx *ctx __unused, const struct ifaddrs *ifa)
+in6_status(if_ctx *ctx, const struct ifaddrs *ifa)
{
struct sockaddr_in6 *sin, null_sin = {};
struct in6_ifreq ifr6;
@@ -303,7 +303,7 @@ in6_status(if_ctx *ctx __unused, const struct ifaddrs *ifa)
if (sin == NULL)
return;
- strlcpy(ifr6.ifr_name, ifr.ifr_name, sizeof(ifr.ifr_name));
+ strlcpy(ifr6.ifr_name, ctx->ifname, sizeof(ifr6.ifr_name));
if ((s6 = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
warn("socket(AF_INET6,SOCK_DGRAM)");
return;
diff --git a/sbin/ifconfig/af_link.c b/sbin/ifconfig/af_link.c
index 7b7c5259d6c9..e66266ece86b 100644
--- a/sbin/ifconfig/af_link.c
+++ b/sbin/ifconfig/af_link.c
@@ -101,9 +101,11 @@ print_lladdr(struct sockaddr_dl *sdl)
}
static void
-print_pcp(int s)
+print_pcp(if_ctx *ctx)
{
- if (ioctl(s, SIOCGLANPCP, (caddr_t)&ifr) == 0 &&
+ struct ifreq ifr = {};
+
+ if (ioctl_ctx_ifr(ctx, SIOCGLANPCP, &ifr) == 0 &&
ifr.ifr_lan_pcp != IFNET_PCP_NONE)
printf("\tpcp %d\n", ifr.ifr_lan_pcp);
}
@@ -159,7 +161,7 @@ link_status(if_ctx *ctx, const struct ifaddrs *ifa)
print_ether((const struct ether_addr *)&ifr.ifr_addr.sa_data, "hwaddr");
pcp:
- print_pcp(ctx->io_s);
+ print_pcp(ctx);
}
#else
@@ -196,7 +198,7 @@ link_status_nl(if_ctx *ctx, if_link_t *link, if_addr_t *ifa __unused)
}
}
if (convert_iftype(link->ifi_type) == IFT_ETHER)
- print_pcp(ctx->io_s);
+ print_pcp(ctx);
}
#endif
diff --git a/sbin/ifconfig/af_nd6.c b/sbin/ifconfig/af_nd6.c
index ef46f5694cc0..7eeb86585197 100644
--- a/sbin/ifconfig/af_nd6.c
+++ b/sbin/ifconfig/af_nd6.c
@@ -69,7 +69,7 @@ static const char rcsid[] =
"\007NO_RADR\010NO_PREFER_IFACE\011NO_DAD\020DEFAULTIF"
#endif
-static int isnd6defif(int);
+static int isnd6defif(if_ctx *ctx, int s);
void setnd6flags(if_ctx *, const char *, int);
void setnd6defif(if_ctx *,const char *, int);
void nd6_status(if_ctx *);
@@ -77,11 +77,10 @@ void nd6_status(if_ctx *);
void
setnd6flags(if_ctx *ctx, const char *dummyaddr __unused, int d)
{
- struct in6_ndireq nd;
+ struct in6_ndireq nd = {};
int error;
- memset(&nd, 0, sizeof(nd));
- strlcpy(nd.ifname, ifr.ifr_name, sizeof(nd.ifname));
+ strlcpy(nd.ifname, ctx->ifname, sizeof(nd.ifname));
error = ioctl_ctx(ctx, SIOCGIFINFO_IN6, &nd);
if (error) {
warn("ioctl(SIOCGIFINFO_IN6)");
@@ -99,15 +98,14 @@ setnd6flags(if_ctx *ctx, const char *dummyaddr __unused, int d)
void
setnd6defif(if_ctx *ctx, const char *dummyaddr __unused, int d)
{
- struct in6_ndifreq ndifreq;
+ struct in6_ndifreq ndifreq = {};
int ifindex;
int error;
- memset(&ndifreq, 0, sizeof(ndifreq));
- strlcpy(ndifreq.ifname, ifr.ifr_name, sizeof(ndifreq.ifname));
+ strlcpy(ndifreq.ifname, ctx->ifname, sizeof(ndifreq.ifname));
if (d < 0) {
- if (isnd6defif(ctx->io_s)) {
+ if (isnd6defif(ctx, ctx->io_s)) {
/* ifindex = 0 means to remove default if */
ifindex = 0;
} else
@@ -124,14 +122,13 @@ setnd6defif(if_ctx *ctx, const char *dummyaddr __unused, int d)
}
static int
-isnd6defif(int s)
+isnd6defif(if_ctx *ctx, int s)
{
- struct in6_ndifreq ndifreq;
+ struct in6_ndifreq ndifreq = {};
unsigned int ifindex;
int error;
- memset(&ndifreq, 0, sizeof(ndifreq));
- strlcpy(ndifreq.ifname, ifr.ifr_name, sizeof(ndifreq.ifname));
+ strlcpy(ndifreq.ifname, ctx->ifname, sizeof(ndifreq.ifname));
ifindex = if_nametoindex(ndifreq.ifname);
error = ioctl(s, SIOCGDEFIFACE_IN6, (caddr_t)&ndifreq);
@@ -143,15 +140,14 @@ isnd6defif(int s)
}
void
-nd6_status(if_ctx *ctx __unused)
+nd6_status(if_ctx *ctx)
{
- struct in6_ndireq nd;
+ struct in6_ndireq nd = {};
int s6;
int error;
int isdefif;
- memset(&nd, 0, sizeof(nd));
- strlcpy(nd.ifname, ifr.ifr_name, sizeof(nd.ifname));
+ strlcpy(nd.ifname, ctx->ifname, sizeof(nd.ifname));
if ((s6 = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
if (errno != EAFNOSUPPORT && errno != EPROTONOSUPPORT)
warn("socket(AF_INET6, SOCK_DGRAM)");
@@ -164,7 +160,7 @@ nd6_status(if_ctx *ctx __unused)
close(s6);
return;
}
- isdefif = isnd6defif(s6);
+ isdefif = isnd6defif(ctx, s6);
close(s6);
if (nd.ndi.flags == 0 && !isdefif)
return;
diff --git a/sbin/ifconfig/ifclone.c b/sbin/ifconfig/ifclone.c
index f0ae93ec792c..8b378cbe341f 100644
--- a/sbin/ifconfig/ifclone.c
+++ b/sbin/ifconfig/ifclone.c
@@ -159,8 +159,9 @@ clone_create(if_ctx *ctx __unused, const char *cmd __unused, int d __unused)
static void
clone_destroy(if_ctx *ctx, const char *cmd __unused, int d __unused)
{
- strlcpy(ifr.ifr_name, ctx->ifname, sizeof(ifr.ifr_name));
- if (ioctl(ctx->io_s, SIOCIFDESTROY, &ifr) < 0)
+ struct ifreq ifr = {};
+
+ if (ioctl_ctx_ifr(ctx, SIOCIFDESTROY, &ifr) < 0)
err(1, "SIOCIFDESTROY");
}
diff --git a/sbin/ifconfig/ifconfig.c b/sbin/ifconfig/ifconfig.c
index 6a80ad5763b2..5ac217858057 100644
--- a/sbin/ifconfig/ifconfig.c
+++ b/sbin/ifconfig/ifconfig.c
@@ -206,6 +206,19 @@ ifname_update(if_ctx *ctx, const char *name)
strlcpy(ifname_to_print, name, sizeof(ifname_to_print));
}
+static void
+ifr_set_name(struct ifreq *ifr, const char *name)
+{
+ strlcpy(ifr->ifr_name, name, sizeof(ifr->ifr_name));
+}
+
+int
+ioctl_ctx_ifr(if_ctx *ctx, unsigned long cmd, struct ifreq *ifr)
+{
+ ifr_set_name(ifr, ctx->ifname);
+ return (ioctl_ctx(ctx, cmd, ifr));
+}
+
void
ifcreate_ioctl(if_ctx *ctx, struct ifreq *ifr)
{
@@ -1105,6 +1118,7 @@ ifconfig_ioctl(if_ctx *orig_ctx, int iscreate, const struct afswtch *uafp)
};
struct ifconfig_context *ctx = &_ctx;
+ struct ifreq ifr = {};
strlcpy(ifr.ifr_name, ctx->ifname, sizeof ifr.ifr_name);
afp = NULL;
if (uafp != NULL)
@@ -1282,8 +1296,9 @@ settunnel(if_ctx *ctx, const char *src, const char *dst)
static void
deletetunnel(if_ctx *ctx, const char *vname __unused, int param __unused)
{
+ struct ifreq ifr = {};
- if (ioctl_ctx(ctx, SIOCDIFPHYADDR, &ifr) < 0)
+ if (ioctl_ctx_ifr(ctx, SIOCDIFPHYADDR, &ifr) < 0)
err(1, "SIOCDIFPHYADDR");
}
@@ -1291,27 +1306,25 @@ deletetunnel(if_ctx *ctx, const char *vname __unused, int param __unused)
static void
setifvnet(if_ctx *ctx, const char *jname, int dummy __unused)
{
- struct ifreq my_ifr;
+ struct ifreq ifr = {};
- memcpy(&my_ifr, &ifr, sizeof(my_ifr));
- my_ifr.ifr_jid = jail_getid(jname);
- if (my_ifr.ifr_jid < 0)
+ ifr.ifr_jid = jail_getid(jname);
+ if (ifr.ifr_jid < 0)
errx(1, "%s", jail_errmsg);
- if (ioctl(ctx->io_s, SIOCSIFVNET, &my_ifr) < 0)
+ if (ioctl_ctx_ifr(ctx, SIOCSIFVNET, &ifr) < 0)
err(1, "SIOCSIFVNET");
}
static void
setifrvnet(if_ctx *ctx, const char *jname, int dummy __unused)
{
- struct ifreq my_ifr;
+ struct ifreq ifr = {};
- memcpy(&my_ifr, &ifr, sizeof(my_ifr));
- my_ifr.ifr_jid = jail_getid(jname);
- if (my_ifr.ifr_jid < 0)
+ ifr.ifr_jid = jail_getid(jname);
+ if (ifr.ifr_jid < 0)
errx(1, "%s", jail_errmsg);
- if (ioctl(ctx->io_s, SIOCSIFRVNET, &my_ifr) < 0)
- err(1, "SIOCSIFRVNET(%d, %s)", my_ifr.ifr_jid, my_ifr.ifr_name);
+ if (ioctl_ctx_ifr(ctx, SIOCSIFRVNET, &ifr) < 0)
+ err(1, "SIOCSIFRVNET(%d, %s)", ifr.ifr_jid, ifr.ifr_name);
}
#endif
@@ -1413,9 +1426,10 @@ setifflags(if_ctx *ctx, const char *vname, int value)
void
setifcap(if_ctx *ctx, const char *vname, int value)
{
+ struct ifreq ifr = {};
int flags;
- if (ioctl(ctx->io_s, SIOCGIFCAP, (caddr_t)&ifr) < 0) {
+ if (ioctl_ctx_ifr(ctx, SIOCGIFCAP, &ifr) < 0) {
Perror("ioctl (SIOCGIFCAP)");
exit(1);
}
@@ -1430,7 +1444,7 @@ setifcap(if_ctx *ctx, const char *vname, int value)
if (ifr.ifr_curcap == flags)
return;
ifr.ifr_reqcap = flags;
- if (ioctl(ctx->io_s, SIOCSIFCAP, (caddr_t)&ifr) < 0)
+ if (ioctl_ctx(ctx, SIOCSIFCAP, &ifr) < 0)
Perror(vname);
}
@@ -1442,8 +1456,9 @@ setifcapnv(if_ctx *ctx, const char *vname, const char *arg)
char *marg, *mopt;
size_t nvbuflen;
bool neg;
+ struct ifreq ifr = {};
- if (ioctl(ctx->io_s, SIOCGIFCAP, (caddr_t)&ifr) < 0)
+ if (ioctl_ctx_ifr(ctx, SIOCGIFCAP, &ifr) < 0)
Perror("ioctl (SIOCGIFCAP)");
if ((ifr.ifr_curcap & IFCAP_NV) == 0) {
warnx("IFCAP_NV not supported");
@@ -1474,7 +1489,7 @@ setifcapnv(if_ctx *ctx, const char *vname, const char *arg)
}
ifr.ifr_cap_nv.buf_length = ifr.ifr_cap_nv.length = nvbuflen;
ifr.ifr_cap_nv.buffer = buf;
- if (ioctl(ctx->io_s, SIOCSIFCAPNV, (caddr_t)&ifr) < 0)
+ if (ioctl_ctx(ctx, SIOCSIFCAPNV, (caddr_t)&ifr) < 0)
Perror(vname);
free(buf);
nvlist_destroy(nvcap);
@@ -1484,24 +1499,27 @@ setifcapnv(if_ctx *ctx, const char *vname, const char *arg)
static void
setifmetric(if_ctx *ctx, const char *val, int dummy __unused)
{
- strlcpy(ifr.ifr_name, ctx->ifname, sizeof (ifr.ifr_name));
+ struct ifreq ifr = {};
+
ifr.ifr_metric = atoi(val);
- if (ioctl(ctx->io_s, SIOCSIFMETRIC, (caddr_t)&ifr) < 0)
+ if (ioctl_ctx_ifr(ctx, SIOCSIFMETRIC, &ifr) < 0)
err(1, "ioctl SIOCSIFMETRIC (set metric)");
}
static void
setifmtu(if_ctx *ctx, const char *val, int dummy __unused)
{
- strlcpy(ifr.ifr_name, ctx->ifname, sizeof (ifr.ifr_name));
+ struct ifreq ifr = {};
+
ifr.ifr_mtu = atoi(val);
- if (ioctl(ctx->io_s, SIOCSIFMTU, (caddr_t)&ifr) < 0)
+ if (ioctl_ctx_ifr(ctx, SIOCSIFMTU, &ifr) < 0)
err(1, "ioctl SIOCSIFMTU (set mtu)");
}
static void
setifpcp(if_ctx *ctx, const char *val, int arg __unused)
{
+ struct ifreq ifr = {};
u_long ul;
char *endp;
@@ -1511,31 +1529,32 @@ setifpcp(if_ctx *ctx, const char *val, int arg __unused)
if (ul > 7)
errx(1, "value for pcp out of range");
ifr.ifr_lan_pcp = ul;
- if (ioctl(ctx->io_s, SIOCSLANPCP, (caddr_t)&ifr) == -1)
+ if (ioctl_ctx_ifr(ctx, SIOCSLANPCP, &ifr) == -1)
err(1, "SIOCSLANPCP");
}
static void
disableifpcp(if_ctx *ctx, const char *val __unused, int arg __unused)
{
+ struct ifreq ifr = {};
ifr.ifr_lan_pcp = IFNET_PCP_NONE;
- if (ioctl_ctx(ctx, SIOCSLANPCP, (caddr_t)&ifr) == -1)
+ if (ioctl_ctx_ifr(ctx, SIOCSLANPCP, &ifr) == -1)
err(1, "SIOCSLANPCP");
}
static void
setifname(if_ctx *ctx, const char *val, int dummy __unused)
{
+ struct ifreq ifr = {};
char *newname;
-
- strlcpy(ifr.ifr_name, ctx->ifname, sizeof(ifr.ifr_name));
+ ifr_set_name(&ifr, ctx->ifname);
newname = strdup(val);
if (newname == NULL)
err(1, "no memory to set ifname");
ifr.ifr_data = newname;
- if (ioctl(ctx->io_s, SIOCSIFNAME, (caddr_t)&ifr) < 0) {
+ if (ioctl_ctx(ctx, SIOCSIFNAME, (caddr_t)&ifr) < 0) {
free(newname);
err(1, "ioctl SIOCSIFNAME (set name)");
}
@@ -1546,10 +1565,9 @@ setifname(if_ctx *ctx, const char *val, int dummy __unused)
static void
setifdescr(if_ctx *ctx, const char *val, int dummy __unused)
{
+ struct ifreq ifr = {};
char *newdescr;
- strlcpy(ifr.ifr_name, ctx->ifname, sizeof(ifr.ifr_name));
-
ifr.ifr_buffer.length = strlen(val) + 1;
if (ifr.ifr_buffer.length == 1) {
ifr.ifr_buffer.buffer = newdescr = NULL;
@@ -1563,7 +1581,7 @@ setifdescr(if_ctx *ctx, const char *val, int dummy __unused)
}
}
- if (ioctl(ctx->io_s, SIOCSIFDESCR, (caddr_t)&ifr) < 0)
+ if (ioctl_ctx_ifr(ctx, SIOCSIFDESCR, &ifr) < 0)
err(1, "ioctl SIOCSIFDESCR (set descr)");
free(newdescr);
@@ -1588,8 +1606,9 @@ unsetifdescr(if_ctx *ctx, const char *val __unused, int value __unused)
"\36VXLAN_HWCSUM\37VXLAN_HWTSO\40TXTLS_RTLMT"
static void
-print_ifcap_nv(struct ifconfig_args *args, int s)
+print_ifcap_nv(if_ctx *ctx)
{
+ struct ifreq ifr = {};
nvlist_t *nvcap;
const char *nvname;
void *buf, *cookie;
@@ -1601,7 +1620,7 @@ print_ifcap_nv(struct ifconfig_args *args, int s)
Perror("malloc");
ifr.ifr_cap_nv.buffer = buf;
ifr.ifr_cap_nv.buf_length = IFR_CAP_NV_MAXBUFSIZE;
- if (ioctl(s, SIOCGIFCAPNV, (caddr_t)&ifr) != 0)
+ if (ioctl_ctx_ifr(ctx, SIOCGIFCAPNV, &ifr) != 0)
Perror("ioctl (SIOCGIFCAPNV)");
nvcap = nvlist_unpack(ifr.ifr_cap_nv.buffer,
ifr.ifr_cap_nv.length, 0);
@@ -1623,7 +1642,7 @@ print_ifcap_nv(struct ifconfig_args *args, int s)
}
}
}
- if (args->supmedia) {
+ if (ctx->args->supmedia) {
printf("\tcapabilities");
cookie = NULL;
for (first = true;; first = false) {
@@ -1641,24 +1660,25 @@ print_ifcap_nv(struct ifconfig_args *args, int s)
nvlist_destroy(nvcap);
free(buf);
- if (ioctl(s, SIOCGIFCAP, (caddr_t)&ifr) != 0)
+ if (ioctl_ctx(ctx, SIOCGIFCAP, (caddr_t)&ifr) != 0)
Perror("ioctl (SIOCGIFCAP)");
}
void
-print_ifcap(struct ifconfig_args *args, int s)
+print_ifcap(if_ctx *ctx)
{
- if (ioctl(s, SIOCGIFCAP, (caddr_t)&ifr) != 0)
+ struct ifreq ifr = {};
+
+ if (ioctl_ctx_ifr(ctx, SIOCGIFCAP, &ifr) != 0)
return;
if ((ifr.ifr_curcap & IFCAP_NV) != 0)
- print_ifcap_nv(args, s);
+ print_ifcap_nv(ctx);
else {
printb("\toptions", ifr.ifr_curcap, IFCAPBITS);
putchar('\n');
- if (args->supmedia && ifr.ifr_reqcap != 0) {
- printb("\tcapabilities", ifr.ifr_reqcap,
- IFCAPBITS);
+ if (ctx->args->supmedia && ifr.ifr_reqcap != 0) {
+ printb("\tcapabilities", ifr.ifr_reqcap, IFCAPBITS);
putchar('\n');
}
}
@@ -1675,28 +1695,35 @@ print_ifstatus(if_ctx *ctx)
}
void
-print_metric(int s)
+print_metric(if_ctx *ctx)
{
- if (ioctl(s, SIOCGIFMETRIC, &ifr) != -1)
+ struct ifreq ifr = {};
+
+ if (ioctl_ctx_ifr(ctx, SIOCGIFMETRIC, &ifr) != -1)
printf(" metric %d", ifr.ifr_metric);
}
#ifdef WITHOUT_NETLINK
static void
-print_mtu(int s)
+print_mtu(if_ctx *ctx)
{
- if (ioctl(s, SIOCGIFMTU, &ifr) != -1)
+ struct ifreq ifr = {};
+
+ if (ioctl_ctx_ifr(ctx, SIOCGIFMTU, &ifr) != -1)
printf(" mtu %d", ifr.ifr_mtu);
}
static void
-print_description(int s)
+print_description(if_ctx *ctx)
{
+ struct ifreq ifr = {};
+
+ ifr_set_name(&ifr, ctx->ifname);
for (;;) {
if ((descr = reallocf(descr, descrlen)) != NULL) {
ifr.ifr_buffer.buffer = descr;
ifr.ifr_buffer.length = descrlen;
- if (ioctl(s, SIOCGIFDESCR, &ifr) == 0) {
+ if (ioctl_ctx(ctx, SIOCGIFDESCR, &ifr) == 0) {
if (ifr.ifr_buffer.buffer == descr) {
if (strlen(descr) > 0)
printf("\tdescription: %s\n",
@@ -1725,14 +1752,13 @@ status(if_ctx *ctx, const struct sockaddr_dl *sdl,
int s, old_s;
struct ifconfig_args *args = ctx->args;
bool allfamilies = args->afp == NULL;
- char *ifname = ifa->ifa_name;
+ struct ifreq ifr = {};
if (args->afp == NULL)
ifr.ifr_addr.sa_family = AF_LOCAL;
else
ifr.ifr_addr.sa_family =
args->afp->af_af == AF_LINK ? AF_LOCAL : args->afp->af_af;
- strlcpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
s = socket(ifr.ifr_addr.sa_family, SOCK_DGRAM, 0);
if (s < 0)
@@ -1740,15 +1766,15 @@ status(if_ctx *ctx, const struct sockaddr_dl *sdl,
old_s = ctx->io_s;
ctx->io_s = s;
- printf("%s: ", ifname);
+ printf("%s: ", ctx->ifname);
printb("flags", ifa->ifa_flags, IFFBITS);
- print_metric(s);
- print_mtu(s);
+ print_metric(ctx);
+ print_mtu(ctx);
putchar('\n');
- print_description(s);
+ print_description(ctx);
- print_ifcap(args, s);
+ print_ifcap(ctx);
tunnel_status(ctx);
diff --git a/sbin/ifconfig/ifconfig.h b/sbin/ifconfig/ifconfig.h
index 7001725543d8..334027c36d89 100644
--- a/sbin/ifconfig/ifconfig.h
+++ b/sbin/ifconfig/ifconfig.h
@@ -153,6 +153,7 @@ void callback_register(callback_func *, void *);
}
#define ioctl_ctx(ctx, _req, ...) ioctl((ctx)->io_s, _req, ## __VA_ARGS__)
+int ioctl_ctx_ifr(if_ctx *ctx, unsigned long cmd, struct ifreq *ifr);
struct ifaddrs;
struct addrinfo;
@@ -275,12 +276,12 @@ bool match_ether(const struct sockaddr_dl *sdl);
bool match_if_flags(struct ifconfig_args *args, int if_flags);
int ifconfig_ioctl(if_ctx *ctx, int iscreate, const struct afswtch *uafp);
bool group_member(const char *ifname, const char *match, const char *nomatch);
-void print_ifcap(struct ifconfig_args *args, int s);
+void print_ifcap(if_ctx *ctx);
void tunnel_status(if_ctx *ctx);
struct afswtch *af_getbyfamily(int af);
void af_other_status(if_ctx *ctx);
void print_ifstatus(if_ctx *ctx);
-void print_metric(int s);
+void print_metric(if_ctx *ctx);
/* Netlink-related functions */
void list_interfaces_nl(struct ifconfig_args *args);
diff --git a/sbin/ifconfig/ifconfig_netlink.c b/sbin/ifconfig/ifconfig_netlink.c
index a7d3cfe6f300..2460d8c60109 100644
--- a/sbin/ifconfig/ifconfig_netlink.c
+++ b/sbin/ifconfig/ifconfig_netlink.c
@@ -354,15 +354,14 @@ status_nl(if_ctx *ctx, struct iface *iface)
printf("flags=%x", link->ifi_flags);
print_bits("IFF", &link->ifi_flags, 1, IFFBITS, nitems(IFFBITS));
- print_metric(ctx->io_s);
+ print_metric(ctx);
printf(" mtu %d\n", link->ifla_mtu);
if (link->ifla_ifalias != NULL)
printf("\tdescription: %s\n", link->ifla_ifalias);
/* TODO: convert to netlink */
- strlcpy(ifr.ifr_name, link->ifla_ifname, sizeof(ifr.ifr_name));
- print_ifcap(args, ctx->io_s);
+ print_ifcap(ctx);
tunnel_status(ctx);
if (args->allfamilies | (args->afp != NULL && args->afp->af_af == AF_LINK)) {
diff --git a/sbin/ifconfig/iffib.c b/sbin/ifconfig/iffib.c
index 684c57c88f64..0f44168fe7dc 100644
--- a/sbin/ifconfig/iffib.c
+++ b/sbin/ifconfig/iffib.c
@@ -66,6 +66,7 @@ fib_status(if_ctx *ctx)
static void
setiffib(if_ctx *ctx, const char *val, int dummy __unused)
{
+ struct ifreq ifr = {};
unsigned long fib;
char *ep;
@@ -75,15 +76,15 @@ setiffib(if_ctx *ctx, const char *val, int dummy __unused)
return;
}
- strlcpy(ifr.ifr_name, ctx->ifname, sizeof (ifr.ifr_name));
ifr.ifr_fib = fib;
- if (ioctl(ctx->io_s, SIOCSIFFIB, (caddr_t)&ifr) < 0)
+ if (ioctl_ctx_ifr(ctx, SIOCSIFFIB, &ifr) < 0)
warn("ioctl (SIOCSIFFIB)");
}
static void
settunfib(if_ctx *ctx, const char *val, int dummy __unused)
{
+ struct ifreq ifr = {};
unsigned long fib;
char *ep;
@@ -93,9 +94,8 @@ settunfib(if_ctx *ctx, const char *val, int dummy __unused)
return;
}
- strlcpy(ifr.ifr_name, ctx->ifname, sizeof (ifr.ifr_name));
ifr.ifr_fib = fib;
- if (ioctl(ctx->io_s, SIOCSTUNFIB, (caddr_t)&ifr) < 0)
+ if (ioctl_ctx_ifr(ctx, SIOCSTUNFIB, &ifr) < 0)
warn("ioctl (SIOCSTUNFIB)");
}
diff --git a/sbin/ifconfig/ifgif.c b/sbin/ifconfig/ifgif.c
index 759360bf2f00..3a41ef63d1d3 100644
--- a/sbin/ifconfig/ifgif.c
+++ b/sbin/ifconfig/ifgif.c
@@ -59,9 +59,9 @@ static void
gif_status(if_ctx *ctx)
{
int opts;
+ struct ifreq ifr = { .ifr_data = (caddr_t)&opts };
- ifr.ifr_data = (caddr_t)&opts;
- if (ioctl_ctx(ctx, GIFGOPTS, &ifr) == -1)
+ if (ioctl_ctx_ifr(ctx, GIFGOPTS, &ifr) == -1)
return;
if (opts == 0)
return;
@@ -73,9 +73,9 @@ static void
setgifopts(if_ctx *ctx, const char *val __unused, int d)
{
int opts;
+ struct ifreq ifr = { .ifr_data = (caddr_t)&opts };
- ifr.ifr_data = (caddr_t)&opts;
- if (ioctl_ctx(ctx, GIFGOPTS, &ifr) == -1) {
+ if (ioctl_ctx_ifr(ctx, GIFGOPTS, &ifr) == -1) {
warn("ioctl(GIFGOPTS)");
return;
}
diff --git a/sbin/ifconfig/ifgre.c b/sbin/ifconfig/ifgre.c
index 67732981228e..018167a32046 100644
--- a/sbin/ifconfig/ifgre.c
+++ b/sbin/ifconfig/ifgre.c
@@ -49,10 +49,9 @@ __FBSDID("$FreeBSD$");
static void
gre_status(if_ctx *ctx)
{
- uint32_t opts, port;
+ uint32_t opts = 0, port;
+ struct ifreq ifr = { .ifr_data = (caddr_t)&opts };
- opts = 0;
- ifr.ifr_data = (caddr_t)&opts;
if (ioctl_ctx(ctx, GREGKEY, &ifr) == 0)
if (opts != 0)
printf("\tgrekey: 0x%x (%u)\n", opts, opts);
@@ -62,7 +61,7 @@ gre_status(if_ctx *ctx)
port = 0;
ifr.ifr_data = (caddr_t)&port;
- if (ioctl_ctx(ctx, GREGPORT, &ifr) == 0 && port != 0)
+ if (ioctl_ctx_ifr(ctx, GREGPORT, &ifr) == 0 && port != 0)
printf("\tudpport: %u\n", port);
printb("\toptions", opts, GREBITS);
putchar('\n');
@@ -72,10 +71,10 @@ static void
setifgrekey(if_ctx *ctx, const char *val, int dummy __unused)
{
uint32_t grekey = strtol(val, NULL, 0);
+ struct ifreq ifr = { .ifr_data = (caddr_t)&grekey };
- strlcpy(ifr.ifr_name, ctx->ifname, sizeof (ifr.ifr_name));
ifr.ifr_data = (caddr_t)&grekey;
- if (ioctl(ctx->io_s, GRESKEY, (caddr_t)&ifr) < 0)
+ if (ioctl_ctx_ifr(ctx, GRESKEY, &ifr) < 0)
warn("ioctl (set grekey)");
}
@@ -83,10 +82,9 @@ static void
setifgreport(if_ctx *ctx, const char *val, int dummy __unused)
{
uint32_t udpport = strtol(val, NULL, 0);
+ struct ifreq ifr = { .ifr_data = (caddr_t)&udpport };
- strlcpy(ifr.ifr_name, ctx->ifname, sizeof (ifr.ifr_name));
- ifr.ifr_data = (caddr_t)&udpport;
- if (ioctl(ctx->io_s, GRESPORT, (caddr_t)&ifr) < 0)
+ if (ioctl_ctx_ifr(ctx, GRESPORT, &ifr) < 0)
warn("ioctl (set udpport)");
}
@@ -94,9 +92,9 @@ static void
setifgreopts(if_ctx *ctx, const char *val __unused, int d)
{
uint32_t opts;
+ struct ifreq ifr = { .ifr_data = (caddr_t)&opts };
- ifr.ifr_data = (caddr_t)&opts;
- if (ioctl(ctx->io_s, GREGOPTS, &ifr) == -1) {
+ if (ioctl_ctx_ifr(ctx, GREGOPTS, &ifr) == -1) {
warn("ioctl(GREGOPTS)");
return;
}
@@ -106,7 +104,7 @@ setifgreopts(if_ctx *ctx, const char *val __unused, int d)
else
opts |= d;
- if (ioctl(ctx->io_s, GRESOPTS, &ifr) == -1) {
+ if (ioctl_ctx(ctx, GRESOPTS, &ifr) == -1) {
warn("ioctl(GIFSOPTS)");
return;
}
diff --git a/sbin/ifconfig/ifipsec.c b/sbin/ifconfig/ifipsec.c
index 929cc56bdcdf..2d9790208858 100644
--- a/sbin/ifconfig/ifipsec.c
+++ b/sbin/ifconfig/ifipsec.c
@@ -54,9 +54,9 @@ static void
ipsec_status(if_ctx *ctx)
{
uint32_t reqid;
+ struct ifreq ifr = { .ifr_data = (caddr_t)&reqid };
- ifr.ifr_data = (caddr_t)&reqid;
- if (ioctl_ctx(ctx, IPSECGREQID, &ifr) == -1)
+ if (ioctl_ctx_ifr(ctx, IPSECGREQID, &ifr) == -1)
return;
printf("\treqid: %u\n", reqid);
}
@@ -66,15 +66,14 @@ setreqid(if_ctx *ctx, const char *val, int dummy __unused)
{
char *ep;
uint32_t v;
+ struct ifreq ifr = { .ifr_data = (caddr_t)&v };
v = strtoul(val, &ep, 0);
if (*ep != '\0') {
warn("Invalid reqid value %s", val);
return;
}
- strlcpy(ifr.ifr_name, ctx->ifname, sizeof(ifr.ifr_name));
- ifr.ifr_data = (char *)&v;
- if (ioctl_ctx(ctx, IPSECSREQID, &ifr) == -1) {
+ if (ioctl_ctx_ifr(ctx, IPSECSREQID, &ifr) == -1) {
warn("ioctl(IPSECSREQID)");
return;
}
diff --git a/sbin/ifconfig/ifpfsync.c b/sbin/ifconfig/ifpfsync.c
index 81bf463db117..b97b9925c644 100644
--- a/sbin/ifconfig/ifpfsync.c
+++ b/sbin/ifconfig/ifpfsync.c
@@ -51,10 +51,11 @@
#include "ifconfig.h"
static int
-pfsync_do_ioctl(int s, uint cmd, nvlist_t **nvl)
+pfsync_do_ioctl(if_ctx *ctx, uint cmd, nvlist_t **nvl)
{
void *data;
size_t nvlen;
+ struct ifreq ifr = {};
data = nvlist_pack(*nvl, &nvlen);
@@ -64,7 +65,7 @@ pfsync_do_ioctl(int s, uint cmd, nvlist_t **nvl)
ifr.ifr_cap_nv.length = nvlen;
free(data);
- if (ioctl(s, cmd, (caddr_t)&ifr) == -1) {
+ if (ioctl_ctx_ifr(ctx, cmd, &ifr) == -1) {
free(ifr.ifr_cap_nv.buffer);
return -1;
}
@@ -172,7 +173,7 @@ setpfsync_syncdev(if_ctx *ctx, const char *val, int dummy __unused)
if (strlen(val) > IFNAMSIZ)
errx(1, "interface name %s is too long", val);
- if (pfsync_do_ioctl(ctx->io_s, SIOCGETPFSYNCNV, &nvl) == -1)
+ if (pfsync_do_ioctl(ctx, SIOCGETPFSYNCNV, &nvl) == -1)
err(1, "SIOCGETPFSYNCNV");
if (nvlist_exists_string(nvl, "syncdev"))
@@ -180,7 +181,7 @@ setpfsync_syncdev(if_ctx *ctx, const char *val, int dummy __unused)
nvlist_add_string(nvl, "syncdev", val);
- if (pfsync_do_ioctl(ctx->io_s, SIOCSETPFSYNCNV, &nvl) == -1)
+ if (pfsync_do_ioctl(ctx, SIOCSETPFSYNCNV, &nvl) == -1)
err(1, "SIOCSETPFSYNCNV");
}
@@ -189,7 +190,7 @@ unsetpfsync_syncdev(if_ctx *ctx, const char *val __unused, int dummy __unused)
{
nvlist_t *nvl = nvlist_create(0);
- if (pfsync_do_ioctl(ctx->io_s, SIOCGETPFSYNCNV, &nvl) == -1)
+ if (pfsync_do_ioctl(ctx, SIOCGETPFSYNCNV, &nvl) == -1)
err(1, "SIOCGETPFSYNCNV");
if (nvlist_exists_string(nvl, "syncdev"))
@@ -197,7 +198,7 @@ unsetpfsync_syncdev(if_ctx *ctx, const char *val __unused, int dummy __unused)
nvlist_add_string(nvl, "syncdev", "");
- if (pfsync_do_ioctl(ctx->io_s, SIOCSETPFSYNCNV, &nvl) == -1)
+ if (pfsync_do_ioctl(ctx, SIOCSETPFSYNCNV, &nvl) == -1)
err(1, "SIOCSETPFSYNCNV");
}
@@ -210,7 +211,7 @@ setpfsync_syncpeer(if_ctx *ctx, const char *val, int dummy __unused)
nvlist_t *nvl = nvlist_create(0);
- if (pfsync_do_ioctl(ctx->io_s, SIOCGETPFSYNCNV, &nvl) == -1)
+ if (pfsync_do_ioctl(ctx, SIOCGETPFSYNCNV, &nvl) == -1)
err(1, "SIOCGETPFSYNCNV");
if ((ecode = getaddrinfo(val, NULL, NULL, &peerres)) != 0)
@@ -239,7 +240,7 @@ setpfsync_syncpeer(if_ctx *ctx, const char *val, int dummy __unused)
nvlist_add_nvlist(nvl, "syncpeer",
pfsync_sockaddr_to_syncpeer_nvlist(&addr));
- if (pfsync_do_ioctl(ctx->io_s, SIOCSETPFSYNCNV, &nvl) == -1)
+ if (pfsync_do_ioctl(ctx, SIOCSETPFSYNCNV, &nvl) == -1)
err(1, "SIOCSETPFSYNCNV");
nvlist_destroy(nvl);
@@ -254,7 +255,7 @@ unsetpfsync_syncpeer(if_ctx *ctx, const char *val __unused, int dummy __unused)
nvlist_t *nvl = nvlist_create(0);
- if (pfsync_do_ioctl(ctx->io_s, SIOCGETPFSYNCNV, &nvl) == -1)
+ if (pfsync_do_ioctl(ctx, SIOCGETPFSYNCNV, &nvl) == -1)
err(1, "SIOCGETPFSYNCNV");
if (nvlist_exists_nvlist(nvl, "syncpeer"))
@@ -263,7 +264,7 @@ unsetpfsync_syncpeer(if_ctx *ctx, const char *val __unused, int dummy __unused)
nvlist_add_nvlist(nvl, "syncpeer",
pfsync_sockaddr_to_syncpeer_nvlist(&addr));
- if (pfsync_do_ioctl(ctx->io_s, SIOCSETPFSYNCNV, &nvl) == -1)
+ if (pfsync_do_ioctl(ctx, SIOCSETPFSYNCNV, &nvl) == -1)
err(1, "SIOCSETPFSYNCNV");
nvlist_destroy(nvl);
@@ -279,13 +280,13 @@ setpfsync_maxupd(if_ctx *ctx, const char *val, int dummy __unused)
if ((maxupdates < 0) || (maxupdates > 255))
errx(1, "maxupd %s: out of range", val);
- if (pfsync_do_ioctl(ctx->io_s, SIOCGETPFSYNCNV, &nvl) == -1)
+ if (pfsync_do_ioctl(ctx, SIOCGETPFSYNCNV, &nvl) == -1)
err(1, "SIOCGETPFSYNCNV");
nvlist_free_number(nvl, "maxupdates");
nvlist_add_number(nvl, "maxupdates", maxupdates);
- if (pfsync_do_ioctl(ctx->io_s, SIOCSETPFSYNCNV, &nvl) == -1)
+ if (pfsync_do_ioctl(ctx, SIOCSETPFSYNCNV, &nvl) == -1)
err(1, "SIOCSETPFSYNCNV");
nvlist_destroy(nvl);
@@ -296,13 +297,13 @@ setpfsync_defer(if_ctx *ctx, const char *val __unused, int d)
{
nvlist_t *nvl = nvlist_create(0);
- if (pfsync_do_ioctl(ctx->io_s, SIOCGETPFSYNCNV, &nvl) == -1)
+ if (pfsync_do_ioctl(ctx, SIOCGETPFSYNCNV, &nvl) == -1)
err(1, "SIOCGETPFSYNCNV");
nvlist_free_number(nvl, "flags");
nvlist_add_number(nvl, "flags", d ? PFSYNCF_DEFER : 0);
- if (pfsync_do_ioctl(ctx->io_s, SIOCSETPFSYNCNV, &nvl) == -1)
+ if (pfsync_do_ioctl(ctx, SIOCSETPFSYNCNV, &nvl) == -1)
err(1, "SIOCSETPFSYNCNV");
nvlist_destroy(nvl);
@@ -317,13 +318,13 @@ setpfsync_version(if_ctx *ctx, const char *val, int dummy __unused)
/* Don't verify, kernel knows which versions are supported.*/
version = atoi(val);
- if (pfsync_do_ioctl(ctx->io_s, SIOCGETPFSYNCNV, &nvl) == -1)
+ if (pfsync_do_ioctl(ctx, SIOCGETPFSYNCNV, &nvl) == -1)
err(1, "SIOCGETPFSYNCNV");
nvlist_free_number(nvl, "version");
nvlist_add_number(nvl, "version", version);
- if (pfsync_do_ioctl(ctx->io_s, SIOCSETPFSYNCNV, &nvl) == -1)
+ if (pfsync_do_ioctl(ctx, SIOCSETPFSYNCNV, &nvl) == -1)
err(1, "SIOCSETPFSYNCNV");
nvlist_destroy(nvl);
@@ -343,7 +344,7 @@ pfsync_status(if_ctx *ctx)
nvl = nvlist_create(0);
- if (pfsync_do_ioctl(ctx->io_s, SIOCGETPFSYNCNV, &nvl) == -1) {
+ if (pfsync_do_ioctl(ctx, SIOCGETPFSYNCNV, &nvl) == -1) {
nvlist_destroy(nvl);
return;
}
diff --git a/sbin/ifconfig/ifstf.c b/sbin/ifconfig/ifstf.c
index 0089cedf7a6b..a99592b4801f 100644
--- a/sbin/ifconfig/ifstf.c
+++ b/sbin/ifconfig/ifstf.c
@@ -54,11 +54,9 @@
static int
do_cmd(if_ctx *ctx, u_long op, void *arg, size_t argsize, int set)
{
- struct ifdrv ifd;
+ struct ifdrv ifd = {};
- memset(&ifd, 0, sizeof(ifd));
-
- strlcpy(ifd.ifd_name, ifr.ifr_name, sizeof(ifd.ifd_name));
+ strlcpy(ifd.ifd_name, ctx->ifname, sizeof(ifd.ifd_name));
ifd.ifd_cmd = op;
ifd.ifd_len = argsize;
ifd.ifd_data = arg;
diff --git a/sbin/ifconfig/ifvlan.c b/sbin/ifconfig/ifvlan.c
index 2d0d15fdd828..b871e953c44a 100644
--- a/sbin/ifconfig/ifvlan.c
+++ b/sbin/ifconfig/ifvlan.c
@@ -75,21 +75,13 @@ static struct vlanreq params = {
.vlr_proto = ETHERTYPE_VLAN,
};
-static int
-getvlan(int s, struct ifreq *ifr, struct vlanreq *vreq)
-{
- bzero((char *)vreq, sizeof(*vreq));
- ifr->ifr_data = (caddr_t)vreq;
-
- return ioctl(s, SIOCGETVLAN, (caddr_t)ifr);
-}
-
static void
vlan_status(if_ctx *ctx)
{
- struct vlanreq vreq;
+ struct vlanreq vreq = {};
+ struct ifreq ifr = { .ifr_data = (caddr_t)&vreq };
- if (getvlan(ctx->io_s, &ifr, &vreq) == -1)
+ if (ioctl_ctx_ifr(ctx, SIOCGETVLAN, &ifr) == -1)
return;
printf("\tvlan: %d", vreq.vlr_tag);
printf(" vlanproto: ");
@@ -103,7 +95,7 @@ vlan_status(if_ctx *ctx)
default:
printf("0x%04x", vreq.vlr_proto);
}
- if (ioctl_ctx(ctx, SIOCGVLANPCP, (caddr_t)&ifr) != -1)
+ if (ioctl_ctx_ifr(ctx, SIOCGVLANPCP, &ifr) != -1)
printf(" vlanpcp: %u", ifr.ifr_vlan_pcp);
printf(" parent interface: %s", vreq.vlr_parent[0] == '\0' ?
"<none>" : vreq.vlr_parent);
@@ -195,7 +187,8 @@ vlan_set(int s, struct ifreq *ifr)
static void
setvlantag(if_ctx *ctx, const char *val, int dummy __unused)
{
- struct vlanreq vreq;
+ struct vlanreq vreq = {};
+ struct ifreq ifr = { .ifr_data = (caddr_t)&vreq };
u_long ul;
char *endp;
@@ -207,7 +200,7 @@ setvlantag(if_ctx *ctx, const char *val, int dummy __unused)
if (params.vlr_tag != ul)
errx(1, "value for vlan out of range");
- if (getvlan(ctx->io_s, &ifr, &vreq) != -1) {
+ if (ioctl_ctx_ifr(ctx, SIOCGETVLAN, &ifr) != -1) {
vreq.vlr_tag = params.vlr_tag;
memcpy(&params, &vreq, sizeof(params));
vlan_set(ctx->io_s, &ifr);
@@ -217,18 +210,20 @@ setvlantag(if_ctx *ctx, const char *val, int dummy __unused)
static void
setvlandev(if_ctx *ctx, const char *val, int dummy __unused)
{
- struct vlanreq vreq;
+ struct vlanreq vreq = {};
+ struct ifreq ifr = { .ifr_data = (caddr_t)&vreq };
strlcpy(params.vlr_parent, val, sizeof(params.vlr_parent));
- if (getvlan(ctx->io_s, &ifr, &vreq) != -1)
+ if (ioctl_ctx_ifr(ctx, SIOCGETVLAN, &ifr) != -1)
vlan_set(ctx->io_s, &ifr);
}
static void
setvlanproto(if_ctx *ctx, const char *val, int dummy __unused)
{
- struct vlanreq vreq;
+ struct vlanreq vreq = {};
+ struct ifreq ifr = { .ifr_data = (caddr_t)&vreq };
if (strncasecmp(proto_8021Q, val,
strlen(proto_8021Q)) == 0) {
@@ -239,7 +234,7 @@ setvlanproto(if_ctx *ctx, const char *val, int dummy __unused)
} else
errx(1, "invalid value for vlanproto");
- if (getvlan(ctx->io_s, &ifr, &vreq) != -1) {
+ if (ioctl_ctx_ifr(ctx, SIOCGETVLAN, &ifr) != -1) {
vreq.vlr_proto = params.vlr_proto;
memcpy(&params, &vreq, sizeof(params));
vlan_set(ctx->io_s, &ifr);
@@ -251,6 +246,7 @@ setvlanpcp(if_ctx *ctx, const char *val, int dummy __unused)
{
u_long ul;
char *endp;
+ struct ifreq ifr = {};
ul = strtoul(val, &endp, 0);
if (*endp != '\0')
@@ -258,25 +254,23 @@ setvlanpcp(if_ctx *ctx, const char *val, int dummy __unused)
if (ul > 7)
errx(1, "value for vlanpcp out of range");
ifr.ifr_vlan_pcp = ul;
- if (ioctl(ctx->io_s, SIOCSVLANPCP, (caddr_t)&ifr) == -1)
+ if (ioctl_ctx_ifr(ctx, SIOCSVLANPCP, &ifr) == -1)
err(1, "SIOCSVLANPCP");
}
static void
unsetvlandev(if_ctx *ctx, const char *val __unused, int dummy __unused)
{
- struct vlanreq vreq;
-
- bzero((char *)&vreq, sizeof(struct vlanreq));
- ifr.ifr_data = (caddr_t)&vreq;
+ struct vlanreq vreq = {};
+ struct ifreq ifr = { .ifr_data = (caddr_t)&vreq };
- if (ioctl(ctx->io_s, SIOCGETVLAN, (caddr_t)&ifr) == -1)
+ if (ioctl_ctx_ifr(ctx, SIOCGETVLAN, &ifr) == -1)
err(1, "SIOCGETVLAN");
bzero((char *)&vreq.vlr_parent, sizeof(vreq.vlr_parent));
vreq.vlr_tag = 0;
- if (ioctl(ctx->io_s, SIOCSETVLAN, (caddr_t)&ifr) == -1)
+ if (ioctl_ctx(ctx, SIOCSETVLAN, (caddr_t)&ifr) == -1)
err(1, "SIOCSETVLAN");
}
diff --git a/sbin/ifconfig/ifvxlan.c b/sbin/ifconfig/ifvxlan.c
index 55e2b79d3285..4f54bee88b41 100644
--- a/sbin/ifconfig/ifvxlan.c
+++ b/sbin/ifconfig/ifvxlan.c
@@ -75,16 +75,14 @@ get_val(const char *cp, u_long *valp)
static int
do_cmd(if_ctx *ctx, u_long op, void *arg, size_t argsize, int set)
{
- struct ifdrv ifd;
+ struct ifdrv ifd = {};
- bzero(&ifd, sizeof(ifd));
-
- strlcpy(ifd.ifd_name, ifr.ifr_name, sizeof(ifd.ifd_name));
+ strlcpy(ifd.ifd_name, ctx->ifname, sizeof(ifd.ifd_name));
ifd.ifd_cmd = op;
ifd.ifd_len = argsize;
ifd.ifd_data = arg;
- return (ioctl(ctx->io_s, set ? SIOCSDRVSPEC : SIOCGDRVSPEC, &ifd));
+ return (ioctl_ctx(ctx, set ? SIOCSDRVSPEC : SIOCGDRVSPEC, &ifd));
}
static int