Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 23 Jan 2015 19:22:19 +0000 (UTC)
From:      Gleb Smirnoff <glebius@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r277600 - in projects/ifnet/sys: dev/virtio/network net
Message-ID:  <201501231922.t0NJMJ8Z050646@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: glebius
Date: Fri Jan 23 19:22:18 2015
New Revision: 277600
URL: https://svnweb.freebsd.org/changeset/base/277600

Log:
  Revert tiny part of r277456. Looks like we are stuck with 16-bit
  ifr_flags forever :(

Modified:
  projects/ifnet/sys/dev/virtio/network/if_vtnet.c
  projects/ifnet/sys/net/if.c
  projects/ifnet/sys/net/if.h

Modified: projects/ifnet/sys/dev/virtio/network/if_vtnet.c
==============================================================================
--- projects/ifnet/sys/dev/virtio/network/if_vtnet.c	Fri Jan 23 19:19:34 2015	(r277599)
+++ projects/ifnet/sys/dev/virtio/network/if_vtnet.c	Fri Jan 23 19:22:18 2015	(r277600)
@@ -3072,11 +3072,11 @@ vtnet_attach_disable_promisc(struct vtne
 	VTNET_CORE_LOCK(sc);
 	if ((sc->vtnet_flags & VTNET_FLAG_CTRL_RX) == 0) {
 		(void )if_drvioctl(SIOCGIFFLAGS, ifp, &ifr, curthread);
-		ifr.ifr_flagslow |= IFF_PROMISC;
+		ifr.ifr_flags |= IFF_PROMISC;
 		(void )if_drvioctl(SIOCSIFFLAGS, ifp, &ifr, curthread);
 	} else if (vtnet_set_promisc(sc, 0) != 0) {
 		(void )if_drvioctl(SIOCGIFFLAGS, ifp, &ifr, curthread);
-		ifr.ifr_flagslow |= IFF_PROMISC;
+		ifr.ifr_flags |= IFF_PROMISC;
 		(void )if_drvioctl(SIOCSIFFLAGS, ifp, &ifr, curthread);
 		device_printf(sc->vtnet_dev,
 		    "cannot disable default promiscuous mode\n");

Modified: projects/ifnet/sys/net/if.c
==============================================================================
--- projects/ifnet/sys/net/if.c	Fri Jan 23 19:19:34 2015	(r277599)
+++ projects/ifnet/sys/net/if.c	Fri Jan 23 19:22:18 2015	(r277600)
@@ -2302,8 +2302,14 @@ if_drvioctl(u_long cmd, struct ifnet *if
 		break;
 
 	case SIOCGIFFLAGS:
-		ifr->ifr_flagslow = ifp->if_flags & 0xffff;
+		ifr->ifr_flags = ifp->if_flags & 0xffff;
 		ifr->ifr_flagshigh = ifp->if_flags >> 16;
+		/*
+		 * Some software may care about IFF_RUNNING, so make
+		 * it happy.
+		 */
+		if (ifp->if_flags & IFF_UP)
+			ifr->ifr_flags |= IFF_RUNNING;
 		break;
 
 	case SIOCGIFCAP:
@@ -2406,7 +2412,7 @@ if_drvioctl(u_long cmd, struct ifnet *if
 		 * they come from userland in two parts, that
 		 * we need to swap.
 		 */
-		flags = (ifr->ifr_flagslow & 0xffff) |
+		flags = (ifr->ifr_flags & 0xffff) |
 		    (ifr->ifr_flagshigh << 16);
 		if ((flags & IFF_CANTCHANGE) !=
 		    (ifp->if_flags & IFF_CANTCHANGE))
@@ -2414,11 +2420,11 @@ if_drvioctl(u_long cmd, struct ifnet *if
 		/*
 		 * Pass new flags down to driver and see if it accepts them.
 		 */
-		ifr->ifr_flags = flags;
 		error = if_ioctl(ifp, cmd, data, td);
 		if (error)
 			return (error);
-		flags = ifr->ifr_flags;
+		flags = (ifr->ifr_flags & 0xffff) |
+		    (ifr->ifr_flagshigh << 16);
 		/*
 		 * Manage IFF_UP flip.
 		 */

Modified: projects/ifnet/sys/net/if.h
==============================================================================
--- projects/ifnet/sys/net/if.h	Fri Jan 23 19:19:34 2015	(r277599)
+++ projects/ifnet/sys/net/if.h	Fri Jan 23 19:22:18 2015	(r277600)
@@ -382,8 +382,7 @@ struct	ifreq {
 			uint32_t ifrucap_curcap;	/* current values */
 			uint64_t ifrucap_hwassist;	/* returned hwassist */
 		}	ifru_cap;
-		u_int	ifru_flags;
-		short	ifru_sflags[2];
+		short	ifru_flags[2];
 		short	ifru_index;
 		int	ifru_jid;
 		int	ifru_metric;
@@ -397,9 +396,8 @@ struct	ifreq {
 #define	ifr_dstaddr	ifr_ifru.ifru_dstaddr	/* other end of p-to-p link */
 #define	ifr_broadaddr	ifr_ifru.ifru_broadaddr	/* broadcast address */
 #define	ifr_buffer	ifr_ifru.ifru_buffer	/* user supplied buffer with its length */
-#define	ifr_flags	ifr_ifru.ifru_flags	/* flags (after fixup) */
-#define	ifr_flagslow	ifr_ifru.ifru_sflags[0]	/* flags (low 16 bits) */
-#define	ifr_flagshigh	ifr_ifru.ifru_sflags[1]	/* flags (high 16 bits) */
+#define	ifr_flags	ifr_ifru.ifru_flags[0]	/* flags (low 16 bits) */
+#define	ifr_flagshigh	ifr_ifru.ifru_flags[1]	/* flags (high 16 bits) */
 #define	ifr_jid		ifr_ifru.ifru_jid	/* jail/vnet */
 #define	ifr_metric	ifr_ifru.ifru_metric	/* metric */
 #define	ifr_mtu		ifr_ifru.ifru_mtu	/* mtu */



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