version 1.242.4.1, 2010/07/03 01:19:59 |
version 1.242.4.2, 2011/03/05 20:55:51 |
Line 981 if_clone_lookup(const char *name, int *u |
|
Line 981 if_clone_lookup(const char *name, int *u |
|
|
|
unit = 0; |
unit = 0; |
while (cp - name < IFNAMSIZ && *cp) { |
while (cp - name < IFNAMSIZ && *cp) { |
if (*cp < '0' || *cp > '9' || unit > INT_MAX / 10) { |
if (*cp < '0' || *cp > '9' || unit >= INT_MAX / 10) { |
/* Bogus unit number. */ |
/* Bogus unit number. */ |
return NULL; |
return NULL; |
} |
} |
Line 1477 ifunit(const char *name) |
|
Line 1477 ifunit(const char *name) |
|
return NULL; |
return NULL; |
} |
} |
|
|
|
ifnet_t * |
|
if_byindex(u_int idx) |
|
{ |
|
|
|
return (idx < if_indexlim) ? ifindex2ifnet[idx] : NULL; |
|
} |
|
|
/* common */ |
/* common */ |
int |
int |
ifioctl_common(struct ifnet *ifp, u_long cmd, void *data) |
ifioctl_common(struct ifnet *ifp, u_long cmd, void *data) |
Line 1688 ifioctl(struct socket *so, u_long cmd, v |
|
Line 1695 ifioctl(struct socket *so, u_long cmd, v |
|
{ |
{ |
struct ifnet *ifp; |
struct ifnet *ifp; |
struct ifreq *ifr; |
struct ifreq *ifr; |
struct ifcapreq *ifcr; |
|
struct ifdatareq *ifdr; |
|
int error = 0; |
int error = 0; |
#if defined(COMPAT_OSOCK) || defined(COMPAT_OIFREQ) |
#if defined(COMPAT_OSOCK) || defined(COMPAT_OIFREQ) |
u_long ocmd = cmd; |
u_long ocmd = cmd; |
Line 1726 ifioctl(struct socket *so, u_long cmd, v |
|
Line 1731 ifioctl(struct socket *so, u_long cmd, v |
|
} else |
} else |
#endif |
#endif |
ifr = data; |
ifr = data; |
ifcr = data; |
|
ifdr = data; |
|
|
|
ifp = ifunit(ifr->ifr_name); |
ifp = ifunit(ifr->ifr_name); |
|
|
Line 1779 ifioctl(struct socket *so, u_long cmd, v |
|
Line 1782 ifioctl(struct socket *so, u_long cmd, v |
|
case SIOCS80211POWER: |
case SIOCS80211POWER: |
case SIOCS80211BSSID: |
case SIOCS80211BSSID: |
case SIOCS80211CHANNEL: |
case SIOCS80211CHANNEL: |
|
case SIOCSLINKSTR: |
if (l != NULL) { |
if (l != NULL) { |
error = kauth_authorize_network(l->l_cred, |
error = kauth_authorize_network(l->l_cred, |
KAUTH_NETWORK_INTERFACE, |
KAUTH_NETWORK_INTERFACE, |
Line 1817 ifioctl(struct socket *so, u_long cmd, v |
|
Line 1821 ifioctl(struct socket *so, u_long cmd, v |
|
} |
} |
#ifdef COMPAT_OIFREQ |
#ifdef COMPAT_OIFREQ |
if (cmd != ocmd) |
if (cmd != ocmd) |
ifreqn2o(ifr, oifr); |
ifreqn2o(oifr, ifr); |
#endif |
#endif |
|
|
return error; |
return error; |
Line 1916 ifconf(u_long cmd, void *data) |
|
Line 1920 ifconf(u_long cmd, void *data) |
|
} |
} |
|
|
int |
int |
ifreq_setaddr(const u_long cmd, struct ifreq *ifr, const struct sockaddr *sa) |
ifreq_setaddr(u_long cmd, struct ifreq *ifr, const struct sockaddr *sa) |
{ |
{ |
uint8_t len; |
uint8_t len; |
u_long ncmd; |
#ifdef COMPAT_OIFREQ |
|
struct ifreq ifrb; |
if ((ncmd = compat_cvtcmd(cmd)) != cmd) |
struct oifreq *oifr = NULL; |
len = sizeof(ifr->ifr_addr); |
u_long ocmd = cmd; |
else |
cmd = compat_cvtcmd(cmd); |
|
if (cmd != ocmd) { |
|
oifr = (struct oifreq *)(void *)ifr; |
|
ifr = &ifrb; |
|
ifreqo2n(oifr, ifr); |
|
len = sizeof(oifr->ifr_addr); |
|
} else |
|
#endif |
len = sizeof(ifr->ifr_ifru.ifru_space); |
len = sizeof(ifr->ifr_ifru.ifru_space); |
|
|
if (len < sa->sa_len) |
if (len < sa->sa_len) |
return EFBIG; |
return EFBIG; |
|
|
memset(&ifr->ifr_addr, 0, len); |
memset(&ifr->ifr_addr, 0, len); |
sockaddr_copy(&ifr->ifr_addr, len, sa); |
sockaddr_copy(&ifr->ifr_addr, len, sa); |
|
|
|
#ifdef COMPAT_OIFREQ |
|
if (cmd != ocmd) |
|
ifreqn2o(oifr, ifr); |
|
#endif |
return 0; |
return 0; |
} |
} |
|
|