Changeset View
Changeset View
Standalone View
Standalone View
head/sys/compat/linux/linux.c
Show First 20 Lines • Show All 221 Lines • ▼ Show 20 Lines | |||||
* can point to the same buffer. | * can point to the same buffer. | ||||
*/ | */ | ||||
struct ifnet * | struct ifnet * | ||||
ifname_linux_to_bsd(struct thread *td, const char *lxname, char *bsdname) | ifname_linux_to_bsd(struct thread *td, const char *lxname, char *bsdname) | ||||
{ | { | ||||
struct ifnet *ifp; | struct ifnet *ifp; | ||||
int len, unit; | int len, unit; | ||||
char *ep; | char *ep; | ||||
int is_eth, is_lo, index; | int index; | ||||
bool is_eth, is_lo; | |||||
for (len = 0; len < LINUX_IFNAMSIZ; ++len) | for (len = 0; len < LINUX_IFNAMSIZ; ++len) | ||||
if (!isalpha(lxname[len]) || lxname[len] == 0) | if (!isalpha(lxname[len]) || lxname[len] == '\0') | ||||
break; | break; | ||||
if (len == 0 || len == LINUX_IFNAMSIZ) | if (len == 0 || len == LINUX_IFNAMSIZ) | ||||
return (NULL); | return (NULL); | ||||
/* Linux loopback interface name is lo (not lo0) */ | /* Linux loopback interface name is lo (not lo0) */ | ||||
is_lo = (len == 2 && !strncmp(lxname, "lo", len)) ? 1 : 0; | is_lo = (len == 2 && strncmp(lxname, "lo", len) == 0); | ||||
unit = (int)strtoul(lxname + len, &ep, 10); | unit = (int)strtoul(lxname + len, &ep, 10); | ||||
if ((ep == NULL || ep == lxname + len || ep >= lxname + LINUX_IFNAMSIZ) && | if ((ep == NULL || ep == lxname + len || ep >= lxname + LINUX_IFNAMSIZ) && | ||||
is_lo == 0) | is_lo == 0) | ||||
return (NULL); | return (NULL); | ||||
index = 0; | index = 0; | ||||
is_eth = (len == 3 && !strncmp(lxname, "eth", len)) ? 1 : 0; | is_eth = (len == 3 && strncmp(lxname, "eth", len) == 0); | ||||
CURVNET_SET(TD_TO_VNET(td)); | CURVNET_SET(TD_TO_VNET(td)); | ||||
IFNET_RLOCK(); | IFNET_RLOCK(); | ||||
CK_STAILQ_FOREACH(ifp, &V_ifnet, if_link) { | CK_STAILQ_FOREACH(ifp, &V_ifnet, if_link) { | ||||
/* | /* | ||||
* Allow Linux programs to use FreeBSD names. Don't presume | * Allow Linux programs to use FreeBSD names. Don't presume | ||||
* we never have an interface named "eth", so don't make | * we never have an interface named "eth", so don't make | ||||
* the test optional based on is_eth. | * the test optional based on is_eth. | ||||
▲ Show 20 Lines • Show All 58 Lines • Show Last 20 Lines |