kern/166255: [net] [patch] It should be possible to disable
"promiscuous mode enabled" messages
Eugene Grosbein
eugen at grosbein.net
Mon Mar 19 21:00:40 UTC 2012
>Number: 166255
>Category: kern
>Synopsis: [net] [patch] It should be possible to disable "promiscuous mode enabled" messages
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Mon Mar 19 21:00:27 UTC 2012
>Closed-Date:
>Last-Modified:
>Originator: Eugene Grosbein
>Release: FreeBSD 8.3-PRERELEASE amd64
>Organization:
RDTC JSC
>Environment:
System: FreeBSD grosbein.pp.ru 8.3-PRERELEASE FreeBSD 8.3-PRERELEASE #17: Tue Mar 20 01:42:57 NOVT 2012 root at grosbein.pp.ru:/usr/local/obj/usr/local/src/sys/DADV amd64
>Description:
We run large network providing local users with Internet access
using DHCP service. While we block malice DHCP servers in our net
using switches' layer 2 ACLs, configuration errors sometimes happen.
So, we also run network monitoring server based on FreeBSD
that periodically sends DHCP requests and waits for answers
to detect malice DHCP servers and warn us timely.
We use net-mgmt/dhcdrop to perform this task. dhcdrop utilizes BPF
and takes each of several thousands vlan interfaces to promiscous mode on
at start and take it back at finish. This cycle runs several times
per minute producing tons of LOG_NOTICE kernel messages:
vlan1: promiscuous mode enabled
vlan2: promiscuous mode enabled
...
vlan1: promiscuous mode disabled
vlan2: promiscuous mode disabled
And so on. The server is diskless so it fills RAM-based /var/log
with these messages and floods our remote syslog collector.
It is not possible to filter those messages out
with means of syslog.conf only.
It should be possible to disable these messages in setups like ours
where they are excessive.
>How-To-Repeat:
See above.
>Fix:
The following patch introduces new sysctl named
net.link.log_promisc_mode_change with default value 1.
One may change it to 0 to disable mentioned warnings.
--- sys/net/if.c.orig 2012-03-20 03:13:12.000000000 +0700
+++ sys/net/if.c 2012-03-20 03:22:10.000000000 +0700
@@ -120,6 +120,12 @@
&ifdescr_maxlen, 0,
"administrative maximum length for interface description");
+static int log_promisc_mode_change = 1;
+
+SYSCTL_INT(_net_link, OID_AUTO, log_promisc_mode_change, CTLFLAG_RW,
+ &log_promisc_mode_change, 1,
+ "log promiscuous mode change events");
+
MALLOC_DEFINE(M_IFDESCR, "ifdescr", "ifnet descriptions");
/* global sx for non-critical path ifdescr */
@@ -2240,7 +2246,8 @@
ifp->if_flags |= IFF_PROMISC;
else if (ifp->if_pcount == 0)
ifp->if_flags &= ~IFF_PROMISC;
- log(LOG_INFO, "%s: permanently promiscuous mode %s\n",
+ if (log_promisc_mode_change)
+ log(LOG_INFO, "%s: permanently promiscuous mode %s\n",
ifp->if_xname,
(new_flags & IFF_PPROMISC) ? "enabled" : "disabled");
}
@@ -2770,7 +2777,8 @@
error = if_setflag(ifp, IFF_PROMISC, IFF_PPROMISC,
&ifp->if_pcount, pswitch);
/* If promiscuous mode status has changed, log a message */
- if (error == 0 && ((ifp->if_flags ^ oldflags) & IFF_PROMISC))
+ if (error == 0 && log_promisc_mode_change &&
+ ((ifp->if_flags ^ oldflags) & IFF_PROMISC))
log(LOG_INFO, "%s: promiscuous mode %s\n",
ifp->if_xname,
(ifp->if_flags & IFF_PROMISC) ? "enabled" : "disabled");
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-bugs
mailing list