aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/compat/linux/linux.c13
-rw-r--r--sys/compat/linux/linux_common.h1
2 files changed, 11 insertions, 3 deletions
diff --git a/sys/compat/linux/linux.c b/sys/compat/linux/linux.c
index 53a874ebfab7..252645cf2ae5 100644
--- a/sys/compat/linux/linux.c
+++ b/sys/compat/linux/linux.c
@@ -434,10 +434,17 @@ ifname_linux_to_bsd(struct thread *td, const char *lxname, char *bsdname)
unsigned short
linux_ifflags(struct ifnet *ifp)
{
- unsigned short fl, flags;
+ unsigned short flags;
+
+ flags = if_getflags(ifp) | if_getdrvflags(ifp);
+ return (bsd_to_linux_ifflags(flags));
+}
+
+unsigned short
+bsd_to_linux_ifflags(int fl)
+{
+ unsigned short flags = 0;
- fl = (if_getflags(ifp) | if_getdrvflags(ifp)) & 0xffff;
- flags = 0;
if (fl & IFF_UP)
flags |= LINUX_IFF_UP;
if (fl & IFF_BROADCAST)
diff --git a/sys/compat/linux/linux_common.h b/sys/compat/linux/linux_common.h
index 3392f55672f3..94ff5e49b57a 100644
--- a/sys/compat/linux/linux_common.h
+++ b/sys/compat/linux/linux_common.h
@@ -39,6 +39,7 @@ int ifname_linux_to_bsd(struct thread *, const char *, char *);
unsigned short linux_ifflags(struct ifnet *);
int linux_ifhwaddr(struct ifnet *ifp, struct l_sockaddr *lsa);
+unsigned short bsd_to_linux_ifflags(int);
int linux_to_bsd_domain(int domain);
int bsd_to_linux_domain(int domain);
int bsd_to_linux_sockaddr(const struct sockaddr *sa,