Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/net/lagg Set a port interface of lagg(4) in promiscuous ...
details: https://anonhg.NetBSD.org/src/rev/b0592641ea4f
branches: trunk
changeset: 989114:b0592641ea4f
user: yamaguchi <yamaguchi%NetBSD.org@localhost>
date: Tue Oct 12 08:30:58 2021 +0000
description:
Set a port interface of lagg(4) in promiscuous mode
when the lagg(4) is in promiscuous mode.
diffstat:
sys/net/lagg/if_lagg.c | 38 +++++++++++++++++++++++++++++++-------
sys/net/lagg/if_laggproto.h | 3 ++-
2 files changed, 33 insertions(+), 8 deletions(-)
diffs (103 lines):
diff -r e2b3f9fa795f -r b0592641ea4f sys/net/lagg/if_lagg.c
--- a/sys/net/lagg/if_lagg.c Tue Oct 12 08:26:47 2021 +0000
+++ b/sys/net/lagg/if_lagg.c Tue Oct 12 08:30:58 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: if_lagg.c,v 1.12 2021/10/12 08:26:47 yamaguchi Exp $ */
+/* $NetBSD: if_lagg.c,v 1.13 2021/10/12 08:30:58 yamaguchi Exp $ */
/*
* Copyright (c) 2005, 2006 Reyk Floeter <reyk%openbsd.org@localhost>
@@ -20,7 +20,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_lagg.c,v 1.12 2021/10/12 08:26:47 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_lagg.c,v 1.13 2021/10/12 08:30:58 yamaguchi Exp $");
#ifdef _KERNEL_OPT
#include "opt_inet.h"
@@ -180,6 +180,7 @@
static int lagg_port_output(struct ifnet *, struct mbuf *,
const struct sockaddr *, const struct rtentry *);
static int lagg_config_promisc(struct lagg_softc *, struct lagg_port *);
+static void lagg_unconfig_promisc(struct lagg_softc *, struct lagg_port *);
static struct lagg_variant *
lagg_variant_getref(struct lagg_softc *, struct psref *);
static void lagg_variant_putref(struct lagg_variant *, struct psref *);
@@ -2287,6 +2288,7 @@
goto remove_port;
}
+ lagg_config_promisc(sc, lp);
lagg_proto_startport(sc, lp);
lagg_capabilities_update(sc);
@@ -2390,6 +2392,7 @@
}
if (is_ifdetach == false) {
+ lagg_unconfig_promisc(sc, lp);
lagg_setifcaps(lp, lp->lp_ifcapenable);
if (lp->lp_iftype == IFT_ETHER)
lagg_setethcaps(lp, lp->lp_eccapenable);
@@ -2543,17 +2546,38 @@
lagg_config_promisc(struct lagg_softc *sc, struct lagg_port *lp)
{
struct ifnet *ifp;
+ uint64_t chg_flags;
int error;
- int status;
-
+
+ error = 0;
ifp = &sc->sc_if;
- status = ISSET(ifp->if_flags, IFF_PROMISC) ? 1 : 0;
-
- error = ifpromisc(lp->lp_ifp, status);
+ chg_flags = ifp->if_flags ^ lp->lp_ifflags;
+
+ if (ISSET(chg_flags, IFF_PROMISC)) {
+ error = ifpromisc(lp->lp_ifp,
+ ISSET(ifp->if_flags, IFF_PROMISC) ? 1 : 0);
+ if (error == 0) {
+ lp->lp_ifflags ^= IFF_PROMISC;
+ }
+ }
return error;
}
+static void
+lagg_unconfig_promisc(struct lagg_softc *sc, struct lagg_port *lp)
+{
+ int error;
+
+ if (ISSET(lp->lp_ifflags, IFF_PROMISC)) {
+ error = ifpromisc(lp->lp_ifp, 0);
+ if (error != 0) {
+ lagg_log(sc, LOG_DEBUG,
+ "couldn't unset promiscuous mode");
+ }
+ }
+}
+
static int
lagg_port_ioctl(struct ifnet *ifp, u_long cmd, void *data)
{
diff -r e2b3f9fa795f -r b0592641ea4f sys/net/lagg/if_laggproto.h
--- a/sys/net/lagg/if_laggproto.h Tue Oct 12 08:26:47 2021 +0000
+++ b/sys/net/lagg/if_laggproto.h Tue Oct 12 08:30:58 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: if_laggproto.h,v 1.7 2021/10/12 08:26:47 yamaguchi Exp $ */
+/* $NetBSD: if_laggproto.h,v 1.8 2021/10/12 08:30:58 yamaguchi Exp $ */
/*
* Copyright (c) 2021 Internet Initiative Japan Inc.
@@ -76,6 +76,7 @@
u_char lp_iftype;
uint8_t lp_lladdr[ETHER_ADDR_LEN];
+ unsigned short lp_ifflags;
int lp_eccapenable;
uint64_t lp_ifcapenable;
uint64_t lp_mtu;
Home |
Main Index |
Thread Index |
Old Index