Index: sys/netinet/if_arp.c
===================================================================
RCS file: /cvsroot/src/sys/netinet/if_arp.c,v
retrieving revision 1.141
diff -u -r1.141 if_arp.c
--- sys/netinet/if_arp.c 28 Aug 2008 07:58:05 -0000 1.141
+++ sys/netinet/if_arp.c 24 Sep 2008 12:48:45 -0000
@@ -142,6 +142,14 @@
#define rt_expire rt_rmx.rmx_expire
#define rt_pksent rt_rmx.rmx_pksent
+/* verbosity */
+#define ARP_VERBOSE_NONE 0
+#define ARP_VERBOSE_ERR 1
+#define ARP_VERBOSE_WARN 2
+#define ARP_VERBOSE_INFO 3
+
+int arp_verboselevel = ARP_VERBOSE_INFO;
+
static struct sockaddr *arp_setgate(struct rtentry *, struct sockaddr *,
const struct sockaddr *);
static void arptfree(struct llinfo_arp *);
@@ -1031,17 +1039,22 @@
/* XXX checks for bridge case? */
if (!memcmp(ar_sha(ah), ifp->if_broadcastaddr, ifp->if_addrlen)) {
ARP_STATINC(ARP_STAT_RCVBCASTSHA);
- log(LOG_ERR,
- "%s: arp: link address is broadcast for IP address %s!\n",
- ifp->if_xname, in_fmtaddr(isaddr));
+ if (arp_verboselevel >= ARP_VERBOSE_ERR)
+ log(LOG_ERR,
+ "%s: arp: link address is broadcast for"
+ " IP address %s!\n",
+ ifp->if_xname, in_fmtaddr(isaddr));
goto out;
}
if (in_hosteq(isaddr, myaddr)) {
ARP_STATINC(ARP_STAT_RCVLOCALSPA);
- log(LOG_ERR,
- "duplicate IP address %s sent from link address %s\n",
- in_fmtaddr(isaddr), lla_snprintf(ar_sha(ah), ah->ar_hln));
+ if (arp_verboselevel >= ARP_VERBOSE_ERR)
+ log(LOG_ERR,
+ "duplicate IP address %s sent from"
+ " link address %s\n",
+ in_fmtaddr(isaddr), lla_snprintf(ar_sha(ah),
+ ah->ar_hln));
itaddr = myaddr;
goto reply;
}
@@ -1051,27 +1064,34 @@
memcmp(ar_sha(ah), CLLADDR(sdl), sdl->sdl_alen)) {
if (rt->rt_flags & RTF_STATIC) {
ARP_STATINC(ARP_STAT_RCVOVERPERM);
- log(LOG_INFO,
- "%s tried to overwrite permanent arp info"
- " for %s\n",
- lla_snprintf(ar_sha(ah), ah->ar_hln),
- in_fmtaddr(isaddr));
+ if (arp_verboselevel >= ARP_VERBOSE_INFO)
+ log(LOG_INFO,
+ "%s tried to overwrite permanent"
+ " arp info for %s\n",
+ lla_snprintf(ar_sha(ah),
+ ah->ar_hln),
+ in_fmtaddr(isaddr));
goto out;
} else if (rt->rt_ifp != ifp) {
ARP_STATINC(ARP_STAT_RCVOVERINT);
- log(LOG_INFO,
- "%s on %s tried to overwrite "
- "arp info for %s on %s\n",
- lla_snprintf(ar_sha(ah), ah->ar_hln),
- ifp->if_xname, in_fmtaddr(isaddr),
- rt->rt_ifp->if_xname);
+ if (arp_verboselevel >= ARP_VERBOSE_INFO)
+ log(LOG_INFO,
+ "%s on %s tried to overwrite "
+ "arp info for %s on %s\n",
+ lla_snprintf(ar_sha(ah),
+ ah->ar_hln),
+ ifp->if_xname, in_fmtaddr(isaddr),
+ rt->rt_ifp->if_xname);
goto out;
} else {
ARP_STATINC(ARP_STAT_RCVOVER);
- log(LOG_INFO,
- "arp info overwritten for %s by %s\n",
- in_fmtaddr(isaddr),
- lla_snprintf(ar_sha(ah), ah->ar_hln));
+ if (arp_verboselevel >= ARP_VERBOSE_INFO)
+ log(LOG_INFO,
+ "arp info overwritten for %s"
+ " by %s\n",
+ in_fmtaddr(isaddr),
+ lla_snprintf(ar_sha(ah),
+ ah->ar_hln));
}
}
/*
@@ -1082,16 +1102,20 @@
if (sdl->sdl_alen &&
sdl->sdl_alen != ah->ar_hln) {
ARP_STATINC(ARP_STAT_RCVLENCHG);
- log(LOG_WARNING,
- "arp from %s: new addr len %d, was %d\n",
- in_fmtaddr(isaddr), ah->ar_hln, sdl->sdl_alen);
+ if (arp_verboselevel >= ARP_VERBOSE_WARN)
+ log(LOG_WARNING,
+ "arp from %s: new addr len %d, was %d\n",
+ in_fmtaddr(isaddr), ah->ar_hln,
+ sdl->sdl_alen);
}
if (ifp->if_addrlen != ah->ar_hln) {
ARP_STATINC(ARP_STAT_RCVBADLEN);
- log(LOG_WARNING,
- "arp from %s: addr len: new %d, i/f %d (ignored)\n",
- in_fmtaddr(isaddr), ah->ar_hln,
- ifp->if_addrlen);
+ if (arp_verboselevel >= ARP_VERBOSE_WARN)
+ log(LOG_WARNING,
+ "arp from %s: addr len: new %d,"
+ " i/f %d (ignored)\n",
+ in_fmtaddr(isaddr), ah->ar_hln,
+ ifp->if_addrlen);
goto reply;
}
#if NTOKEN > 0
@@ -1603,6 +1627,13 @@
sysctl_createv(clog, 0, NULL, NULL,
CTLFLAG_PERMANENT|CTLFLAG_READWRITE,
+ CTLTYPE_INT, "verbose",
+ SYSCTL_DESCR("ARP message verbosity"),
+ NULL, 0, &arp_verboselevel, 0,
+ CTL_NET,PF_INET, node->sysctl_num, CTL_CREATE, CTL_EOL);
+
+ sysctl_createv(clog, 0, NULL, NULL,
+ CTLFLAG_PERMANENT|CTLFLAG_READWRITE,
CTLTYPE_INT, "prune",
SYSCTL_DESCR("ARP cache pruning interval"),
NULL, 0, &arpt_prune, 0,