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,