ifconfig: remove global 'ifr' usage from ifmedia.c & remove 'ifr'.

Reviewed by:	kp
Differential Revision: https://reviews.freebsd.org/D40535
MFC after:	2 weeks
This commit is contained in:
Alexander V. Chernikov 2023-06-14 13:04:10 +00:00
parent 7fa282e616
commit f414f37e38
3 changed files with 8 additions and 25 deletions

View File

@ -85,14 +85,6 @@ static const char rcsid[] =
ifconfig_handle_t *lifh; ifconfig_handle_t *lifh;
/*
* Since "struct ifreq" is composed of various union members, callers
* should pay special attention to interpret the value.
* (.e.g. little/big endian difference in the structure.)
*/
struct ifreq ifr;
//char name[IFNAMSIZ];
#ifdef WITHOUT_NETLINK #ifdef WITHOUT_NETLINK
static char *descr = NULL; static char *descr = NULL;
static size_t descrlen = 64; static size_t descrlen = 64;

View File

@ -251,7 +251,6 @@ struct option {
void opt_register(struct option *); void opt_register(struct option *);
extern ifconfig_handle_t *lifh; extern ifconfig_handle_t *lifh;
extern struct ifreq ifr;
extern int allmedia; extern int allmedia;
extern int exit_code; extern int exit_code;
extern char *f_inet, *f_inet6, *f_ether, *f_addr; extern char *f_inet, *f_inet6, *f_ether, *f_addr;

View File

@ -179,10 +179,11 @@ setifmediacallback(if_ctx *ctx, void *arg)
{ {
struct ifmediareq *ifmr = (struct ifmediareq *)arg; struct ifmediareq *ifmr = (struct ifmediareq *)arg;
static bool did_it = false; static bool did_it = false;
struct ifreq ifr = {};
if (!did_it) { if (!did_it) {
ifr.ifr_media = ifmr->ifm_current; ifr.ifr_media = ifmr->ifm_current;
if (ioctl_ctx(ctx, SIOCSIFMEDIA, (caddr_t)&ifr) < 0) if (ioctl_ctx_ifr(ctx, SIOCSIFMEDIA, &ifr) < 0)
err(1, "SIOCSIFMEDIA (media)"); err(1, "SIOCSIFMEDIA (media)");
free(ifmr); free(ifmr);
did_it = true; did_it = true;
@ -208,11 +209,9 @@ setmedia(if_ctx *ctx, const char *val, int d __unused)
*/ */
subtype = get_media_subtype(ifmr->ifm_ulist[0], val); subtype = get_media_subtype(ifmr->ifm_ulist[0], val);
strlcpy(ifr.ifr_name, ctx->ifname, sizeof(ifr.ifr_name)); ifmr->ifm_current = (ifmr->ifm_current & IFM_IMASK) |
ifr.ifr_media = (ifmr->ifm_current & IFM_IMASK) |
IFM_TYPE(ifmr->ifm_ulist[0]) | subtype; IFM_TYPE(ifmr->ifm_ulist[0]) | subtype;
ifmr->ifm_current = ifr.ifr_media;
callback_register(setifmediacallback, (void *)ifmr); callback_register(setifmediacallback, (void *)ifmr);
} }
@ -240,18 +239,15 @@ domediaopt(if_ctx *ctx, const char *val, bool clear)
options = get_media_options(ifmr->ifm_ulist[0], val); options = get_media_options(ifmr->ifm_ulist[0], val);
strlcpy(ifr.ifr_name, ctx->ifname, sizeof(ifr.ifr_name));
ifr.ifr_media = ifmr->ifm_current;
if (clear) if (clear)
ifr.ifr_media &= ~options; ifmr->ifm_current &= ~options;
else { else {
if (options & IFM_HDX) { if (options & IFM_HDX) {
ifr.ifr_media &= ~IFM_FDX; ifmr->ifm_current &= ~IFM_FDX;
options &= ~IFM_HDX; options &= ~IFM_HDX;
} }
ifr.ifr_media |= options; ifmr->ifm_current |= options;
} }
ifmr->ifm_current = ifr.ifr_media;
callback_register(setifmediacallback, (void *)ifmr); callback_register(setifmediacallback, (void *)ifmr);
} }
@ -267,10 +263,8 @@ setmediainst(if_ctx *ctx, const char *val, int d __unused)
if (inst < 0 || inst > (int)IFM_INST_MAX) if (inst < 0 || inst > (int)IFM_INST_MAX)
errx(1, "invalid media instance: %s", val); errx(1, "invalid media instance: %s", val);
strlcpy(ifr.ifr_name, ctx->ifname, sizeof(ifr.ifr_name)); ifmr->ifm_current = (ifmr->ifm_current & ~IFM_IMASK) | inst << IFM_ISHIFT;
ifr.ifr_media = (ifmr->ifm_current & ~IFM_IMASK) | inst << IFM_ISHIFT;
ifmr->ifm_current = ifr.ifr_media;
callback_register(setifmediacallback, (void *)ifmr); callback_register(setifmediacallback, (void *)ifmr);
} }
@ -284,10 +278,8 @@ setmediamode(if_ctx *ctx, const char *val, int d __unused)
mode = get_media_mode(ifmr->ifm_ulist[0], val); mode = get_media_mode(ifmr->ifm_ulist[0], val);
strlcpy(ifr.ifr_name, ctx->ifname, sizeof(ifr.ifr_name)); ifmr->ifm_current = (ifmr->ifm_current & ~IFM_MMASK) | mode;
ifr.ifr_media = (ifmr->ifm_current & ~IFM_MMASK) | mode;
ifmr->ifm_current = ifr.ifr_media;
callback_register(setifmediacallback, (void *)ifmr); callback_register(setifmediacallback, (void *)ifmr);
} }