Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 22 May 2019 05:35:36 +0000 (UTC)
From:      Dmitry Chagin <dchagin@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org
Subject:   svn commit: r348095 - stable/12/sys/compat/linux
Message-ID:  <201905220535.x4M5Za3v000128@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dchagin
Date: Wed May 22 05:35:35 2019
New Revision: 348095
URL: https://svnweb.freebsd.org/changeset/base/348095

Log:
  MFC r347203:
  
  Rewrite linux_ifflags() in more readable Linuxulator style.

Modified:
  stable/12/sys/compat/linux/linux.c
  stable/12/sys/compat/linux/linux.h
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/compat/linux/linux.c
==============================================================================
--- stable/12/sys/compat/linux/linux.c	Wed May 22 05:34:44 2019	(r348094)
+++ stable/12/sys/compat/linux/linux.c	Wed May 22 05:35:35 2019	(r348095)
@@ -269,16 +269,30 @@ ifname_linux_to_bsd(struct thread *td, const char *lxn
 void
 linux_ifflags(struct ifnet *ifp, short *flags)
 {
+	unsigned short fl;
 
-	*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;
-	}
+	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

Modified: stable/12/sys/compat/linux/linux.h
==============================================================================
--- stable/12/sys/compat/linux/linux.h	Wed May 22 05:34:44 2019	(r348094)
+++ stable/12/sys/compat/linux/linux.h	Wed May 22 05:35:35 2019	(r348095)
@@ -46,6 +46,26 @@ struct l_sockaddr {
 #define	LINUX_ARPHRD_ETHER	1
 #define	LINUX_ARPHRD_LOOPBACK	772
 
+/*
+ * net device flags
+ */
+#define	LINUX_IFF_UP		0x0001
+#define	LINUX_IFF_BROADCAST	0x0002
+#define	LINUX_IFF_DEBUG		0x0004
+#define	LINUX_IFF_LOOPBACK	0x0008
+#define	LINUX_IFF_POINTOPOINT	0x0010
+#define	LINUX_IFF_NOTRAILERS	0x0020
+#define	LINUX_IFF_RUNNING	0x0040
+#define	LINUX_IFF_NOARP		0x0080
+#define	LINUX_IFF_PROMISC	0x0100
+#define	LINUX_IFF_ALLMULTI	0x0200
+#define	LINUX_IFF_MASTER	0x0400
+#define	LINUX_IFF_SLAVE		0x0800
+#define	LINUX_IFF_MULTICAST	0x1000
+#define	LINUX_IFF_PORTSEL	0x2000
+#define	LINUX_IFF_AUTOMEDIA	0x4000
+#define	LINUX_IFF_DYNAMIC	0x8000
+
 /* sigaltstack */
 #define	LINUX_SS_ONSTACK	1
 #define	LINUX_SS_DISABLE	2



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201905220535.x4M5Za3v000128>