Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/dev/pci/ixgbe - Make SIOCADDMULTI returns ENOSPC when th...
details: https://anonhg.NetBSD.org/src/rev/ef342b3734ec
branches: trunk
changeset: 459441:ef342b3734ec
user: msaitoh <msaitoh%NetBSD.org@localhost>
date: Thu Sep 12 06:19:47 2019 +0000
description:
- Make SIOCADDMULTI returns ENOSPC when the Ethenet multicast address list
exceeds the limit.
- State "Ethernet" multicast address.
- Use macro.
diffstat:
sys/dev/pci/ixgbe/ixgbe.h | 4 +---
sys/dev/pci/ixgbe/ixgbe_vf.c | 10 +++++-----
sys/dev/pci/ixgbe/ixgbe_vf.h | 4 +++-
sys/dev/pci/ixgbe/ixv.c | 38 ++++++++++++++++++++++++++++++++++++--
4 files changed, 45 insertions(+), 11 deletions(-)
diffs (113 lines):
diff -r e18b1e77416a -r ef342b3734ec sys/dev/pci/ixgbe/ixgbe.h
--- a/sys/dev/pci/ixgbe/ixgbe.h Thu Sep 12 06:12:56 2019 +0000
+++ b/sys/dev/pci/ixgbe/ixgbe.h Thu Sep 12 06:19:47 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe.h,v 1.56 2019/07/17 03:26:24 msaitoh Exp $ */
+/* $NetBSD: ixgbe.h,v 1.57 2019/09/12 06:19:47 msaitoh Exp $ */
/******************************************************************************
SPDX-License-Identifier: BSD-3-Clause
@@ -436,8 +436,6 @@
u64 flm;
};
-#define IXGBE_MAX_VF_MC 30 /* Max number of multicast entries */
-
struct ixgbe_vf {
u_int pool;
u_int rar_index;
diff -r e18b1e77416a -r ef342b3734ec sys/dev/pci/ixgbe/ixgbe_vf.c
--- a/sys/dev/pci/ixgbe/ixgbe_vf.c Thu Sep 12 06:12:56 2019 +0000
+++ b/sys/dev/pci/ixgbe/ixgbe_vf.c Thu Sep 12 06:19:47 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe_vf.c,v 1.19 2019/09/11 04:59:55 msaitoh Exp $ */
+/* $NetBSD: ixgbe_vf.c,v 1.20 2019/09/12 06:19:47 msaitoh Exp $ */
/******************************************************************************
SPDX-License-Identifier: BSD-3-Clause
@@ -409,11 +409,11 @@
DEBUGOUT1("MC Addr Count = %d\n", mc_addr_count);
- if (mc_addr_count > 30) {
+ if (mc_addr_count > IXGBE_MAX_VF_MC) {
device_printf(ixgbe_dev_from_hw(hw),
- "number of multicast addresses exceeded the limit "
- "(%u > 30)\n", mc_addr_count);
- cnt = 30;
+ "number of Ethernet multicast addresses exceeded "
+ "the limit (%u > %d)\n", mc_addr_count, IXGBE_MAX_VF_MC);
+ cnt = IXGBE_MAX_VF_MC;
} else
cnt = mc_addr_count;
msgbuf[0] = IXGBE_VF_SET_MULTICAST;
diff -r e18b1e77416a -r ef342b3734ec sys/dev/pci/ixgbe/ixgbe_vf.h
--- a/sys/dev/pci/ixgbe/ixgbe_vf.h Thu Sep 12 06:12:56 2019 +0000
+++ b/sys/dev/pci/ixgbe/ixgbe_vf.h Thu Sep 12 06:19:47 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe_vf.h,v 1.13 2018/04/04 08:13:07 msaitoh Exp $ */
+/* $NetBSD: ixgbe_vf.h,v 1.14 2019/09/12 06:19:47 msaitoh Exp $ */
/******************************************************************************
SPDX-License-Identifier: BSD-3-Clause
@@ -42,6 +42,8 @@
#define IXGBE_VF_MAX_TX_QUEUES 8
#define IXGBE_VF_MAX_RX_QUEUES 8
+#define IXGBE_MAX_VF_MC 30 /* Max number of multicast entries */
+
/* DCB define */
#define IXGBE_VF_MAX_TRAFFIC_CLASS 8
diff -r e18b1e77416a -r ef342b3734ec sys/dev/pci/ixgbe/ixv.c
--- a/sys/dev/pci/ixgbe/ixv.c Thu Sep 12 06:12:56 2019 +0000
+++ b/sys/dev/pci/ixgbe/ixv.c Thu Sep 12 06:19:47 2019 +0000
@@ -1,4 +1,4 @@
-/*$NetBSD: ixv.c,v 1.131 2019/09/05 10:01:30 msaitoh Exp $*/
+/*$NetBSD: ixv.c,v 1.132 2019/09/12 06:19:47 msaitoh Exp $*/
/******************************************************************************
@@ -2920,7 +2920,41 @@
case SIOCSIFFLAGS:
IOCTL_DEBUGOUT("ioctl: SIOCSIFFLAGS (Set Interface Flags)");
break;
- case SIOCADDMULTI:
+ case SIOCADDMULTI: {
+ struct ether_multi *enm;
+ struct ether_multistep step;
+ struct ethercom *ec = &adapter->osdep.ec;
+ int mcnt = 0;
+
+ /*
+ * Check the number of multicast address. If it exceeds,
+ * return ENOSPC.
+ * Update this code when we support API 1.3.
+ */
+ ETHER_LOCK(ec);
+ ETHER_FIRST_MULTI(step, ec, enm);
+ while (enm != NULL) {
+ mcnt++;
+
+ /*
+ * This code is before adding, so one room is required
+ * at least.
+ */
+ if (mcnt > (IXGBE_MAX_VF_MC - 1)) {
+ device_printf(adapter->dev,
+ "number of Ethernet multicast addresses "
+ "exceeds the limit (%d)\n",
+ IXGBE_MAX_VF_MC);
+ error = ENOSPC;
+ break;
+ }
+ ETHER_NEXT_MULTI(step, enm);
+ }
+ ETHER_UNLOCK(ec);
+ if (error)
+ return error;
+ }
+ /*FALLTHROUGH*/
case SIOCDELMULTI:
IOCTL_DEBUGOUT("ioctl: SIOC(ADD|DEL)MULTI");
break;
Home |
Main Index |
Thread Index |
Old Index