git: 85e0016a9730 - main - ifconfig: remove global 'name' variable.
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 13 Jun 2023 06:27:02 UTC
The branch main has been updated by melifaro: URL: https://cgit.FreeBSD.org/src/commit/?id=85e0016a9730b6540d729bfe41ddc33eaedfee69 commit 85e0016a9730b6540d729bfe41ddc33eaedfee69 Author: Alexander V. Chernikov <melifaro@FreeBSD.org> AuthorDate: 2023-06-13 06:22:29 +0000 Commit: Alexander V. Chernikov <melifaro@FreeBSD.org> CommitDate: 2023-06-13 06:22:41 +0000 ifconfig: remove global 'name' variable. Consistenly use newly-added 'ctx->ifname' as the name of the current target interface. Reviewed By: kp Differential Revision: https://reviews.freebsd.org/D40438 MFC after: 2 weeks --- sbin/ifconfig/af_inet.c | 8 +- sbin/ifconfig/af_inet6.c | 8 +- sbin/ifconfig/carp.c | 8 +- sbin/ifconfig/ifbridge.c | 100 +++--- sbin/ifconfig/ifclone.c | 4 +- sbin/ifconfig/ifconfig.c | 76 ++--- sbin/ifconfig/ifconfig.h | 9 +- sbin/ifconfig/ifconfig_netlink.c | 24 +- sbin/ifconfig/iffib.c | 8 +- sbin/ifconfig/ifgre.c | 4 +- sbin/ifconfig/ifgroup.c | 14 +- sbin/ifconfig/ifieee80211.c | 644 ++++++++++++++++++--------------------- sbin/ifconfig/ifipsec.c | 2 +- sbin/ifconfig/iflagg.c | 33 +- sbin/ifconfig/ifmac.c | 4 +- sbin/ifconfig/ifmedia.c | 32 +- sbin/ifconfig/sfp.c | 8 +- 17 files changed, 467 insertions(+), 519 deletions(-) diff --git a/sbin/ifconfig/af_inet.c b/sbin/ifconfig/af_inet.c index 0538f9415272..842fdad2a20f 100644 --- a/sbin/ifconfig/af_inet.c +++ b/sbin/ifconfig/af_inet.c @@ -347,7 +347,7 @@ in_delete_first_nl(if_ctx *ctx) struct snl_state *ss = ctx->io_ss; bool found = false; - uint32_t ifindex = if_nametoindex_nl(ss, name); + uint32_t ifindex = if_nametoindex_nl(ss, ctx->ifname); if (ifindex == 0) { /* No interface with the desired name, nothing to delete */ return (EADDRNOTAVAIL); @@ -417,7 +417,7 @@ in_exec_nl(if_ctx *ctx, unsigned long action, void *data) ifahdr->ifa_family = AF_INET; ifahdr->ifa_prefixlen = pdata->addr.plen; - ifahdr->ifa_index = if_nametoindex_nl(ctx->io_ss, name); + ifahdr->ifa_index = if_nametoindex_nl(ctx->io_ss, ctx->ifname); snl_add_msg_attr_ip4(&nw, IFA_LOCAL, &pdata->addr.addr); if (action == NL_RTM_NEWADDR && pdata->dst_addr.addrset) @@ -498,7 +498,7 @@ in_status_tunnel(if_ctx *ctx) const struct sockaddr *sa = (const struct sockaddr *) &ifr.ifr_addr; memset(&ifr, 0, sizeof(ifr)); - strlcpy(ifr.ifr_name, name, IFNAMSIZ); + strlcpy(ifr.ifr_name, ctx->ifname, IFNAMSIZ); if (ioctl_ctx(ctx, SIOCGIFPSRCADDR, (caddr_t)&ifr) < 0) return; @@ -523,7 +523,7 @@ in_set_tunnel(if_ctx *ctx, struct addrinfo *srcres, struct addrinfo *dstres) struct in_aliasreq addreq; memset(&addreq, 0, sizeof(addreq)); - strlcpy(addreq.ifra_name, name, IFNAMSIZ); + strlcpy(addreq.ifra_name, ctx->ifname, IFNAMSIZ); memcpy(&addreq.ifra_addr, srcres->ai_addr, srcres->ai_addr->sa_len); memcpy(&addreq.ifra_dstaddr, dstres->ai_addr, dstres->ai_addr->sa_len); diff --git a/sbin/ifconfig/af_inet6.c b/sbin/ifconfig/af_inet6.c index 610fd70c04c1..7a771a885412 100644 --- a/sbin/ifconfig/af_inet6.c +++ b/sbin/ifconfig/af_inet6.c @@ -199,7 +199,7 @@ setip6eui64(if_ctx *ctx, const char *cmd, int dummy __unused) err(EXIT_FAILURE, "getifaddrs"); for (ifa = ifap; ifa; ifa = ifa->ifa_next) { if (ifa->ifa_addr->sa_family == AF_INET6 && - strcmp(ifa->ifa_name, name) == 0) { + strcmp(ifa->ifa_name, ctx->ifname) == 0) { sin6 = (const struct sockaddr_in6 *)satosin6(ifa->ifa_addr); if (IN6_IS_ADDR_LINKLOCAL(&sin6->sin6_addr)) { lladdr = &sin6->sin6_addr; @@ -477,7 +477,7 @@ in6_exec_nl(if_ctx *ctx, unsigned long action, void *data) ifahdr->ifa_family = AF_INET6; ifahdr->ifa_prefixlen = pdata->addr.plen; - ifahdr->ifa_index = if_nametoindex_nl(ctx->io_ss, name); + ifahdr->ifa_index = if_nametoindex_nl(ctx->io_ss, ctx->ifname); snl_add_msg_attr_ip6(&nw, IFA_LOCAL, &pdata->addr.addr); if (action == NL_RTM_NEWADDR && pdata->dst_addr.set) @@ -655,7 +655,7 @@ in6_status_tunnel(if_ctx *ctx) const struct sockaddr *sa = (const struct sockaddr *) &in6_ifr.ifr_addr; memset(&in6_ifr, 0, sizeof(in6_ifr)); - strlcpy(in6_ifr.ifr_name, name, sizeof(in6_ifr.ifr_name)); + strlcpy(in6_ifr.ifr_name, ctx->ifname, sizeof(in6_ifr.ifr_name)); if (ioctl_ctx(ctx, SIOCGIFPSRCADDR_IN6, (caddr_t)&in6_ifr) < 0) return; @@ -682,7 +682,7 @@ in6_set_tunnel(if_ctx *ctx, struct addrinfo *srcres, struct addrinfo *dstres) struct in6_aliasreq in6_addreq; memset(&in6_addreq, 0, sizeof(in6_addreq)); - strlcpy(in6_addreq.ifra_name, name, sizeof(in6_addreq.ifra_name)); + strlcpy(in6_addreq.ifra_name, ctx->ifname, sizeof(in6_addreq.ifra_name)); memcpy(&in6_addreq.ifra_addr, srcres->ai_addr, srcres->ai_addr->sa_len); memcpy(&in6_addreq.ifra_dstaddr, dstres->ai_addr, dstres->ai_addr->sa_len); diff --git a/sbin/ifconfig/carp.c b/sbin/ifconfig/carp.c index 9de8177d210e..30df82481441 100644 --- a/sbin/ifconfig/carp.c +++ b/sbin/ifconfig/carp.c @@ -76,7 +76,7 @@ carp_status(if_ctx *ctx) struct ifconfig_carp carpr[CARP_MAXVHID]; char addr_buf[NI_MAXHOST]; - if (ifconfig_carp_get_info(lifh, name, carpr, CARP_MAXVHID) == -1) + if (ifconfig_carp_get_info(lifh, ctx->ifname, carpr, CARP_MAXVHID) == -1) return; for (size_t i = 0; i < carpr[0].carpr_count; i++) { @@ -114,11 +114,11 @@ setcarp_vhid(if_ctx *ctx, const char *val, int dummy __unused) } static void -setcarp_callback(if_ctx *ctx __unused, void *arg __unused) +setcarp_callback(if_ctx *ctx, void *arg __unused) { struct ifconfig_carp carpr = { }; - if (ifconfig_carp_get_vhid(lifh, name, &carpr, carpr_vhid) == -1) { + if (ifconfig_carp_get_vhid(lifh, ctx->ifname, &carpr, carpr_vhid) == -1) { if (ifconfig_err_errno(lifh) != ENOENT) return; } @@ -139,7 +139,7 @@ setcarp_callback(if_ctx *ctx __unused, void *arg __unused) memcpy(&carpr.carpr_addr6, &carp_addr6, sizeof(carp_addr6)); - if (ifconfig_carp_set_info(lifh, name, &carpr)) + if (ifconfig_carp_set_info(lifh, ctx->ifname, &carpr)) err(1, "SIOCSVH"); } diff --git a/sbin/ifconfig/ifbridge.c b/sbin/ifconfig/ifbridge.c index c8e7111e6722..3a97a5af3931 100644 --- a/sbin/ifconfig/ifbridge.c +++ b/sbin/ifconfig/ifbridge.c @@ -85,28 +85,26 @@ get_val(const char *cp, u_long *valp) } static int -do_cmd(int sock, u_long op, void *arg, size_t argsize, int set) +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, 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(sock, set ? SIOCSDRVSPEC : SIOCGDRVSPEC, &ifd)); + return (ioctl_ctx(ctx, set ? SIOCSDRVSPEC : SIOCGDRVSPEC, &ifd)); } static void -do_bridgeflag(int sock, const char *ifs, int flag, int set) +do_bridgeflag(if_ctx *ctx, const char *ifs, int flag, int set) { struct ifbreq req; strlcpy(req.ifbr_ifsname, ifs, sizeof(req.ifbr_ifsname)); - if (do_cmd(sock, BRDGGIFFLGS, &req, sizeof(req), 0) < 0) + if (do_cmd(ctx, BRDGGIFFLGS, &req, sizeof(req), 0) < 0) err(1, "unable to get bridge flags"); if (set) @@ -114,12 +112,12 @@ do_bridgeflag(int sock, const char *ifs, int flag, int set) else req.ifbr_ifsflags &= ~flag; - if (do_cmd(sock, BRDGSIFFLGS, &req, sizeof(req), 1) < 0) + if (do_cmd(ctx, BRDGSIFFLGS, &req, sizeof(req), 1) < 0) err(1, "unable to set bridge flags"); } static void -bridge_addresses(int s, const char *prefix) +bridge_addresses(if_ctx *ctx, const char *prefix) { struct ifbaconf ifbac; struct ifbareq *ifba; @@ -133,7 +131,7 @@ bridge_addresses(int s, const char *prefix) err(1, "unable to allocate address buffer"); ifbac.ifbac_len = len; ifbac.ifbac_buf = inbuf = ninbuf; - if (do_cmd(s, BRDGRTS, &ifbac, sizeof(ifbac), 0) < 0) + if (do_cmd(ctx, BRDGRTS, &ifbac, sizeof(ifbac), 0) < 0) err(1, "unable to get address cache"); if ((ifbac.ifbac_len + sizeof(*ifba)) < len) break; @@ -154,7 +152,7 @@ bridge_addresses(int s, const char *prefix) } static void -bridge_status(if_ctx *ctx __unused) +bridge_status(if_ctx *ctx) { struct ifconfig_bridge_status *bridge; struct ifbropreq *params; @@ -162,7 +160,7 @@ bridge_status(if_ctx *ctx __unused) uint8_t lladdr[ETHER_ADDR_LEN]; uint16_t bprio; - if (ifconfig_bridge_get_bridge_status(lifh, name, &bridge) == -1) + if (ifconfig_bridge_get_bridge_status(lifh, ctx->ifname, &bridge) == -1) return; params = bridge->params; @@ -231,7 +229,7 @@ setbridge_add(if_ctx *ctx, const char *val, int dummy __unused) memset(&req, 0, sizeof(req)); strlcpy(req.ifbr_ifsname, val, sizeof(req.ifbr_ifsname)); - if (do_cmd(ctx->io_s, BRDGADD, &req, sizeof(req), 1) < 0) + if (do_cmd(ctx, BRDGADD, &req, sizeof(req), 1) < 0) err(1, "BRDGADD %s", val); } @@ -242,7 +240,7 @@ setbridge_delete(if_ctx *ctx, const char *val, int dummy __unused) memset(&req, 0, sizeof(req)); strlcpy(req.ifbr_ifsname, val, sizeof(req.ifbr_ifsname)); - if (do_cmd(ctx->io_s, BRDGDEL, &req, sizeof(req), 1) < 0) + if (do_cmd(ctx, BRDGDEL, &req, sizeof(req), 1) < 0) err(1, "BRDGDEL %s", val); } @@ -250,42 +248,42 @@ static void setbridge_discover(if_ctx *ctx, const char *val, int dummy __unused) { - do_bridgeflag(ctx->io_s, val, IFBIF_DISCOVER, 1); + do_bridgeflag(ctx, val, IFBIF_DISCOVER, 1); } static void unsetbridge_discover(if_ctx *ctx, const char *val, int dummy __unused) { - do_bridgeflag(ctx->io_s, val, IFBIF_DISCOVER, 0); + do_bridgeflag(ctx, val, IFBIF_DISCOVER, 0); } static void setbridge_learn(if_ctx *ctx, const char *val, int dummy __unused) { - do_bridgeflag(ctx->io_s, val, IFBIF_LEARNING, 1); + do_bridgeflag(ctx, val, IFBIF_LEARNING, 1); } static void unsetbridge_learn(if_ctx *ctx, const char *val, int dummy __unused) { - do_bridgeflag(ctx->io_s, val, IFBIF_LEARNING, 0); + do_bridgeflag(ctx, val, IFBIF_LEARNING, 0); } static void setbridge_sticky(if_ctx *ctx, const char *val, int dummy __unused) { - do_bridgeflag(ctx->io_s, val, IFBIF_STICKY, 1); + do_bridgeflag(ctx, val, IFBIF_STICKY, 1); } static void unsetbridge_sticky(if_ctx *ctx, const char *val, int dummy __unused) { - do_bridgeflag(ctx->io_s, val, IFBIF_STICKY, 0); + do_bridgeflag(ctx, val, IFBIF_STICKY, 0); } static void @@ -295,7 +293,7 @@ setbridge_span(if_ctx *ctx, const char *val, int dummy __unused) memset(&req, 0, sizeof(req)); strlcpy(req.ifbr_ifsname, val, sizeof(req.ifbr_ifsname)); - if (do_cmd(ctx->io_s, BRDGADDS, &req, sizeof(req), 1) < 0) + if (do_cmd(ctx, BRDGADDS, &req, sizeof(req), 1) < 0) err(1, "BRDGADDS %s", val); } @@ -306,7 +304,7 @@ unsetbridge_span(if_ctx *ctx, const char *val, int dummy __unused) memset(&req, 0, sizeof(req)); strlcpy(req.ifbr_ifsname, val, sizeof(req.ifbr_ifsname)); - if (do_cmd(ctx->io_s, BRDGDELS, &req, sizeof(req), 1) < 0) + if (do_cmd(ctx, BRDGDELS, &req, sizeof(req), 1) < 0) err(1, "BRDGDELS %s", val); } @@ -314,62 +312,62 @@ static void setbridge_stp(if_ctx *ctx, const char *val, int dummy __unused) { - do_bridgeflag(ctx->io_s, val, IFBIF_STP, 1); + do_bridgeflag(ctx, val, IFBIF_STP, 1); } static void unsetbridge_stp(if_ctx *ctx, const char *val, int dummy __unused) { - do_bridgeflag(ctx->io_s, val, IFBIF_STP, 0); + do_bridgeflag(ctx, val, IFBIF_STP, 0); } static void setbridge_edge(if_ctx *ctx, const char *val, int dummy __unused) { - do_bridgeflag(ctx->io_s, val, IFBIF_BSTP_EDGE, 1); + do_bridgeflag(ctx, val, IFBIF_BSTP_EDGE, 1); } static void unsetbridge_edge(if_ctx *ctx, const char *val, int dummy __unused) { - do_bridgeflag(ctx->io_s, val, IFBIF_BSTP_EDGE, 0); + do_bridgeflag(ctx, val, IFBIF_BSTP_EDGE, 0); } static void setbridge_autoedge(if_ctx *ctx, const char *val, int dummy __unused) { - do_bridgeflag(ctx->io_s, val, IFBIF_BSTP_AUTOEDGE, 1); + do_bridgeflag(ctx, val, IFBIF_BSTP_AUTOEDGE, 1); } static void unsetbridge_autoedge(if_ctx *ctx, const char *val, int dummy __unused) { - do_bridgeflag(ctx->io_s, val, IFBIF_BSTP_AUTOEDGE, 0); + do_bridgeflag(ctx, val, IFBIF_BSTP_AUTOEDGE, 0); } static void setbridge_ptp(if_ctx *ctx, const char *val, int dummy __unused) { - do_bridgeflag(ctx->io_s, val, IFBIF_BSTP_PTP, 1); + do_bridgeflag(ctx, val, IFBIF_BSTP_PTP, 1); } static void unsetbridge_ptp(if_ctx *ctx, const char *val, int dummy __unused) { - do_bridgeflag(ctx->io_s, val, IFBIF_BSTP_PTP, 0); + do_bridgeflag(ctx, val, IFBIF_BSTP_PTP, 0); } static void setbridge_autoptp(if_ctx *ctx, const char *val, int dummy __unused) { - do_bridgeflag(ctx->io_s, val, IFBIF_BSTP_AUTOPTP, 1); + do_bridgeflag(ctx, val, IFBIF_BSTP_AUTOPTP, 1); } static void unsetbridge_autoptp(if_ctx *ctx, const char *val, int dummy __unused) { - do_bridgeflag(ctx->io_s, val, IFBIF_BSTP_AUTOPTP, 0); + do_bridgeflag(ctx, val, IFBIF_BSTP_AUTOPTP, 0); } static void @@ -379,7 +377,7 @@ setbridge_flush(if_ctx *ctx, const char *val __unused, int dummy __unused) memset(&req, 0, sizeof(req)); req.ifbr_ifsflags = IFBF_FLUSHDYN; - if (do_cmd(ctx->io_s, BRDGFLUSH, &req, sizeof(req), 1) < 0) + if (do_cmd(ctx, BRDGFLUSH, &req, sizeof(req), 1) < 0) err(1, "BRDGFLUSH"); } @@ -390,7 +388,7 @@ setbridge_flushall(if_ctx *ctx, const char *val __unused, int dummy __unused) memset(&req, 0, sizeof(req)); req.ifbr_ifsflags = IFBF_FLUSHALL; - if (do_cmd(ctx->io_s, BRDGFLUSH, &req, sizeof(req), 1) < 0) + if (do_cmd(ctx, BRDGFLUSH, &req, sizeof(req), 1) < 0) err(1, "BRDGFLUSH"); } @@ -411,7 +409,7 @@ setbridge_static(if_ctx *ctx, const char *val, const char *mac) req.ifba_flags = IFBAF_STATIC; req.ifba_vlan = 1; /* XXX allow user to specify */ - if (do_cmd(ctx->io_s, BRDGSADDR, &req, sizeof(req), 1) < 0) + if (do_cmd(ctx, BRDGSADDR, &req, sizeof(req), 1) < 0) err(1, "BRDGSADDR %s", val); } @@ -429,7 +427,7 @@ setbridge_deladdr(if_ctx *ctx, const char *val, int dummy __unused) memcpy(req.ifba_dst, ea->octet, sizeof(req.ifba_dst)); - if (do_cmd(ctx->io_s, BRDGDADDR, &req, sizeof(req), 1) < 0) + if (do_cmd(ctx, BRDGDADDR, &req, sizeof(req), 1) < 0) err(1, "BRDGDADDR %s", val); } @@ -437,7 +435,7 @@ static void setbridge_addr(if_ctx *ctx, const char *val __unused, int dummy __unused) { - bridge_addresses(ctx->io_s, ""); + bridge_addresses(ctx, ""); } static void @@ -451,7 +449,7 @@ setbridge_maxaddr(if_ctx *ctx, const char *arg, int dummy __unused) param.ifbrp_csize = val & 0xffffffff; - if (do_cmd(ctx->io_s, BRDGSCACHE, ¶m, sizeof(param), 1) < 0) + if (do_cmd(ctx, BRDGSCACHE, ¶m, sizeof(param), 1) < 0) err(1, "BRDGSCACHE %s", arg); } @@ -466,7 +464,7 @@ setbridge_hellotime(if_ctx *ctx, const char *arg, int dummy __unused) param.ifbrp_hellotime = val & 0xff; - if (do_cmd(ctx->io_s, BRDGSHT, ¶m, sizeof(param), 1) < 0) + if (do_cmd(ctx, BRDGSHT, ¶m, sizeof(param), 1) < 0) err(1, "BRDGSHT %s", arg); } @@ -481,7 +479,7 @@ setbridge_fwddelay(if_ctx *ctx, const char *arg, int dummy __unused) param.ifbrp_fwddelay = val & 0xff; - if (do_cmd(ctx->io_s, BRDGSFD, ¶m, sizeof(param), 1) < 0) + if (do_cmd(ctx, BRDGSFD, ¶m, sizeof(param), 1) < 0) err(1, "BRDGSFD %s", arg); } @@ -496,7 +494,7 @@ setbridge_maxage(if_ctx *ctx, const char *arg, int dummy __unused) param.ifbrp_maxage = val & 0xff; - if (do_cmd(ctx->io_s, BRDGSMA, ¶m, sizeof(param), 1) < 0) + if (do_cmd(ctx, BRDGSMA, ¶m, sizeof(param), 1) < 0) err(1, "BRDGSMA %s", arg); } @@ -511,7 +509,7 @@ setbridge_priority(if_ctx *ctx, const char *arg, int dummy __unused) param.ifbrp_prio = val & 0xffff; - if (do_cmd(ctx->io_s, BRDGSPRI, ¶m, sizeof(param), 1) < 0) + if (do_cmd(ctx, BRDGSPRI, ¶m, sizeof(param), 1) < 0) err(1, "BRDGSPRI %s", arg); } @@ -528,7 +526,7 @@ setbridge_protocol(if_ctx *ctx, const char *arg, int dummy __unused) errx(1, "unknown stp protocol"); } - if (do_cmd(ctx->io_s, BRDGSPROTO, ¶m, sizeof(param), 1) < 0) + if (do_cmd(ctx, BRDGSPROTO, ¶m, sizeof(param), 1) < 0) err(1, "BRDGSPROTO %s", arg); } @@ -543,7 +541,7 @@ setbridge_holdcount(if_ctx *ctx, const char *arg, int dummy __unused) param.ifbrp_txhc = val & 0xff; - if (do_cmd(ctx->io_s, BRDGSTXHC, ¶m, sizeof(param), 1) < 0) + if (do_cmd(ctx, BRDGSTXHC, ¶m, sizeof(param), 1) < 0) err(1, "BRDGSTXHC %s", arg); } @@ -561,7 +559,7 @@ setbridge_ifpriority(if_ctx *ctx, const char *ifn, const char *pri) strlcpy(req.ifbr_ifsname, ifn, sizeof(req.ifbr_ifsname)); req.ifbr_priority = val & 0xff; - if (do_cmd(ctx->io_s, BRDGSIFPRIO, &req, sizeof(req), 1) < 0) + if (do_cmd(ctx, BRDGSIFPRIO, &req, sizeof(req), 1) < 0) err(1, "BRDGSIFPRIO %s", pri); } @@ -579,7 +577,7 @@ setbridge_ifpathcost(if_ctx *ctx, const char *ifn, const char *cost) strlcpy(req.ifbr_ifsname, ifn, sizeof(req.ifbr_ifsname)); req.ifbr_path_cost = val; - if (do_cmd(ctx->io_s, BRDGSIFCOST, &req, sizeof(req), 1) < 0) + if (do_cmd(ctx, BRDGSIFCOST, &req, sizeof(req), 1) < 0) err(1, "BRDGSIFCOST %s", cost); } @@ -597,7 +595,7 @@ setbridge_ifmaxaddr(if_ctx *ctx, const char *ifn, const char *arg) strlcpy(req.ifbr_ifsname, ifn, sizeof(req.ifbr_ifsname)); req.ifbr_addrmax = val & 0xffffffff; - if (do_cmd(ctx->io_s, BRDGSIFAMAX, &req, sizeof(req), 1) < 0) + if (do_cmd(ctx, BRDGSIFAMAX, &req, sizeof(req), 1) < 0) err(1, "BRDGSIFAMAX %s", arg); } @@ -612,7 +610,7 @@ setbridge_timeout(if_ctx *ctx, const char *arg, int dummy __unused) param.ifbrp_ctime = val & 0xffffffff; - if (do_cmd(ctx->io_s, BRDGSTO, ¶m, sizeof(param), 1) < 0) + if (do_cmd(ctx, BRDGSTO, ¶m, sizeof(param), 1) < 0) err(1, "BRDGSTO %s", arg); } @@ -620,14 +618,14 @@ static void setbridge_private(if_ctx *ctx, const char *val, int dummy __unused) { - do_bridgeflag(ctx->io_s, val, IFBIF_PRIVATE, 1); + do_bridgeflag(ctx, val, IFBIF_PRIVATE, 1); } static void unsetbridge_private(if_ctx *ctx, const char *val, int dummy __unused) { - do_bridgeflag(ctx->io_s, val, IFBIF_PRIVATE, 0); + do_bridgeflag(ctx, val, IFBIF_PRIVATE, 0); } static struct cmd bridge_cmds[] = { diff --git a/sbin/ifconfig/ifclone.c b/sbin/ifconfig/ifclone.c index f09b91b4181b..ecd8bbc2e556 100644 --- a/sbin/ifconfig/ifclone.c +++ b/sbin/ifconfig/ifclone.c @@ -123,7 +123,7 @@ ifclonecreate(if_ctx *ctx, void *arg __unused) struct ifreq ifr = {}; struct clone_defcb *dcp; - strlcpy(ifr.ifr_name, name, sizeof(ifr.ifr_name)); + strlcpy(ifr.ifr_name, ctx->ifname, sizeof(ifr.ifr_name)); /* Try to find a default callback by filter */ SLIST_FOREACH(dcp, &clone_defcbh, next) { @@ -159,7 +159,7 @@ clone_create(if_ctx *ctx, 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, name, sizeof(ifr.ifr_name)); + strlcpy(ifr.ifr_name, ctx->ifname, sizeof(ifr.ifr_name)); if (ioctl(ctx->io_s, SIOCIFDESTROY, &ifr) < 0) err(1, "SIOCIFDESTROY"); } diff --git a/sbin/ifconfig/ifconfig.c b/sbin/ifconfig/ifconfig.c index a250062d69e1..0ccca3666bed 100644 --- a/sbin/ifconfig/ifconfig.c +++ b/sbin/ifconfig/ifconfig.c @@ -92,7 +92,7 @@ ifconfig_handle_t *lifh; */ struct ifreq ifr; -char name[IFNAMSIZ]; +//char name[IFNAMSIZ]; #ifdef WITHOUT_NETLINK static char *descr = NULL; static size_t descrlen = 64; @@ -576,15 +576,16 @@ static int ifconfig_wrapper(struct ifconfig_args *args, int iscreate, const struct afswtch *uafp) { -#ifdef WITHOUT_NETLINK struct ifconfig_context ctx = { .args = args, .io_s = -1, + .ifname = args->ifname, }; +#ifdef WITHOUT_NETLINK return (ifconfig(&ctx, iscreate, uafp)); #else - return (ifconfig_wrapper_nl(args, iscreate, uafp)); + return (ifconfig_wrapper_nl(&ctx, iscreate, uafp)); #endif } @@ -600,11 +601,16 @@ isargcreate(const char *arg) return (false); } +static bool +isnametoolong(const char *ifname) +{ + return (strlen(ifname) >= IFNAMSIZ); +} + int main(int ac, char *av[]) { char *envformat; - size_t iflen; int flags; #ifdef JAIL int jid; @@ -654,8 +660,7 @@ main(int ac, char *av[]) * to find the interface. */ if (isargcreate(arg)) { - iflen = strlcpy(name, args->ifname, sizeof(name)); - if (iflen >= sizeof(name)) + if (isnametoolong(args->ifname)) errx(1, "%s: cloning name too long", args->ifname); ifconfig_wrapper(args, 1, NULL); @@ -668,8 +673,7 @@ main(int ac, char *av[]) * to find the interface as it lives in another vnet. */ if (arg != NULL && (strcmp(arg, "-vnet") == 0)) { - iflen = strlcpy(name, args->ifname, sizeof(name)); - if (iflen >= sizeof(name)) + if (isnametoolong(args->ifname)) errx(1, "%s: interface name too long", args->ifname); ifconfig_wrapper(args, 0, NULL); @@ -704,11 +708,10 @@ main(int ac, char *av[]) * system address list */ if ((args->argc > 0) && (args->ifname != NULL)) { - iflen = strlcpy(name, args->ifname, sizeof(name)); - if (iflen >= sizeof(name)) { + if (isnametoolong(args->ifname)) warnx("%s: interface name too long, skipping", args->ifname); - } else { - flags = getifflags(name, -1, false); + else { + flags = getifflags(args->ifname, -1, false); if (!(((flags & IFF_CANTCONFIG) != 0) || (args->downonly && (flags & IFF_UP) != 0) || (args->uponly && (flags & IFF_UP) == 0))) @@ -776,7 +779,6 @@ list_interfaces_ioctl(struct ifconfig_args *args) struct ifa_order_elt *cur, *tmp; char *namecp = NULL; int ifindex; - size_t iflen; if (getifaddrs(&ifap) != 0) err(EXIT_FAILURE, "getifaddrs"); @@ -810,8 +812,7 @@ list_interfaces_ioctl(struct ifconfig_args *args) sdl = NULL; if (cp != NULL && strcmp(cp, ifa->ifa_name) == 0 && !args->namesonly) continue; - iflen = strlcpy(name, ifa->ifa_name, sizeof(name)); - if (iflen >= sizeof(name)) { + if (isnametoolong(ifa->ifa_name)) { warnx("%s: interface name too long, skipping", ifa->ifa_name); continue; @@ -834,7 +835,7 @@ list_interfaces_ioctl(struct ifconfig_args *args) ifindex++; if (ifindex > 1) printf(" "); - fputs(name, stdout); + fputs(cp, stdout); continue; } ifindex++; @@ -1044,7 +1045,7 @@ af_exec_ioctl(if_ctx *ctx, unsigned long action, void *data) { struct ifreq *req = (struct ifreq *)data; - strlcpy(req->ifr_name, name, sizeof(req->ifr_name)); + strlcpy(req->ifr_name, ctx->ifname, sizeof(req->ifr_name)); if (ioctl_ctx(ctx, action, req) == 0) return (0); return (errno); @@ -1057,7 +1058,7 @@ delifaddr(if_ctx *ctx, const struct afswtch *afp) if (afp->af_exec == NULL) { warnx("interface %s cannot change %s addresses!", - name, afp->af_name); + ctx->ifname, afp->af_name); clearaddr = 0; return; } @@ -1076,7 +1077,7 @@ addifaddr(if_ctx *ctx, const struct afswtch *afp) { if (afp->af_exec == NULL) { warnx("interface %s cannot change %s addresses!", - name, afp->af_name); + ctx->ifname, afp->af_name); newaddr = 0; return; } @@ -1100,10 +1101,11 @@ ifconfig(if_ctx *orig_ctx, int iscreate, const struct afswtch *uafp) struct ifconfig_context _ctx = { .args = orig_ctx->args, .io_ss = orig_ctx->io_ss, + .ifname = orig_ctx->ifname, }; struct ifconfig_context *ctx = &_ctx; - strlcpy(ifr.ifr_name, name, sizeof ifr.ifr_name); + strlcpy(ifr.ifr_name, ctx->ifname, sizeof ifr.ifr_name); afp = NULL; if (uafp != NULL) afp = uafp; @@ -1209,7 +1211,7 @@ top: * Do any post argument processing required by the address family. */ if (afp->af_postproc != NULL) - afp->af_postproc(ctx, newaddr, getifflags(name, s, true)); + afp->af_postproc(ctx, newaddr, getifflags(ctx->ifname, s, true)); /* * Do deferred callbacks registered while processing * command-line arguments. @@ -1394,14 +1396,14 @@ setifflags(if_ctx *ctx, const char *vname, int value) struct ifreq my_ifr; int flags; - flags = getifflags(name, ctx->io_s, false); + flags = getifflags(ctx->ifname, ctx->io_s, false); if (value < 0) { value = -value; flags &= ~value; } else flags |= value; memset(&my_ifr, 0, sizeof(my_ifr)); - (void) strlcpy(my_ifr.ifr_name, name, sizeof(my_ifr.ifr_name)); + strlcpy(my_ifr.ifr_name, ctx->ifname, sizeof(my_ifr.ifr_name)); my_ifr.ifr_flags = flags & 0xffff; my_ifr.ifr_flagshigh = flags >> 16; if (ioctl(ctx->io_s, SIOCSIFFLAGS, (caddr_t)&my_ifr) < 0) @@ -1482,7 +1484,7 @@ 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, name, sizeof (ifr.ifr_name)); + strlcpy(ifr.ifr_name, ctx->ifname, sizeof (ifr.ifr_name)); ifr.ifr_metric = atoi(val); if (ioctl(ctx->io_s, SIOCSIFMETRIC, (caddr_t)&ifr) < 0) err(1, "ioctl SIOCSIFMETRIC (set metric)"); @@ -1491,7 +1493,7 @@ setifmetric(if_ctx *ctx, const char *val, int dummy __unused) static void setifmtu(if_ctx *ctx, const char *val, int dummy __unused) { - strlcpy(ifr.ifr_name, name, sizeof (ifr.ifr_name)); + strlcpy(ifr.ifr_name, ctx->ifname, sizeof (ifr.ifr_name)); ifr.ifr_mtu = atoi(val); if (ioctl(ctx->io_s, SIOCSIFMTU, (caddr_t)&ifr) < 0) err(1, "ioctl SIOCSIFMTU (set mtu)"); @@ -1527,7 +1529,7 @@ setifname(if_ctx *ctx, const char *val, int dummy __unused) { char *newname; - strlcpy(ifr.ifr_name, name, sizeof(ifr.ifr_name)); + strlcpy(ifr.ifr_name, ctx->ifname, sizeof(ifr.ifr_name)); newname = strdup(val); if (newname == NULL) @@ -1546,7 +1548,7 @@ setifdescr(if_ctx *ctx, const char *val, int dummy __unused) { char *newdescr; - strlcpy(ifr.ifr_name, name, sizeof(ifr.ifr_name)); + strlcpy(ifr.ifr_name, ctx->ifname, sizeof(ifr.ifr_name)); ifr.ifr_buffer.length = strlen(val) + 1; if (ifr.ifr_buffer.length == 1) { @@ -1663,12 +1665,12 @@ print_ifcap(struct ifconfig_args *args, int s) } void -print_ifstatus(int s) +print_ifstatus(if_ctx *ctx) { struct ifstat ifs; - strlcpy(ifs.ifs_name, name, sizeof ifs.ifs_name); - if (ioctl(s, SIOCGIFSTATUS, &ifs) == 0) + strlcpy(ifs.ifs_name, ctx->ifname, sizeof ifs.ifs_name); + if (ioctl_ctx(ctx, SIOCGIFSTATUS, &ifs) == 0) printf("%s", ifs.ascii); } @@ -1722,22 +1724,26 @@ status(struct ifconfig_args *args, const struct sockaddr_dl *sdl, struct ifaddrs *ift; int s; bool allfamilies = args->afp == NULL; + char *ifname = ifa->ifa_name; 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, name, sizeof(ifr.ifr_name)); + strlcpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name)); s = socket(ifr.ifr_addr.sa_family, SOCK_DGRAM, 0); if (s < 0) err(1, "socket(family %u,SOCK_DGRAM)", ifr.ifr_addr.sa_family); - struct ifconfig_context _ctx = { .io_s = s }, *ctx; - ctx = &_ctx; + struct ifconfig_context _ctx = { + .io_s = s, + .ifname = ifname, + }; + struct ifconfig_context *ctx = &_ctx; - printf("%s: ", name); + printf("%s: ", ifname); printb("flags", ifa->ifa_flags, IFFBITS); print_metric(s); print_mtu(s); @@ -1784,7 +1790,7 @@ status(struct ifconfig_args *args, const struct sockaddr_dl *sdl, else if (args->afp->af_other_status != NULL) args->afp->af_other_status(ctx); - print_ifstatus(s); + print_ifstatus(ctx); if (args->verbose > 0) sfp_status(ctx); diff --git a/sbin/ifconfig/ifconfig.h b/sbin/ifconfig/ifconfig.h index 5e0dfcd7e8c5..45d05d1bf077 100644 --- a/sbin/ifconfig/ifconfig.h +++ b/sbin/ifconfig/ifconfig.h @@ -60,7 +60,7 @@ struct ifconfig_context { const struct afswtch *afp; int io_s; /* fd to use for ioctl() */ struct snl_state *io_ss; /* NETLINK_ROUTE socket */ - char *ifname; /* Current interface name */ + const char *ifname; /* Current interface name */ char _ifname_storage_ioctl[IFNAMSIZ]; }; typedef struct ifconfig_context if_ctx; @@ -251,7 +251,6 @@ void opt_register(struct option *); extern ifconfig_handle_t *lifh; extern struct ifreq ifr; -extern char name[IFNAMSIZ]; /* name of interface */ extern int allmedia; extern int newaddr; extern int exit_code; @@ -282,12 +281,12 @@ void print_ifcap(struct ifconfig_args *args, int s); void tunnel_status(if_ctx *ctx); struct afswtch *af_getbyfamily(int af); void af_other_status(if_ctx *ctx); -void print_ifstatus(int s); +void print_ifstatus(if_ctx *ctx); void print_metric(int s); /* Netlink-related functions */ void list_interfaces_nl(struct ifconfig_args *args); -int ifconfig_wrapper_nl(struct ifconfig_args *args, int iscreate, +int ifconfig_wrapper_nl(if_ctx *ctx, int iscreate, const struct afswtch *uafp); uint32_t if_nametoindex_nl(struct snl_state *ss, const char *ifname); @@ -295,7 +294,7 @@ uint32_t if_nametoindex_nl(struct snl_state *ss, const char *ifname); * XXX expose this so modules that need to know of any pending * operations on ifmedia can avoid cmd line ordering confusion. */ -struct ifmediareq *ifmedia_getstate(void); +struct ifmediareq *ifmedia_getstate(if_ctx *ctx); void print_vhid(const struct ifaddrs *, const char *); diff --git a/sbin/ifconfig/ifconfig_netlink.c b/sbin/ifconfig/ifconfig_netlink.c index bded84484a52..1635a4cb80c7 100644 --- a/sbin/ifconfig/ifconfig_netlink.c +++ b/sbin/ifconfig/ifconfig_netlink.c @@ -123,19 +123,15 @@ nl_init_socket(struct snl_state *ss) } int -ifconfig_wrapper_nl(struct ifconfig_args *args, int iscreate, +ifconfig_wrapper_nl(if_ctx *ctx, int iscreate, const struct afswtch *uafp) { struct snl_state ss = {}; - struct ifconfig_context ctx = { - .args = args, - .io_s = -1, - .io_ss = &ss, - }; nl_init_socket(&ss); + ctx->io_ss = &ss; - int error = ifconfig(&ctx, iscreate, uafp); + int error = ifconfig(ctx, iscreate, uafp); snl_free(&ss); @@ -396,7 +392,7 @@ status_nl(if_ctx *ctx, struct iface *iface) else if (args->afp->af_other_status != NULL) args->afp->af_other_status(ctx); - print_ifstatus(ctx->io_s); + print_ifstatus(ctx); if (args->verbose > 0) sfp_status(ctx); } @@ -411,16 +407,6 @@ get_local_socket(void) return (s); } -static void -set_global_ifname(if_link_t *link) -{ - size_t iflen = strlcpy(name, link->ifla_ifname, sizeof(name)); - - if (iflen >= sizeof(name)) - errx(1, "%s: cloning name too long", link->ifla_ifname); - strlcpy(ifr.ifr_name, link->ifla_ifname, sizeof(ifr.ifr_name)); -} - void list_interfaces_nl(struct ifconfig_args *args) { @@ -452,7 +438,7 @@ list_interfaces_nl(struct ifconfig_args *args) if (!match_iface(args, iface)) continue; - set_global_ifname(&iface->link); + ctx->ifname = iface->link.ifla_ifname; if (args->namesonly) { if (num++ != 0) diff --git a/sbin/ifconfig/iffib.c b/sbin/ifconfig/iffib.c index 4ebc8341338f..684c57c88f64 100644 --- a/sbin/ifconfig/iffib.c +++ b/sbin/ifconfig/iffib.c @@ -51,13 +51,13 @@ fib_status(if_ctx *ctx) struct ifreq ifr; memset(&ifr, 0, sizeof(ifr)); - strlcpy(ifr.ifr_name, name, sizeof(ifr.ifr_name)); + strlcpy(ifr.ifr_name, ctx->ifname, sizeof(ifr.ifr_name)); if (ioctl_ctx(ctx, SIOCGIFFIB, (caddr_t)&ifr) == 0 && ifr.ifr_fib != RT_DEFAULT_FIB) printf("\tfib: %u\n", ifr.ifr_fib); memset(&ifr, 0, sizeof(ifr)); - strlcpy(ifr.ifr_name, name, sizeof(ifr.ifr_name)); + strlcpy(ifr.ifr_name, ctx->ifname, sizeof(ifr.ifr_name)); if (ioctl_ctx(ctx, SIOCGTUNFIB, (caddr_t)&ifr) == 0 && ifr.ifr_fib != RT_DEFAULT_FIB) printf("\ttunnelfib: %u\n", ifr.ifr_fib); @@ -75,7 +75,7 @@ setiffib(if_ctx *ctx, const char *val, int dummy __unused) return; } - strlcpy(ifr.ifr_name, name, sizeof (ifr.ifr_name)); + strlcpy(ifr.ifr_name, ctx->ifname, sizeof (ifr.ifr_name)); ifr.ifr_fib = fib; if (ioctl(ctx->io_s, SIOCSIFFIB, (caddr_t)&ifr) < 0) warn("ioctl (SIOCSIFFIB)"); @@ -93,7 +93,7 @@ settunfib(if_ctx *ctx, const char *val, int dummy __unused) return; } - strlcpy(ifr.ifr_name, name, sizeof (ifr.ifr_name)); *** 2597 LINES SKIPPED ***