aboutsummaryrefslogtreecommitdiff
path: root/sys/compat/linux/linux.c
diff options
context:
space:
mode:
authorDmitry Chagin <dchagin@FreeBSD.org>2019-05-06 19:57:51 +0000
committerDmitry Chagin <dchagin@FreeBSD.org>2019-05-06 19:57:51 +0000
commitbbac65c772a37b0191445f55bdcdfb6bd0ac5fdb (patch)
treea2cc5dabf2f24b35be0e3664e517797c93b29db4 /sys/compat/linux/linux.c
parent9c1437ae571b48d3b8684de5d3913a9f9f52871c (diff)
downloadsrc-bbac65c772a37b0191445f55bdcdfb6bd0ac5fdb.tar.gz
src-bbac65c772a37b0191445f55bdcdfb6bd0ac5fdb.zip
Rewrite linux_ifflags() in more readable Linuxulator style.
Reviewed by: emaste MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D20146
Notes
Notes: svn path=/head/; revision=347203
Diffstat (limited to 'sys/compat/linux/linux.c')
-rw-r--r--sys/compat/linux/linux.c34
1 files changed, 24 insertions, 10 deletions
diff --git a/sys/compat/linux/linux.c b/sys/compat/linux/linux.c
index af17e135e1ca..33a2a1098401 100644
--- a/sys/compat/linux/linux.c
+++ b/sys/compat/linux/linux.c
@@ -269,16 +269,30 @@ ifname_linux_to_bsd(struct thread *td, const char *lxname, char *bsdname)
void
linux_ifflags(struct ifnet *ifp, short *flags)
{
-
- *flags = (ifp->if_flags | ifp->if_drv_flags) & 0xffff;
- /* these flags have no Linux equivalent */
- *flags &= ~(IFF_DRV_OACTIVE|IFF_SIMPLEX|
- IFF_LINK0|IFF_LINK1|IFF_LINK2);
- /* Linux' multicast flag is in a different bit */
- if (*flags & IFF_MULTICAST) {
- *flags &= ~IFF_MULTICAST;
- *flags |= 0x1000;
- }
+ unsigned short fl;
+
+ fl = (ifp->if_flags | ifp->if_drv_flags) & 0xffff;
+ *flags = 0;
+ if (fl & IFF_UP)
+ *flags |= LINUX_IFF_UP;
+ if (fl & IFF_BROADCAST)
+ *flags |= LINUX_IFF_BROADCAST;
+ if (fl & IFF_DEBUG)
+ *flags |= LINUX_IFF_DEBUG;
+ if (fl & IFF_LOOPBACK)
+ *flags |= LINUX_IFF_LOOPBACK;
+ if (fl & IFF_POINTOPOINT)
+ *flags |= LINUX_IFF_POINTOPOINT;
+ if (fl & IFF_DRV_RUNNING)
+ *flags |= LINUX_IFF_RUNNING;
+ if (fl & IFF_NOARP)
+ *flags |= LINUX_IFF_NOARP;
+ if (fl & IFF_PROMISC)
+ *flags |= LINUX_IFF_PROMISC;
+ if (fl & IFF_ALLMULTI)
+ *flags |= LINUX_IFF_ALLMULTI;
+ if (fl & IFF_MULTICAST)
+ *flags |= LINUX_IFF_MULTICAST;
}
int