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:
parent
7fa282e616
commit
f414f37e38
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user