summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authordyoung <dyoung@NetBSD.org>2008-02-07 01:21:52 +0000
committerdyoung <dyoung@NetBSD.org>2008-02-07 01:21:52 +0000
commit2ccede0a9c78ce5a2ea80ccfebc140e543a8679c (patch)
treee75d5563bc5787696ff61b7cfdaf95c6ba77e6be /sys/dev
parent809c851d23f2ba54b7b479f2d05f03ee6c7994b7 (diff)
Start patching up the kernel so that a network driver always has
the opportunity to handle an ioctl before generic ifioctl handling occurs. This will ease extending the kernel and sharing of code between drivers. First steps: Make the signature of ifioctl_common() match struct ifinet->if_ioctl. Convert SIOCSIFCAP and SIOCSIFMTU to the new ifioctl() regime, throughout the kernel.
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/ic/elinkxl.c18
-rw-r--r--sys/dev/ic/gem.c18
-rw-r--r--sys/dev/ic/hme.c25
-rw-r--r--sys/dev/ic/i82557.c32
-rw-r--r--sys/dev/ic/midway.c12
-rw-r--r--sys/dev/ic/pdq_ifsubr.c11
-rw-r--r--sys/dev/ic/rtl8169.c26
-rw-r--r--sys/dev/ic/tropic.c8
-rw-r--r--sys/dev/ieee1394/if_fwip.c11
-rw-r--r--sys/dev/if_ndis/if_ndis.c23
-rw-r--r--sys/dev/marvell/if_gfe.c7
-rw-r--r--sys/dev/pci/cxgb_main.c28
-rw-r--r--sys/dev/pci/if_bge.c19
-rw-r--r--sys/dev/pci/if_bnx.c18
-rw-r--r--sys/dev/pci/if_de.c12
-rw-r--r--sys/dev/pci/if_dge.c32
-rw-r--r--sys/dev/pci/if_kse.c20
-rw-r--r--sys/dev/pci/if_lmc.c8
-rw-r--r--sys/dev/pci/if_msk.c7
-rw-r--r--sys/dev/pci/if_nfe.c22
-rw-r--r--sys/dev/pci/if_sip.c20
-rw-r--r--sys/dev/pci/if_sk.c20
-rw-r--r--sys/dev/pci/if_stge.c20
-rw-r--r--sys/dev/pci/if_ti.c30
-rw-r--r--sys/dev/pci/if_txp.c17
-rw-r--r--sys/dev/pci/if_vge.c20
-rw-r--r--sys/dev/pci/if_wm.c20
-rw-r--r--sys/dev/pci/if_xge.c20
-rw-r--r--sys/dev/ppbus/if_plip.c11
-rw-r--r--sys/dev/usb/if_aue.c10
-rw-r--r--sys/dev/usb/if_axe.c10
-rw-r--r--sys/dev/usb/if_cdce.c10
-rw-r--r--sys/dev/usb/if_cue.c10
-rw-r--r--sys/dev/usb/if_kue.c10
-rw-r--r--sys/dev/usb/if_upl.c8
35 files changed, 328 insertions, 265 deletions
diff --git a/sys/dev/ic/elinkxl.c b/sys/dev/ic/elinkxl.c
index de331185181..5a267bde3ca 100644
--- a/sys/dev/ic/elinkxl.c
+++ b/sys/dev/ic/elinkxl.c
@@ -1,4 +1,4 @@
-/* $NetBSD: elinkxl.c,v 1.99 2007/10/19 11:59:51 ad Exp $ */
+/* $NetBSD: elinkxl.c,v 1.100 2008/02/07 01:21:52 dyoung Exp $ */
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -37,7 +37,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: elinkxl.c,v 1.99 2007/10/19 11:59:51 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: elinkxl.c,v 1.100 2008/02/07 01:21:52 dyoung Exp $");
#include "bpfilter.h"
#include "rnd.h"
@@ -1509,15 +1509,19 @@ ex_ioctl(ifp, cmd, data)
}
/* FALLTHROUGH */
default:
- error = ether_ioctl(ifp, cmd, data);
- if (error == ENETRESET) {
+ if ((error = ether_ioctl(ifp, cmd, data)) != ENETRESET)
+ break;
+
+ error = 0;
+
+ if (cmd != SIOCADDMULTI && cmd != SIOCDELMULTI)
+ ;
+ else if (ifp->if_flags & IFF_RUNNING) {
/*
* Multicast list has changed; set the hardware filter
* accordingly.
*/
- if (ifp->if_flags & IFF_RUNNING)
- ex_set_mc(sc);
- error = 0;
+ ex_set_mc(sc);
}
break;
}
diff --git a/sys/dev/ic/gem.c b/sys/dev/ic/gem.c
index 09b6d137d11..3679845f236 100644
--- a/sys/dev/ic/gem.c
+++ b/sys/dev/ic/gem.c
@@ -1,4 +1,4 @@
-/* $NetBSD: gem.c,v 1.73 2008/02/01 11:03:19 jdc Exp $ */
+/* $NetBSD: gem.c,v 1.74 2008/02/07 01:21:53 dyoung Exp $ */
/*
*
@@ -37,7 +37,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: gem.c,v 1.73 2008/02/01 11:03:19 jdc Exp $");
+__KERNEL_RCSID(0, "$NetBSD: gem.c,v 1.74 2008/02/07 01:21:53 dyoung Exp $");
#include "opt_inet.h"
#include "bpfilter.h"
@@ -2515,15 +2515,19 @@ gem_ioctl(ifp, cmd, data)
#undef RESETIGN
/*FALLTHROUGH*/
default:
- error = ether_ioctl(ifp, cmd, data);
- if (error == ENETRESET) {
+ if ((error = ether_ioctl(ifp, cmd, data)) != ENETRESET)
+ break;
+
+ error = 0;
+
+ if (cmd != SIOCADDMULTI && cmd != SIOCDELMULTI)
+ ;
+ else if (ifp->if_flags & IFF_RUNNING) {
/*
* Multicast list has changed; set the hardware filter
* accordingly.
*/
- if (ifp->if_flags & IFF_RUNNING)
- gem_setladrf(sc);
- error = 0;
+ gem_setladrf(sc);
}
break;
}
diff --git a/sys/dev/ic/hme.c b/sys/dev/ic/hme.c
index 7c346576f3a..a4ff9dced79 100644
--- a/sys/dev/ic/hme.c
+++ b/sys/dev/ic/hme.c
@@ -1,4 +1,4 @@
-/* $NetBSD: hme.c,v 1.62 2008/01/21 11:32:12 dyoung Exp $ */
+/* $NetBSD: hme.c,v 1.63 2008/02/07 01:21:53 dyoung Exp $ */
/*-
* Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -41,7 +41,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hme.c,v 1.62 2008/01/21 11:32:12 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hme.c,v 1.63 2008/02/07 01:21:53 dyoung Exp $");
/* #define HMEDEBUG */
@@ -1483,23 +1483,22 @@ hme_ioctl(ifp, cmd, data)
break;
- case SIOCADDMULTI:
- case SIOCDELMULTI:
- case SIOCGIFMEDIA:
- case SIOCSIFMEDIA:
- if ((error = ether_ioctl(ifp, cmd, data)) == ENETRESET) {
+ default:
+ if ((error = ether_ioctl(ifp, cmd, data)) != ENETRESET)
+ break;
+
+ error = 0;
+
+ if (cmd != SIOCADDMULTI && cmd != SIOCDELMULTI)
+ ;
+ else if (ifp->if_flags & IFF_RUNNING) {
/*
* Multicast list has changed; set the hardware filter
* accordingly.
*/
- if (ifp->if_flags & IFF_RUNNING)
- hme_setladrf(sc);
- error = 0;
+ hme_setladrf(sc);
}
break;
- default:
- error = EINVAL;
- break;
}
sc->sc_if_flags = ifp->if_flags;
diff --git a/sys/dev/ic/i82557.c b/sys/dev/ic/i82557.c
index 4e7c37d7a5d..7731078bf25 100644
--- a/sys/dev/ic/i82557.c
+++ b/sys/dev/ic/i82557.c
@@ -1,4 +1,4 @@
-/* $NetBSD: i82557.c,v 1.110 2008/01/19 22:10:17 dyoung Exp $ */
+/* $NetBSD: i82557.c,v 1.111 2008/02/07 01:21:53 dyoung Exp $ */
/*-
* Copyright (c) 1997, 1998, 1999, 2001, 2002 The NetBSD Foundation, Inc.
@@ -73,7 +73,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i82557.c,v 1.110 2008/01/19 22:10:17 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i82557.c,v 1.111 2008/02/07 01:21:53 dyoung Exp $");
#include "bpfilter.h"
#include "rnd.h"
@@ -2089,20 +2089,22 @@ fxp_ioctl(struct ifnet *ifp, u_long cmd, void *data)
break;
default:
- error = ether_ioctl(ifp, cmd, data);
- if (error == ENETRESET) {
- if (ifp->if_flags & IFF_RUNNING) {
- /*
- * Multicast list has changed; set the
- * hardware filter accordingly.
- */
- if (sc->sc_txpending) {
- sc->sc_flags |= FXPF_WANTINIT;
- error = 0;
- } else
- error = fxp_init(ifp);
+ if ((error = ether_ioctl(ifp, cmd, data)) != ENETRESET)
+ break;
+
+ error = 0;
+
+ if (cmd != SIOCADDMULTI && cmd != SIOCDELMULTI)
+ ;
+ else if (ifp->if_flags & IFF_RUNNING) {
+ /*
+ * Multicast list has changed; set the
+ * hardware filter accordingly.
+ */
+ if (sc->sc_txpending) {
+ sc->sc_flags |= FXPF_WANTINIT;
} else
- error = 0;
+ error = fxp_init(ifp);
}
break;
}
diff --git a/sys/dev/ic/midway.c b/sys/dev/ic/midway.c
index 9ab95bd7411..67c4a01d82e 100644
--- a/sys/dev/ic/midway.c
+++ b/sys/dev/ic/midway.c
@@ -1,4 +1,4 @@
-/* $NetBSD: midway.c,v 1.77 2007/10/19 11:59:56 ad Exp $ */
+/* $NetBSD: midway.c,v 1.78 2008/02/07 01:21:53 dyoung Exp $ */
/* (sync'd to midway.c 1.68) */
/*
@@ -68,7 +68,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: midway.c,v 1.77 2007/10/19 11:59:56 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: midway.c,v 1.78 2008/02/07 01:21:53 dyoung Exp $");
#include "opt_natm.h"
@@ -1261,10 +1261,12 @@ void *data;
break;
}
#endif
- ifp->if_mtu = ifr->ifr_mtu;
+ if ((error = ifioctl_common(ifp, cmd, data)) == ENETRESET) {
+ error = 0;
/* XXXCDC: do we really need to reset on MTU size change? */
- en_reset(sc);
- en_init(sc);
+ en_reset(sc);
+ en_init(sc);
+ }
break;
#endif /* SIOCSIFMTU */
diff --git a/sys/dev/ic/pdq_ifsubr.c b/sys/dev/ic/pdq_ifsubr.c
index 1e4944c7566..95b19908d0f 100644
--- a/sys/dev/ic/pdq_ifsubr.c
+++ b/sys/dev/ic/pdq_ifsubr.c
@@ -1,4 +1,4 @@
-/* $NetBSD: pdq_ifsubr.c,v 1.50 2007/12/20 21:08:17 dyoung Exp $ */
+/* $NetBSD: pdq_ifsubr.c,v 1.51 2008/02/07 01:21:54 dyoung Exp $ */
/*-
* Copyright (c) 1995, 1996 Matt Thomas <matt@3am-software.com>
@@ -35,7 +35,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pdq_ifsubr.c,v 1.50 2007/12/20 21:08:17 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pdq_ifsubr.c,v 1.51 2008/02/07 01:21:54 dyoung Exp $");
#ifdef __NetBSD__
#include "opt_inet.h"
@@ -448,8 +448,8 @@ pdq_ifioctl(
}
case SIOCGIFADDR: {
struct ifreq *ifr = (struct ifreq *)data;
- memcpy((void *) ((struct sockaddr *)&ifr->ifr_data)->sa_data,
- (const void *) PDQ_LANADDR(sc), 6);
+ error = ifreq_setaddr(cmd, ifr,
+ (const struct sockaddr *)sc->sc_if.if_sadl);
break;
}
@@ -484,7 +484,8 @@ pdq_ifioctl(
error = EINVAL;
break;
}
- ifp->if_mtu = ifr->ifr_mtu;
+ if ((error = ifioctl_common(ifp, cmd, data)) == ENETRESET)
+ error = 0;
break;
}
#endif /* SIOCSIFMTU */
diff --git a/sys/dev/ic/rtl8169.c b/sys/dev/ic/rtl8169.c
index f297d6c63e6..4923e52fa32 100644
--- a/sys/dev/ic/rtl8169.c
+++ b/sys/dev/ic/rtl8169.c
@@ -1,4 +1,4 @@
-/* $NetBSD: rtl8169.c,v 1.95 2008/02/04 15:16:49 tsutsui Exp $ */
+/* $NetBSD: rtl8169.c,v 1.96 2008/02/07 01:21:54 dyoung Exp $ */
/*
* Copyright (c) 1997, 1998-2003
@@ -33,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rtl8169.c,v 1.95 2008/02/04 15:16:49 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rtl8169.c,v 1.96 2008/02/07 01:21:54 dyoung Exp $");
/* $FreeBSD: /repoman/r/ncvs/src/sys/dev/re/if_re.c,v 1.20 2004/04/11 20:34:08 ru Exp $ */
/*
@@ -1900,17 +1900,23 @@ re_ioctl(struct ifnet *ifp, u_long command, void *data)
switch (command) {
case SIOCSIFMTU:
- if (ifr->ifr_mtu > RE_JUMBO_MTU)
+ if (ifr->ifr_mtu < ETHERMIN || ifr->ifr_mtu > ETHERMTU_JUMBO)
error = EINVAL;
- ifp->if_mtu = ifr->ifr_mtu;
+ else if ((error = ifioctl_common(ifp, command, data)) == ENETRESET)
+ error = 0;
break;
default:
- error = ether_ioctl(ifp, command, data);
- if (error == ENETRESET) {
- if (ifp->if_flags & IFF_RUNNING)
- rtk_setmulti(sc);
- error = 0;
- }
+ if ((error = ether_ioctl(ifp, command, data)) != ENETRESET)
+ break;
+
+ error = 0;
+
+ if (command == SIOCSIFCAP)
+ error = (*ifp->if_init)(ifp);
+ else if (command != SIOCADDMULTI && command != SIOCDELMULTI)
+ ;
+ else if (ifp->if_flags & IFF_RUNNING)
+ rtk_setmulti(sc);
break;
}
diff --git a/sys/dev/ic/tropic.c b/sys/dev/ic/tropic.c
index f1e9ea6a1d1..88cd34924c8 100644
--- a/sys/dev/ic/tropic.c
+++ b/sys/dev/ic/tropic.c
@@ -1,4 +1,4 @@
-/* $NetBSD: tropic.c,v 1.32 2007/10/19 12:00:03 ad Exp $ */
+/* $NetBSD: tropic.c,v 1.33 2008/02/07 01:21:54 dyoung Exp $ */
/*
* Ported to NetBSD by Onno van der Linden
@@ -34,7 +34,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tropic.c,v 1.32 2007/10/19 12:00:03 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tropic.c,v 1.33 2008/02/07 01:21:54 dyoung Exp $");
#include "opt_inet.h"
#include "bpfilter.h"
@@ -1608,8 +1608,8 @@ void *data;
case SIOCSIFMTU:
if (ifr->ifr_mtu > sc->sc_maxmtu)
error = EINVAL;
- else
- ifp->if_mtu = ifr->ifr_mtu;
+ else if ((error = ifioctl_common(ifp, cmd, data)) == ENETRESET)
+ error = 0;
break;
#endif
default:
diff --git a/sys/dev/ieee1394/if_fwip.c b/sys/dev/ieee1394/if_fwip.c
index 377a6f30a34..36cc3033a75 100644
--- a/sys/dev/ieee1394/if_fwip.c
+++ b/sys/dev/ieee1394/if_fwip.c
@@ -1,4 +1,4 @@
-/* $NetBSD: if_fwip.c,v 1.12 2007/12/11 11:34:09 lukem Exp $ */
+/* $NetBSD: if_fwip.c,v 1.13 2008/02/07 01:21:54 dyoung Exp $ */
/*-
* Copyright (c) 2004
* Doug Rabson
@@ -38,7 +38,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_fwip.c,v 1.12 2007/12/11 11:34:09 lukem Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_fwip.c,v 1.13 2008/02/07 01:21:54 dyoung Exp $");
#ifdef HAVE_KERNEL_OPTION_HEADERS
#include "opt_device_polling.h"
@@ -539,7 +539,7 @@ static int
fwip_ioctl(struct ifnet *ifp, u_long cmd, void *data)
{
IF_IOCTL_START(fwip, fwip);
- int s, error;
+ int s, error = 0;
switch (cmd) {
case SIOCSIFFLAGS:
@@ -565,6 +565,9 @@ fwip_ioctl(struct ifnet *ifp, u_long cmd, void *data)
case SIOCDELMULTI:
break;
case SIOCSIFCAP:
+ if ((error = FIREWIRE_IOCTL(ifp, cmd, data)) != ENETRESET)
+ break;
+ error = 0;
#ifdef DEVICE_POLLING
{
struct ifreq *ifr = (struct ifreq *) data;
@@ -611,7 +614,7 @@ fwip_ioctl(struct ifnet *ifp, u_long cmd, void *data)
#endif
}
- return (0);
+ return error;
}
static void
diff --git a/sys/dev/if_ndis/if_ndis.c b/sys/dev/if_ndis/if_ndis.c
index 8d50ac93f76..c0e8e91cd45 100644
--- a/sys/dev/if_ndis/if_ndis.c
+++ b/sys/dev/if_ndis/if_ndis.c
@@ -35,7 +35,7 @@
__FBSDID("$FreeBSD: src/sys/dev/if_ndis/if_ndis.c,v 1.69.2.6 2005/03/31 04:24:36 wpaul Exp $");
#endif
#ifdef __NetBSD__
-__KERNEL_RCSID(0, "$NetBSD: if_ndis.c,v 1.16 2007/12/20 21:08:18 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ndis.c,v 1.17 2008/02/07 01:21:54 dyoung Exp $");
#endif
#ifdef __FreeBSD__
@@ -2607,11 +2607,7 @@ ndis_ioctl(ifp, command, data)
case SIOCGIFMEDIA:
case SIOCSIFMEDIA:
if (sc->ndis_80211) {
-#ifdef __FreeBSD__
- error = ieee80211_ioctl(ifp, command, data);
-#else /* __NetBSD__ */
error = ieee80211_ioctl(&sc->ic, command, data);
-#endif
if (error == ENETRESET) {
ndis_setstate_80211(sc);
/*ndis_init(sc);*/
@@ -2621,19 +2617,10 @@ ndis_ioctl(ifp, command, data)
error = ifmedia_ioctl(ifp, ifr, &sc->ifmedia, command);
break;
case SIOCSIFCAP:
-/* TODO: Probrably more needs to be done for SIOCSIFCAP */
-#ifdef __FreeBSD__
- ifp->if_capenable = ifr->ifr_reqcap;
-/*
- * TODO: I couldn't find any equivilent to ifreq.ifr_reqcap for NetBSD, I'm
- * not sure if TODO we need it or not
- */
- if (ifp->if_capenable & IFCAP_TXCSUM)
- ifp->if_hwassist = sc->ndis_hwassist;
- else
- ifp->if_hwassist = 0;
-#endif
- ndis_set_offload(sc);
+ if ((error = ether_ioctl(ifp, cmd, data)) == ENETRESET) {
+ ndis_set_offload(sc);
+ error = 0;
+ }
break;
case SIOCGIFGENERIC:
case SIOCSIFGENERIC:
diff --git a/sys/dev/marvell/if_gfe.c b/sys/dev/marvell/if_gfe.c
index a5a0ea9e6aa..d726c8981d2 100644
--- a/sys/dev/marvell/if_gfe.c
+++ b/sys/dev/marvell/if_gfe.c
@@ -1,4 +1,4 @@
-/* $NetBSD: if_gfe.c,v 1.27 2008/01/19 22:10:18 dyoung Exp $ */
+/* $NetBSD: if_gfe.c,v 1.28 2008/02/07 01:21:54 dyoung Exp $ */
/*
* Copyright (c) 2002 Allegro Networks, Inc., Wasabi Systems, Inc.
@@ -42,7 +42,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_gfe.c,v 1.27 2008/01/19 22:10:18 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_gfe.c,v 1.28 2008/02/07 01:21:54 dyoung Exp $");
#include "opt_inet.h"
#include "bpfilter.h"
@@ -485,7 +485,8 @@ gfe_ifioctl(struct ifnet *ifp, u_long cmd, void *data)
error = EINVAL;
break;
}
- ifp->if_mtu = ifr->ifr_mtu;
+ if ((error = ifioctl_common(ifp, cmd, data)) == ENETRESET)
+ error = 0;
break;
default:
diff --git a/sys/dev/pci/cxgb_main.c b/sys/dev/pci/cxgb_main.c
index 68d58afe53d..f9f1dc3df78 100644
--- a/sys/dev/pci/cxgb_main.c
+++ b/sys/dev/pci/cxgb_main.c
@@ -29,7 +29,7 @@ POSSIBILITY OF SUCH DAMAGE.
#include <sys/cdefs.h>
#ifdef __NetBSD__
-__KERNEL_RCSID(0, "$NetBSD: cxgb_main.c,v 1.10 2008/01/17 06:03:22 jklos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cxgb_main.c,v 1.11 2008/02/07 01:21:55 dyoung Exp $");
#endif
#ifdef __FreeBSD__
__FBSDID("$FreeBSD: src/sys/dev/cxgb/cxgb_main.c,v 1.36 2007/09/11 23:49:27 kmacy Exp $");
@@ -2313,13 +2313,16 @@ static int
cxgb_set_mtu(struct port_info *p, int mtu)
{
struct ifnet *ifp = p->ifp;
+ struct ifreq ifr;
int error = 0;
+ ifr.ifr_mtu = mtu;
+
if ((mtu < ETHERMIN) || (mtu > ETHER_MAX_LEN_JUMBO))
error = EINVAL;
- else if (ifp->if_mtu != mtu) {
+ else if ((error = ifioctl_common(ifp, SIOCSIFMTU, &ifr)) == ENETRESET) {
+ error = 0;
PORT_LOCK(p);
- ifp->if_mtu = mtu;
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
callout_stop(&p->adapter->cxgb_tick_ch);
cxgb_stop_locked(p);
@@ -2397,27 +2400,19 @@ cxgb_ioctl(struct ifnet *ifp, unsigned long command, void *data)
error = ifmedia_ioctl(ifp, ifr, &p->media, command);
printf("SIOCGIFMEDIA: error=%d\n", error);
break;
+#ifdef __FreeBSD__
case SIOCSIFCAP:
printf("SIOCSIFCAP:\n");
PORT_LOCK(p);
-#ifdef __FreeBSD__
mask = ifr->ifr_reqcap ^ ifp->if_capenable;
-#endif
-#ifdef __NetBSD__
- mask = ifp->if_capenable;
-#endif
if (mask & IFCAP_TXCSUM) {
if (IFCAP_TXCSUM & ifp->if_capenable) {
ifp->if_capenable &= ~(IFCAP_TXCSUM|IFCAP_TSO4);
-#ifdef __FreeBSD__
ifp->if_hwassist &= ~(CSUM_TCP | CSUM_UDP
| CSUM_TSO);
-#endif
} else {
ifp->if_capenable |= IFCAP_TXCSUM;
-#ifdef __FreeBSD__
ifp->if_hwassist |= (CSUM_TCP | CSUM_UDP);
-#endif
}
} else if (mask & IFCAP_RXCSUM) {
if (IFCAP_RXCSUM & ifp->if_capenable) {
@@ -2429,14 +2424,10 @@ cxgb_ioctl(struct ifnet *ifp, unsigned long command, void *data)
if (mask & IFCAP_TSO4) {
if (IFCAP_TSO4 & ifp->if_capenable) {
ifp->if_capenable &= ~IFCAP_TSO4;
-#ifdef __FreeBSD__
ifp->if_hwassist &= ~CSUM_TSO;
-#endif
} else if (IFCAP_TXCSUM & ifp->if_capenable) {
ifp->if_capenable |= IFCAP_TSO4;
-#ifdef __FreeBSD__
ifp->if_hwassist |= CSUM_TSO;
-#endif
} else {
if (cxgb_debug)
printf("cxgb requires tx checksum offload"
@@ -2446,11 +2437,14 @@ cxgb_ioctl(struct ifnet *ifp, unsigned long command, void *data)
}
PORT_UNLOCK(p);
break;
+#endif /* __FreeBSD__ */
default:
printf("Dir = %x Len = %x Group = '%c' Num = %x\n",
(unsigned int)(command&0xe0000000)>>28, (unsigned int)(command&0x1fff0000)>>16,
(unsigned int)(command&0xff00)>>8, (unsigned int)command&0xff);
- error = ether_ioctl(ifp, command, data);
+ if ((error = ether_ioctl(ifp, command, data)) != ENETRESET)
+ break;
+ error = 0;
break;
}
return (error);
diff --git a/sys/dev/pci/if_bge.c b/sys/dev/pci/if_bge.c
index 49003581fb8..8f6be9f6477 100644
--- a/sys/dev/pci/if_bge.c
+++ b/sys/dev/pci/if_bge.c
@@ -1,4 +1,4 @@
-/* $NetBSD: if_bge.c,v 1.144 2008/02/04 21:44:35 mlelstv Exp $ */
+/* $NetBSD: if_bge.c,v 1.145 2008/02/07 01:21:55 dyoung Exp $ */
/*
* Copyright (c) 2001 Wind River Systems
@@ -79,7 +79,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_bge.c,v 1.144 2008/02/04 21:44:35 mlelstv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_bge.c,v 1.145 2008/02/07 01:21:55 dyoung Exp $");
#include "bpfilter.h"
#include "vlan.h"
@@ -4171,12 +4171,15 @@ bge_ioctl(struct ifnet *ifp, u_long command, void *data)
}
break;
default:
- error = ether_ioctl(ifp, command, data);
- if (error == ENETRESET) {
- if (ifp->if_flags & IFF_RUNNING)
- bge_setmulti(sc);
- error = 0;
- }
+ if ((error = ether_ioctl(ifp, command, data)) != ENETRESET)
+ break;
+
+ error = 0;
+
+ if (command != SIOCADDMULTI && command != SIOCDELMULTI)
+ ;
+ else if (ifp->if_flags & IFF_RUNNING)
+ bge_setmulti(sc);
break;
}
diff --git a/sys/dev/pci/if_bnx.c b/sys/dev/pci/if_bnx.c
index ed8971a301b..88020a1f6bf 100644
--- a/sys/dev/pci/if_bnx.c
+++ b/sys/dev/pci/if_bnx.c
@@ -1,4 +1,4 @@
-/* $NetBSD: if_bnx.c,v 1.17 2008/02/06 16:50:38 joerg Exp $ */
+/* $NetBSD: if_bnx.c,v 1.18 2008/02/07 01:21:55 dyoung Exp $ */
/* $OpenBSD: if_bnx.c,v 1.43 2007/01/30 03:21:10 krw Exp $ */
/*-
@@ -35,7 +35,7 @@
#if 0
__FBSDID("$FreeBSD: src/sys/dev/bce/if_bce.c,v 1.3 2006/04/13 14:12:26 ru Exp $");
#endif
-__KERNEL_RCSID(0, "$NetBSD: if_bnx.c,v 1.17 2008/02/06 16:50:38 joerg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_bnx.c,v 1.18 2008/02/07 01:21:55 dyoung Exp $");
/*
* The following controllers are supported by this driver:
@@ -687,7 +687,7 @@ bnx_attach(device_t parent, device_t self, void *aux)
ifmedia_init(&sc->bnx_mii.mii_media, 0, ether_mediachange,
ether_mediastatus);
mii_attach(self, &sc->bnx_mii, 0xffffffff,
- MII_PHY_ANY, MII_OFFSET_ANY, 0);
+ MII_PHY_ANY, MII_OFFSET_ANY, MIIF_FORCEANEG);
if (LIST_EMPTY(&sc->bnx_mii.mii_phys)) {
aprint_error_dev(self, "no PHY found!\n");
@@ -4342,14 +4342,16 @@ bnx_ioctl(struct ifnet *ifp, u_long command, void *data)
break;
default:
- error = ether_ioctl(ifp, command, data);
- if (error != ENETRESET)
+ if ((error = ether_ioctl(ifp, command, data)) != ENETRESET)
break;
+
error = 0;
- if (command == SIOCADDMULTI || command == SIOCDELMULTI) {
+
+ if (command != SIOCADDMULTI && command && SIOCDELMULTI)
+ ;
+ else if (ifp->if_flags & IFF_RUNNING) {
/* reload packet filter if running */
- if (ifp->if_flags & IFF_RUNNING)
- bnx_set_rx_mode(sc);
+ bnx_set_rx_mode(sc);
}
break;
}
diff --git a/sys/dev/pci/if_de.c b/sys/dev/pci/if_de.c
index d8044c5ffcd..74106998918 100644
--- a/sys/dev/pci/if_de.c
+++ b/sys/dev/pci/if_de.c
@@ -1,4 +1,4 @@
-/* $NetBSD: if_de.c,v 1.126 2007/10/19 12:00:44 ad Exp $ */
+/* $NetBSD: if_de.c,v 1.127 2008/02/07 01:21:55 dyoung Exp $ */
/*-
* Copyright (c) 1994-1997 Matt Thomas (matt@3am-software.com)
@@ -37,7 +37,7 @@
* board which support 21040, 21041, or 21140 (mostly).
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_de.c,v 1.126 2007/10/19 12:00:44 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_de.c,v 1.127 2008/02/07 01:21:55 dyoung Exp $");
#define TULIP_HDR_DATA
@@ -4859,11 +4859,13 @@ tulip_ifioctl(
error = EINVAL;
break;
}
- ifp->if_mtu = ifr->ifr_mtu;
+ if ((error = ifioctl_common(ifp, cmd, data)) == ENETRESET) {
#ifdef BIG_PACKET
- tulip_reset(sc);
- tulip_init(sc);
+ tulip_reset(sc);
+ tulip_init(sc);
#endif
+ error = 0;
+ }
break;
#endif /* SIOCSIFMTU */
diff --git a/sys/dev/pci/if_dge.c b/sys/dev/pci/if_dge.c
index c7a37987e7b..5d584bc678f 100644
--- a/sys/dev/pci/if_dge.c
+++ b/sys/dev/pci/if_dge.c
@@ -1,4 +1,4 @@
-/* $NetBSD: if_dge.c,v 1.18 2007/11/07 00:23:18 ad Exp $ */
+/* $NetBSD: if_dge.c,v 1.19 2008/02/07 01:21:56 dyoung Exp $ */
/*
* Copyright (c) 2004, SUNET, Swedish University Computer Network.
@@ -80,7 +80,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_dge.c,v 1.18 2007/11/07 00:23:18 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_dge.c,v 1.19 2008/02/07 01:21:56 dyoung Exp $");
#include "bpfilter.h"
#include "rnd.h"
@@ -1422,14 +1422,14 @@ dge_ioctl(struct ifnet *ifp, u_long cmd, void *data)
break;
case SIOCSIFMTU:
- if (ifr->ifr_mtu < ETHERMIN || ifr->ifr_mtu > DGE_MAX_MTU) {
+ if (ifr->ifr_mtu < ETHERMIN || ifr->ifr_mtu > DGE_MAX_MTU)
error = EINVAL;
- } else {
+ else if ((error = ifioctl_common(ifp, cmd, data)) != ENETRESET)
+ break;
+ else if (ifp->if_flags & IFF_UP)
+ error = (*ifp->if_init)(ifp);
+ else
error = 0;
- ifp->if_mtu = ifr->ifr_mtu;
- if (ifp->if_flags & IFF_UP)
- error = (*ifp->if_init)(ifp);
- }
break;
case SIOCSIFFLAGS:
@@ -1454,15 +1454,21 @@ dge_ioctl(struct ifnet *ifp, u_long cmd, void *data)
}
/* FALLTHROUGH */
default:
- error = ether_ioctl(ifp, cmd, data);
- if (error == ENETRESET) {
+ if ((error = ether_ioctl(ifp, cmd, data)) != ENETRESET)
+ break;
+
+ error = 0;
+
+ if (cmd == SIOCSIFCAP)
+ error = (*ifp->if_init)(ifp);
+ else if (cmd != SIOCADDMULTI && cmd != SIOCDELMULTI)
+ ;
+ else if (ifp->if_flags & IFF_RUNNING) {
/*
* Multicast list has changed; set the hardware filter
* accordingly.
*/
- if (ifp->if_flags & IFF_RUNNING)
- dge_set_filter(sc);
- error = 0;
+ dge_set_filter(sc);
}
break;
}
diff --git a/sys/dev/pci/if_kse.c b/sys/dev/pci/if_kse.c
index 7e1eff8c6b5..d2fb87d045f 100644
--- a/sys/dev/pci/if_kse.c
+++ b/sys/dev/pci/if_kse.c
@@ -1,4 +1,4 @@
-/* $NetBSD: if_kse.c,v 1.11 2007/11/16 10:31:57 nisimura Exp $ */
+/* $NetBSD: if_kse.c,v 1.12 2008/02/07 01:21:56 dyoung Exp $ */
/*
* Copyright (c) 2006 Tohru Nishimura
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_kse.c,v 1.11 2007/11/16 10:31:57 nisimura Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_kse.c,v 1.12 2008/02/07 01:21:56 dyoung Exp $");
#include "bpfilter.h"
@@ -648,15 +648,21 @@ kse_ioctl(struct ifnet *ifp, u_long cmd, void *data)
break;
default:
- error = ether_ioctl(ifp, cmd, data);
- if (cmd == ENETRESET) {
+ if ((error = ether_ioctl(ifp, cmd, data)) != ENETRESET)
+ break;
+
+ error = 0;
+
+ if (cmd == SIOCSIFCAP)
+ error = (*ifp->if_init)(ifp);
+ if (cmd != SIOCADDMULTI && cmd != SIOCDELMULTI)
+ ;
+ else if (ifp->if_flags & IFF_RUNNING) {
/*
* Multicast list has changed; set the hardware filter
* accordingly.
*/
- if (ifp->if_flags & IFF_RUNNING)
- kse_set_filter(sc);
- error = 0;
+ kse_set_filter(sc);
}
break;
}
diff --git a/sys/dev/pci/if_lmc.c b/sys/dev/pci/if_lmc.c
index e51bab9ace7..19e19b1a38c 100644
--- a/sys/dev/pci/if_lmc.c
+++ b/sys/dev/pci/if_lmc.c
@@ -1,4 +1,4 @@
-/* $NetBSD: if_lmc.c,v 1.39 2008/01/10 08:50:52 dyoung Exp $ */
+/* $NetBSD: if_lmc.c,v 1.40 2008/02/07 01:21:56 dyoung Exp $ */
/*-
* Copyright (c) 2002-2006 David Boggs. <boggs@boggs.palo-alto.ca.us>
@@ -142,7 +142,7 @@
#if defined(__NetBSD__)
# include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_lmc.c,v 1.39 2008/01/10 08:50:52 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_lmc.c,v 1.40 2008/02/07 01:21:56 dyoung Exp $");
# include <sys/param.h> /* OS version */
/* -DLKM is passed on the compiler command line */
# include "opt_inet.h" /* INET6, INET */
@@ -3559,8 +3559,8 @@ rawip_ioctl(softc_t *sc, u_long cmd, void *data)
case SIOCSIFMTU:
if ((ifr->ifr_mtu < 72) || (ifr->ifr_mtu > 65535))
error = EINVAL;
- else
- sc->ifp->if_mtu = ifr->ifr_mtu;
+ else if ((error = ifioctl_common(sc->ifp, cmd, data)) == ENETRESET)
+ error = 0;
break;
default:
error = EINVAL;
diff --git a/sys/dev/pci/if_msk.c b/sys/dev/pci/if_msk.c
index 71480575e0a..efe24476615 100644
--- a/sys/dev/pci/if_msk.c
+++ b/sys/dev/pci/if_msk.c
@@ -1,4 +1,4 @@
-/* $NetBSD: if_msk.c,v 1.15 2008/01/19 22:10:18 dyoung Exp $ */
+/* $NetBSD: if_msk.c,v 1.16 2008/02/07 01:21:56 dyoung Exp $ */
/* $OpenBSD: if_msk.c,v 1.42 2007/01/17 02:43:02 krw Exp $ */
/*
@@ -52,7 +52,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_msk.c,v 1.15 2008/01/19 22:10:18 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_msk.c,v 1.16 2008/02/07 01:21:56 dyoung Exp $");
#include "bpfilter.h"
#include "rnd.h"
@@ -706,7 +706,8 @@ msk_ioctl(struct ifnet *ifp, u_long command, void *data)
error = EINVAL;
} else if (ifr->ifr_mtu > ETHERMTU)
error = EINVAL;
- ifp->if_mtu = ifr->ifr_mtu;
+ else if ((error = ifioctl_common(ifp, command, data)) == ENETRESET)
+ error = 0;
break;
default:
DPRINTFN(2, ("msk_ioctl ETHER\n"));
diff --git a/sys/dev/pci/if_nfe.c b/sys/dev/pci/if_nfe.c
index c321a421e1a..21d21212003 100644
--- a/sys/dev/pci/if_nfe.c
+++ b/sys/dev/pci/if_nfe.c
@@ -1,4 +1,4 @@
-/* $NetBSD: if_nfe.c,v 1.27 2008/01/26 14:13:06 tsutsui Exp $ */
+/* $NetBSD: if_nfe.c,v 1.28 2008/02/07 01:21:56 dyoung Exp $ */
/* $OpenBSD: if_nfe.c,v 1.52 2006/03/02 09:04:00 jsg Exp $ */
/*-
@@ -21,7 +21,7 @@
/* Driver for NVIDIA nForce MCP Fast Ethernet and Gigabit Ethernet */
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_nfe.c,v 1.27 2008/01/26 14:13:06 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_nfe.c,v 1.28 2008/02/07 01:21:56 dyoung Exp $");
#include "opt_inet.h"
#include "bpfilter.h"
@@ -584,8 +584,8 @@ nfe_ioctl(struct ifnet *ifp, u_long cmd, void *data)
(!(sc->sc_flags & NFE_USE_JUMBO) &&
ifr->ifr_mtu > ETHERMTU))
error = EINVAL;
- else if (ifp->if_mtu != ifr->ifr_mtu)
- ifp->if_mtu = ifr->ifr_mtu;
+ else if ((error = ifioctl_common(ifp, cmd, data)) == ENETRESET)
+ error = 0;
break;
case SIOCSIFFLAGS:
if (ifp->if_flags & IFF_UP) {
@@ -607,11 +607,15 @@ nfe_ioctl(struct ifnet *ifp, u_long cmd, void *data)
sc->sc_if_flags = ifp->if_flags;
break;
default:
- if ((error = ether_ioctl(ifp, cmd, data)) == ENETRESET) {
- if (ifp->if_flags & IFF_RUNNING)
- nfe_setmulti(sc);
- error = 0;
- }
+ if ((error = ether_ioctl(ifp, cmd, data)) != ENETRESET)
+ break;
+
+ error = 0;
+
+ if (cmd != SIOCADDMULTI && cmd != SIOCDELMULTI)
+ ;
+ else if (ifp->if_flags & IFF_RUNNING)
+ nfe_setmulti(sc);
break;
}
diff --git a/sys/dev/pci/if_sip.c b/sys/dev/pci/if_sip.c
index 716971847f3..499a0f68282 100644
--- a/sys/dev/pci/if_sip.c
+++ b/sys/dev/pci/if_sip.c
@@ -1,4 +1,4 @@
-/* $NetBSD: if_sip.c,v 1.126 2008/01/19 22:23:35 dyoung Exp $ */
+/* $NetBSD: if_sip.c,v 1.127 2008/02/07 01:21:57 dyoung Exp $ */
/*-
* Copyright (c) 2001, 2002 The NetBSD Foundation, Inc.
@@ -80,7 +80,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_sip.c,v 1.126 2008/01/19 22:23:35 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_sip.c,v 1.127 2008/02/07 01:21:57 dyoung Exp $");
#include "bpfilter.h"
#include "rnd.h"
@@ -1790,15 +1790,21 @@ sipcom_ioctl(struct ifnet *ifp, u_long cmd, void *data)
/* FALLTHROUGH */
ethioctl:
default:
- error = ether_ioctl(ifp, cmd, data);
- if (error == ENETRESET) {
+ if ((error = ether_ioctl(ifp, cmd, data)) != ENETRESET)
+ break;
+
+ error = 0;
+
+ if (cmd == SIOCSIFCAP)
+ error = (*ifp->if_init)(ifp);
+ else if (cmd != SIOCADDMULTI && cmd != SIOCDELMULTI)
+ ;
+ else if (ifp->if_flags & IFF_RUNNING) {
/*
* Multicast list has changed; set the hardware filter
* accordingly.
*/
- if (ifp->if_flags & IFF_RUNNING)
- (*sc->sc_model->sip_variant->sipv_set_filter)(sc);
- error = 0;
+ (*sc->sc_model->sip_variant->sipv_set_filter)(sc);
}
break;
}
diff --git a/sys/dev/pci/if_sk.c b/sys/dev/pci/if_sk.c
index 75ba44f88bd..28b87a375dc 100644
--- a/sys/dev/pci/if_sk.c
+++ b/sys/dev/pci/if_sk.c
@@ -1,4 +1,4 @@
-/* $NetBSD: if_sk.c,v 1.46 2008/01/19 22:10:18 dyoung Exp $ */
+/* $NetBSD: if_sk.c,v 1.47 2008/02/07 01:21:57 dyoung Exp $ */
/*-
* Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -122,7 +122,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_sk.c,v 1.46 2008/01/19 22:10:18 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_sk.c,v 1.47 2008/02/07 01:21:57 dyoung Exp $");
#include "bpfilter.h"
#include "rnd.h"
@@ -1047,14 +1047,16 @@ sk_ioctl(struct ifnet *ifp, u_long command, void *data)
default:
DPRINTFN(2, ("sk_ioctl ETHER\n"));
- error = ether_ioctl(ifp, command, data);
+ if ((error = ether_ioctl(ifp, command, data)) != ENETRESET)
+ break;
- if ( error == ENETRESET) {
- if (ifp->if_flags & IFF_RUNNING) {
- sk_setmulti(sc_if);
- DPRINTFN(2, ("sk_ioctl setmulti called\n"));
- }
- error = 0;
+ error = 0;
+
+ if (command != SIOCADDMULTI && command != SIOCDELMULTI)
+ ;
+ else if (ifp->if_flags & IFF_RUNNING) {
+ sk_setmulti(sc_if);
+ DPRINTFN(2, ("sk_ioctl setmulti called\n"));
}
break;
}
diff --git a/sys/dev/pci/if_stge.c b/sys/dev/pci/if_stge.c
index 0f1084dd732..ff2646e43b7 100644
--- a/sys/dev/pci/if_stge.c
+++ b/sys/dev/pci/if_stge.c
@@ -1,4 +1,4 @@
-/* $NetBSD: if_stge.c,v 1.40 2008/01/19 22:10:19 dyoung Exp $ */
+/* $NetBSD: if_stge.c,v 1.41 2008/02/07 01:21:57 dyoung Exp $ */
/*-
* Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -42,7 +42,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_stge.c,v 1.40 2008/01/19 22:10:19 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_stge.c,v 1.41 2008/02/07 01:21:57 dyoung Exp $");
#include "bpfilter.h"
@@ -1023,13 +1023,17 @@ stge_ioctl(struct ifnet *ifp, u_long cmd, void *data)
error = ether_ioctl(ifp, cmd, data);
if (error == ENETRESET) {
- /*
- * Multicast list has changed; set the hardware filter
- * accordingly.
- */
- if (ifp->if_flags & IFF_RUNNING)
- stge_set_filter(sc);
error = 0;
+
+ if (cmd != SIOCADDMULTI && cmd != SIOCDELMULTI)
+ ;
+ else if (ifp->if_flags & IFF_RUNNING) {
+ /*
+ * Multicast list has changed; set the hardware filter
+ * accordingly.
+ */
+ stge_set_filter(sc);
+ }
}
/* Try to get more packets going. */
diff --git a/sys/dev/pci/if_ti.c b/sys/dev/pci/if_ti.c
index 6be0c228258..2aac05ce292 100644
--- a/sys/dev/pci/if_ti.c
+++ b/sys/dev/pci/if_ti.c
@@ -1,4 +1,4 @@
-/* $NetBSD: if_ti.c,v 1.79 2007/11/07 00:23:19 ad Exp $ */
+/* $NetBSD: if_ti.c,v 1.80 2008/02/07 01:21:57 dyoung Exp $ */
/*
* Copyright (c) 1997, 1998, 1999
@@ -81,7 +81,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_ti.c,v 1.79 2007/11/07 00:23:19 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ti.c,v 1.80 2008/02/07 01:21:57 dyoung Exp $");
#include "bpfilter.h"
#include "opt_inet.h"
@@ -2745,11 +2745,11 @@ ti_ioctl(struct ifnet *ifp, u_long command, void *data)
error = ti_ether_ioctl(ifp, command, data);
break;
case SIOCSIFMTU:
- if (ifr->ifr_mtu > ETHERMTU_JUMBO)
+ if (ifr->ifr_mtu < ETHERMIN || ifr->ifr_mtu > ETHERMTU_JUMBO)
error = EINVAL;
- else {
- ifp->if_mtu = ifr->ifr_mtu;
+ else if ((error = ifioctl_common(ifp, command, data)) == ENETRESET){
ti_init(sc);
+ error = 0;
}
break;
case SIOCSIFFLAGS:
@@ -2782,20 +2782,22 @@ ti_ioctl(struct ifnet *ifp, u_long command, void *data)
sc->ti_if_flags = ifp->if_flags;
error = 0;
break;
- case SIOCADDMULTI:
- case SIOCDELMULTI:
- if ((error = ether_ioctl(ifp, command, data)) == ENETRESET) {
- if (ifp->if_flags & IFF_RUNNING)
- ti_setmulti(sc);
- error = 0;
- }
- break;
case SIOCSIFMEDIA:
case SIOCGIFMEDIA:
error = ifmedia_ioctl(ifp, ifr, &sc->ifmedia, command);
break;
default:
- error = EINVAL;
+ if ((error = ether_ioctl(ifp, command, data)) != ENETRESET)
+ break;
+
+ error = 0;
+
+ if (command == SIOCSIFCAP)
+ ti_init(sc);
+ else if (command != SIOCADDMULTI && command != SIOCDELMULTI)
+ ;
+ else if (ifp->if_flags & IFF_RUNNING)
+ ti_setmulti(sc);
break;
}
diff --git a/sys/dev/pci/if_txp.c b/sys/dev/pci/if_txp.c
index af993b30271..ffa4d30477c 100644
--- a/sys/dev/pci/if_txp.c
+++ b/sys/dev/pci/if_txp.c
@@ -1,4 +1,4 @@
-/* $NetBSD: if_txp.c,v 1.22 2007/10/19 12:00:49 ad Exp $ */
+/* $NetBSD: if_txp.c,v 1.23 2008/02/07 01:21:57 dyoung Exp $ */
/*
* Copyright (c) 2001
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_txp.c,v 1.22 2007/10/19 12:00:49 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_txp.c,v 1.23 2008/02/07 01:21:57 dyoung Exp $");
#include "bpfilter.h"
#include "opt_inet.h"
@@ -1300,14 +1300,19 @@ txp_ioctl(ifp, command, data)
break;
case SIOCADDMULTI:
case SIOCDELMULTI:
- if ((error = ether_ioctl(ifp, command, data)) == ENETRESET) {
+ if ((error = ether_ioctl(ifp, command, data)) != ENETRESET)
+ break;
+
+ error = 0;
+
+ if (command != SIOCADDMULTI && command != SIOCDELMULTI)
+ ;
+ else if (ifp->if_flags & IFF_RUNNING) {
/*
* Multicast list has changed; set the hardware
* filter accordingly.
*/
- if (ifp->if_flags & IFF_RUNNING)
- txp_set_filter(sc);
- error = 0;
+ txp_set_filter(sc);
}
break;
case SIOCGIFMEDIA:
diff --git a/sys/dev/pci/if_vge.c b/sys/dev/pci/if_vge.c
index 24c9a7e6e5f..a3d6028c27a 100644
--- a/sys/dev/pci/if_vge.c
+++ b/sys/dev/pci/if_vge.c
@@ -1,4 +1,4 @@
-/* $NetBSD: if_vge.c,v 1.39 2008/01/19 22:10:19 dyoung Exp $ */
+/* $NetBSD: if_vge.c,v 1.40 2008/02/07 01:21:58 dyoung Exp $ */
/*-
* Copyright (c) 2004
@@ -35,7 +35,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_vge.c,v 1.39 2008/01/19 22:10:19 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vge.c,v 1.40 2008/02/07 01:21:58 dyoung Exp $");
/*
* VIA Networking Technologies VT612x PCI gigabit ethernet NIC driver.
@@ -2029,7 +2029,8 @@ vge_ioctl(struct ifnet *ifp, u_long command, void *data)
case SIOCSIFMTU:
if (ifr->ifr_mtu > VGE_JUMBO_MTU)
error = EINVAL;
- ifp->if_mtu = ifr->ifr_mtu;
+ else if ((error = ifioctl_common(ifp, command, data)) == ENETRESET)
+ error = 0;
break;
case SIOCSIFFLAGS:
if (ifp->if_flags & IFF_UP) {
@@ -2054,14 +2055,19 @@ vge_ioctl(struct ifnet *ifp, u_long command, void *data)
sc->sc_if_flags = ifp->if_flags;
break;
default:
- if ((error = ether_ioctl(ifp, command, data)) == ENETRESET) {
+ if ((error = ether_ioctl(ifp, command, data)) != ENETRESET)
+ break;
+
+ error = 0;
+
+ if (command != SIOCADDMULTI && command != SIOCDELMULTI)
+ ;
+ else if (ifp->if_flags & IFF_RUNNING) {
/*
* Multicast list has changed; set the hardware filter
* accordingly.
*/
- if (ifp->if_flags & IFF_RUNNING)
- vge_setmulti(sc);
- error = 0;
+ vge_setmulti(sc);
}
break;
}
diff --git a/sys/dev/pci/if_wm.c b/sys/dev/pci/if_wm.c
index cc818672bb0..626f0804f08 100644
--- a/sys/dev/pci/if_wm.c
+++ b/sys/dev/pci/if_wm.c
@@ -1,4 +1,4 @@
-/* $NetBSD: if_wm.c,v 1.153 2008/01/29 20:24:41 tls Exp $ */
+/* $NetBSD: if_wm.c,v 1.154 2008/02/07 01:21:58 dyoung Exp $ */
/*
* Copyright (c) 2001, 2002, 2003, 2004 Wasabi Systems, Inc.
@@ -79,7 +79,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.153 2008/01/29 20:24:41 tls Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.154 2008/02/07 01:21:58 dyoung Exp $");
#include "bpfilter.h"
#include "rnd.h"
@@ -2327,15 +2327,21 @@ wm_ioctl(struct ifnet *ifp, u_long cmd, void *data)
error = ifmedia_ioctl(ifp, ifr, &sc->sc_mii.mii_media, cmd);
break;
default:
- error = ether_ioctl(ifp, cmd, data);
- if (error == ENETRESET) {
+ if ((error = ether_ioctl(ifp, cmd, data)) != ENETRESET)
+ break;
+
+ error = 0;
+
+ if (cmd == SIOCSIFCAP)
+ error = (*ifp->if_init)(ifp);
+ else if (cmd != SIOCADDMULTI && cmd != SIOCDELMULTI)
+ ;
+ else if (ifp->if_flags & IFF_RUNNING) {
/*
* Multicast list has changed; set the hardware filter
* accordingly.
*/
- if (ifp->if_flags & IFF_RUNNING)
- wm_set_filter(sc);
- error = 0;
+ wm_set_filter(sc);
}
break;
}
diff --git a/sys/dev/pci/if_xge.c b/sys/dev/pci/if_xge.c
index 4885af9b28d..d39279b6ca8 100644
--- a/sys/dev/pci/if_xge.c
+++ b/sys/dev/pci/if_xge.c
@@ -1,4 +1,4 @@
-/* $NetBSD: if_xge.c,v 1.7 2008/01/04 21:18:03 ad Exp $ */
+/* $NetBSD: if_xge.c,v 1.8 2008/02/07 01:21:58 dyoung Exp $ */
/*
* Copyright (c) 2004, SUNET, Swedish University Computer Network.
@@ -43,7 +43,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_xge.c,v 1.7 2008/01/04 21:18:03 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_xge.c,v 1.8 2008/02/07 01:21:58 dyoung Exp $");
#include "bpfilter.h"
#include "rnd.h"
@@ -840,12 +840,12 @@ xge_ioctl(struct ifnet *ifp, u_long cmd, void *data)
switch (cmd) {
case SIOCSIFMTU:
- if (ifr->ifr_mtu < ETHERMIN || ifr->ifr_mtu > XGE_MAX_MTU) {
+ if (ifr->ifr_mtu < ETHERMIN || ifr->ifr_mtu > XGE_MAX_MTU)
error = EINVAL;
- } else {
+ else if ((error = ifioctl_common(ifp, cmd, data)) == ENETRESET){
PIF_WCSR(RMAC_MAX_PYLD_LEN,
RMAC_PYLD_LEN(ifr->ifr_mtu));
- ifp->if_mtu = ifr->ifr_mtu;
+ error = 0;
}
break;
@@ -855,10 +855,16 @@ xge_ioctl(struct ifnet *ifp, u_long cmd, void *data)
break;
default:
- if ((error = ether_ioctl(ifp, cmd, data)) == ENETRESET){
+ if ((error = ether_ioctl(ifp, cmd, data)) != ENETRESET)
+ break;
+
+ error = 0;
+
+ if (cmd != SIOCADDMULTI && cmd != SIOCDELMULTI)
+ ;
+ else if (ifp->if_flags & IFF_RUNNING) {
/* Change multicast list */
xge_mcast_filter(sc);
- error = 0;
}
break;
}
diff --git a/sys/dev/ppbus/if_plip.c b/sys/dev/ppbus/if_plip.c
index c089ef5a4d1..7c97ce6f541 100644
--- a/sys/dev/ppbus/if_plip.c
+++ b/sys/dev/ppbus/if_plip.c
@@ -1,4 +1,4 @@
-/* $NetBSD: if_plip.c,v 1.15 2007/10/19 12:01:07 ad Exp $ */
+/* $NetBSD: if_plip.c,v 1.16 2008/02/07 01:21:58 dyoung Exp $ */
/*-
* Copyright (c) 1997 Poul-Henning Kamp
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_plip.c,v 1.15 2007/10/19 12:01:07 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_plip.c,v 1.16 2008/02/07 01:21:58 dyoung Exp $");
/*
* Parallel port TCP/IP interfaces added. I looked at the driver from
@@ -432,11 +432,10 @@ lpioctl (struct ifnet *ifp, u_long cmd, void *data)
}
if(ptr)
free(ptr,M_DEVBUF);
- sc->sc_if.if_mtu = ifr->ifr_mtu;
- break;
-
+ /*FALLTHROUGH*/
case SIOCGIFMTU:
- ifr->ifr_mtu = sc->sc_if.if_mtu;
+ if ((error = ifioctl_common(ifp, command, data)) == ENETRESET)
+ error = 0;
break;
case SIOCADDMULTI:
diff --git a/sys/dev/usb/if_aue.c b/sys/dev/usb/if_aue.c
index a3155b641ea..fbfff47f432 100644
--- a/sys/dev/usb/if_aue.c
+++ b/sys/dev/usb/if_aue.c
@@ -1,4 +1,4 @@
-/* $NetBSD: if_aue.c,v 1.109 2008/01/19 22:10:20 dyoung Exp $ */
+/* $NetBSD: if_aue.c,v 1.110 2008/02/07 01:21:58 dyoung Exp $ */
/*
* Copyright (c) 1997, 1998, 1999, 2000
* Bill Paul <wpaul@ee.columbia.edu>. All rights reserved.
@@ -77,7 +77,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_aue.c,v 1.109 2008/01/19 22:10:20 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_aue.c,v 1.110 2008/02/07 01:21:58 dyoung Exp $");
#if defined(__NetBSD__)
#include "opt_inet.h"
@@ -1607,10 +1607,10 @@ aue_ioctl(struct ifnet *ifp, u_long command, void *data)
break;
case SIOCSIFMTU:
- if (ifr->ifr_mtu > ETHERMTU)
+ if (ifr->ifr_mtu < ETHERMIN || ifr->ifr_mtu > ETHERMTU)
error = EINVAL;
- else
- ifp->if_mtu = ifr->ifr_mtu;
+ else if ((error = ifioctl_common(ifp, command, data)) == ENETRESET)
+ error = 0;
break;
case SIOCSIFFLAGS:
diff --git a/sys/dev/usb/if_axe.c b/sys/dev/usb/if_axe.c
index fe53e31252f..4ecdac05e91 100644
--- a/sys/dev/usb/if_axe.c
+++ b/sys/dev/usb/if_axe.c
@@ -1,4 +1,4 @@
-/* $NetBSD: if_axe.c,v 1.22 2008/01/19 22:10:20 dyoung Exp $ */
+/* $NetBSD: if_axe.c,v 1.23 2008/02/07 01:21:58 dyoung Exp $ */
/*
* Copyright (c) 1997, 1998, 1999, 2000-2003
@@ -73,7 +73,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_axe.c,v 1.22 2008/01/19 22:10:20 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_axe.c,v 1.23 2008/02/07 01:21:58 dyoung Exp $");
#if defined(__NetBSD__)
#include "opt_inet.h"
@@ -1155,10 +1155,10 @@ axe_ioctl(struct ifnet *ifp, u_long cmd, void *data)
break;
case SIOCSIFMTU:
- if (ifr->ifr_mtu > ETHERMTU)
+ if (ifr->ifr_mtu < ETHERMIN || ifr->ifr_mtu > ETHERMTU)
error = EINVAL;
- else
- ifp->if_mtu = ifr->ifr_mtu;
+ else if ((error = ifioctl_common(ifp, cmd, data)) == ENETRESET)
+ error = 0;
break;
case SIOCSIFFLAGS:
diff --git a/sys/dev/usb/if_cdce.c b/sys/dev/usb/if_cdce.c
index 92e2ef94bfb..beb11f01e79 100644
--- a/sys/dev/usb/if_cdce.c
+++ b/sys/dev/usb/if_cdce.c
@@ -1,4 +1,4 @@
-/* $NetBSD: if_cdce.c,v 1.14 2007/03/13 13:51:54 drochner Exp $ */
+/* $NetBSD: if_cdce.c,v 1.15 2008/02/07 01:21:59 dyoung Exp $ */
/*
* Copyright (c) 1997, 1998, 1999, 2000-2003 Bill Paul <wpaul@windriver.com>
@@ -41,7 +41,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_cdce.c,v 1.14 2007/03/13 13:51:54 drochner Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_cdce.c,v 1.15 2008/02/07 01:21:59 dyoung Exp $");
#include "bpfilter.h"
#include <sys/param.h>
@@ -466,10 +466,10 @@ cdce_ioctl(struct ifnet *ifp, u_long command, void *data)
break;
case SIOCSIFMTU:
- if (ifr->ifr_mtu > ETHERMTU)
+ if (ifr->ifr_mtu < ETHERMIN || ifr->ifr_mtu > ETHERMTU)
error = EINVAL;
- else
- ifp->if_mtu = ifr->ifr_mtu;
+ else if ((error = ifioctl_common(ifp, command, data)) == ENETRESET)
+ error = 0;
break;
case SIOCSIFFLAGS:
diff --git a/sys/dev/usb/if_cue.c b/sys/dev/usb/if_cue.c
index f1290c87966..efca313cc00 100644
--- a/sys/dev/usb/if_cue.c
+++ b/sys/dev/usb/if_cue.c
@@ -1,4 +1,4 @@
-/* $NetBSD: if_cue.c,v 1.51 2007/08/29 22:33:43 dyoung Exp $ */
+/* $NetBSD: if_cue.c,v 1.52 2008/02/07 01:21:59 dyoung Exp $ */
/*
* Copyright (c) 1997, 1998, 1999, 2000
* Bill Paul <wpaul@ee.columbia.edu>. All rights reserved.
@@ -56,7 +56,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_cue.c,v 1.51 2007/08/29 22:33:43 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_cue.c,v 1.52 2008/02/07 01:21:59 dyoung Exp $");
#if defined(__NetBSD__)
#include "opt_inet.h"
@@ -1183,10 +1183,10 @@ cue_ioctl(struct ifnet *ifp, u_long command, void *data)
break;
case SIOCSIFMTU:
- if (ifr->ifr_mtu > ETHERMTU)
+ if (ifr->ifr_mtu < ETHERMIN || ifr->ifr_mtu > ETHERMTU)
error = EINVAL;
- else
- ifp->if_mtu = ifr->ifr_mtu;
+ else if ((error = ifioctl_common(ifp, command, data)) == ENETRESET)
+ error = 0;
break;
case SIOCSIFFLAGS:
diff --git a/sys/dev/usb/if_kue.c b/sys/dev/usb/if_kue.c
index a0434c07253..5ae9bf8c6b5 100644
--- a/sys/dev/usb/if_kue.c
+++ b/sys/dev/usb/if_kue.c
@@ -1,4 +1,4 @@
-/* $NetBSD: if_kue.c,v 1.61 2007/12/20 21:08:19 dyoung Exp $ */
+/* $NetBSD: if_kue.c,v 1.62 2008/02/07 01:21:59 dyoung Exp $ */
/*
* Copyright (c) 1997, 1998, 1999, 2000
* Bill Paul <wpaul@ee.columbia.edu>. All rights reserved.
@@ -70,7 +70,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_kue.c,v 1.61 2007/12/20 21:08:19 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_kue.c,v 1.62 2008/02/07 01:21:59 dyoung Exp $");
#if defined(__NetBSD__)
#include "opt_inet.h"
@@ -1091,10 +1091,10 @@ kue_ioctl(struct ifnet *ifp, u_long command, void *data)
break;
case SIOCSIFMTU:
- if (ifr->ifr_mtu > ETHERMTU)
+ if (ifr->ifr_mtu < ETHERMIN || ifr->ifr_mtu > ETHERMTU)
error = EINVAL;
- else
- ifp->if_mtu = ifr->ifr_mtu;
+ else if ((error = ifioctl_common(ifp, command, data)) == ENETRESET)
+ error = 0;
break;
case SIOCSIFFLAGS:
diff --git a/sys/dev/usb/if_upl.c b/sys/dev/usb/if_upl.c
index bcac8679321..6426c188ea1 100644
--- a/sys/dev/usb/if_upl.c
+++ b/sys/dev/usb/if_upl.c
@@ -1,4 +1,4 @@
-/* $NetBSD: if_upl.c,v 1.29 2007/03/13 13:51:54 drochner Exp $ */
+/* $NetBSD: if_upl.c,v 1.30 2008/02/07 01:21:59 dyoung Exp $ */
/*
* Copyright (c) 2000 The NetBSD Foundation, Inc.
* All rights reserved.
@@ -41,7 +41,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_upl.c,v 1.29 2007/03/13 13:51:54 drochner Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_upl.c,v 1.30 2008/02/07 01:21:59 dyoung Exp $");
#include "opt_inet.h"
#include "bpfilter.h"
@@ -880,8 +880,8 @@ upl_ioctl(struct ifnet *ifp, u_long command, void *data)
case SIOCSIFMTU:
if (ifr->ifr_mtu > UPL_BUFSZ)
error = EINVAL;
- else
- ifp->if_mtu = ifr->ifr_mtu;
+ else if ((error = ifioctl_common(ifp, command, data)) == ENETRESET)
+ error = 0;
break;
case SIOCSIFFLAGS: