Some clean up to the cdce / cdcef and urndis ioctl handlers to bring things
in line with the other Ethernet drivers. no functional change.
OK?
Index: if_cdce.c
===================================================================
RCS file: /home/cvs/src/sys/dev/usb/if_cdce.c,v
retrieving revision 1.57
diff -u -p -r1.57 if_cdce.c
--- if_cdce.c 15 Nov 2013 10:17:39 -0000 1.57
+++ if_cdce.c 17 Nov 2013 05:31:47 -0000
@@ -528,23 +528,24 @@ cdce_ioctl(struct ifnet *ifp, u_long com
switch(command) {
case SIOCSIFADDR:
ifp->if_flags |= IFF_UP;
- cdce_init(sc);
- switch (ifa->ifa_addr->sa_family) {
- case AF_INET:
+ if (!(ifp->if_flags & IFF_RUNNING))
+ cdce_init(sc);
+#ifdef INET
+ if (ifa->ifa_addr->sa_family == AF_INET)
arp_ifinit(&sc->cdce_arpcom, ifa);
- break;
- }
+#endif
break;
case SIOCSIFFLAGS:
if (ifp->if_flags & IFF_UP) {
- if (!(ifp->if_flags & IFF_RUNNING))
+ if (ifp->if_flags & IFF_RUNNING)
+ error = ENETRESET;
+ else
cdce_init(sc);
} else {
if (ifp->if_flags & IFF_RUNNING)
cdce_stop(sc);
}
- error = 0;
break;
default:
@@ -579,9 +580,6 @@ cdce_init(void *xsc)
struct cdce_chain *c;
usbd_status err;
int s, i;
-
- if (ifp->if_flags & IFF_RUNNING)
- return;
s = splnet();
Index: if_cdcef.c
===================================================================
RCS file: /home/cvs/src/sys/dev/usb/if_cdcef.c,v
retrieving revision 1.31
diff -u -p -r1.31 if_cdcef.c
--- if_cdcef.c 11 Nov 2013 10:09:40 -0000 1.31
+++ if_cdcef.c 20 Nov 2013 03:06:34 -0000
@@ -477,23 +477,24 @@ cdcef_ioctl(struct ifnet *ifp, u_long co
switch (command) {
case SIOCSIFADDR:
ifp->if_flags |= IFF_UP;
- cdcef_init(sc);
- switch (ifa->ifa_addr->sa_family) {
- case AF_INET:
+ if (!(ifp->if_flags & IFF_RUNNING))
+ cdcef_init(sc);
+#ifdef INET
+ if (ifa->ifa_addr->sa_family == AF_INET)
arp_ifinit(&sc->sc_arpcom, ifa);
- break;
- }
+#endif
break;
case SIOCSIFFLAGS:
if (ifp->if_flags & IFF_UP) {
- if (!(ifp->if_flags & IFF_RUNNING))
+ if (ifp->if_flags & IFF_RUNNING)
+ error = ENETRESET;
+ else
cdcef_init(sc);
} else {
if (ifp->if_flags & IFF_RUNNING)
cdcef_stop(sc);
}
- error = 0;
break;
default:
@@ -528,10 +529,9 @@ cdcef_watchdog(struct ifnet *ifp)
void
cdcef_init(struct cdcef_softc *sc)
{
- int s;
struct ifnet *ifp = GET_IFP(sc);
- if (ifp->if_flags & IFF_RUNNING)
- return;
+ int s;
+
s = splnet();
ifp->if_flags |= IFF_RUNNING;
Index: if_urndis.c
===================================================================
RCS file: /home/cvs/src/sys/dev/usb/if_urndis.c,v
retrieving revision 1.43
diff -u -p -r1.43 if_urndis.c
--- if_urndis.c 15 Nov 2013 10:17:39 -0000 1.43
+++ if_urndis.c 20 Nov 2013 03:10:53 -0000
@@ -985,13 +985,9 @@ urndis_tx_list_init(struct urndis_softc
int
urndis_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
{
- struct urndis_softc *sc;
- struct ifaddr *ifa;
- int s, error;
-
- sc = ifp->if_softc;
- ifa = (struct ifaddr *)data;
- error = 0;
+ struct urndis_softc *sc = ifp->if_softc;
+ struct ifaddr *ifa = (struct ifaddr *)data;
+ int s, error = 0;
if (usbd_is_dying(sc->sc_udev))
return (EIO);
@@ -1001,24 +997,24 @@ urndis_ioctl(struct ifnet *ifp, u_long c
switch(command) {
case SIOCSIFADDR:
ifp->if_flags |= IFF_UP;
- urndis_init(sc);
-
- switch (ifa->ifa_addr->sa_family) {
- case AF_INET:
+ if (!(ifp->if_flags & IFF_RUNNING))
+ urndis_init(sc);
+#ifdef INET
+ if (ifa->ifa_addr->sa_family == AF_INET)
arp_ifinit(&sc->sc_arpcom, ifa);
- break;
- }
+#endif
break;
case SIOCSIFFLAGS:
if (ifp->if_flags & IFF_UP) {
- if (!(ifp->if_flags & IFF_RUNNING))
+ if (ifp->if_flags & IFF_RUNNING)
+ error = ENETRESET;
+ else
urndis_init(sc);
} else {
if (ifp->if_flags & IFF_RUNNING)
urndis_stop(sc);
}
- error = 0;
break;
default:
@@ -1054,14 +1050,9 @@ urndis_watchdog(struct ifnet *ifp)
void
urndis_init(struct urndis_softc *sc)
{
- struct ifnet *ifp;
+ struct ifnet *ifp = GET_IFP(sc);
int i, s;
usbd_status err;
-
-
- ifp = GET_IFP(sc);
- if (ifp->if_flags & IFF_RUNNING)
- return;
if (urndis_ctrl_init(sc) != RNDIS_STATUS_SUCCESS)
return;
--
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.