diff options
| author | Donald Sharp <sharpd@nvidia.com> | 2022-01-21 12:03:04 -0500 |
|---|---|---|
| committer | Donald Sharp <sharpd@nvidia.com> | 2022-01-28 11:07:01 -0500 |
| commit | 637f95bf2d1d8dcf87c4a2cd82a680461961631d (patch) | |
| tree | 94ae98848a74e5e2d6cbadabfab74f312c9de236 /zebra/rtadv.c | |
| parent | 7a90d91586290d872c05960427df2d3f031cc5e5 (diff) | |
zebra: Make Router Advertisement warnings show up once every 6 hours
RA packets are pretty chatty and when there is a warning from
a missconfiguration on the network, the log file gets filed
up with warnings. Modify the code in rtadv.c to only spit
out the warning in these cases at most every 6 hours.
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
Diffstat (limited to 'zebra/rtadv.c')
| -rw-r--r-- | zebra/rtadv.c | 43 |
1 files changed, 32 insertions, 11 deletions
diff --git a/zebra/rtadv.c b/zebra/rtadv.c index 350b97cc5d..d64d563771 100644 --- a/zebra/rtadv.c +++ b/zebra/rtadv.c @@ -632,45 +632,66 @@ static void rtadv_process_advert(uint8_t *msg, unsigned int len, radvert = (struct nd_router_advert *)msg; - if ((radvert->nd_ra_curhoplimit && zif->rtadv.AdvCurHopLimit) - && (radvert->nd_ra_curhoplimit != zif->rtadv.AdvCurHopLimit)) { +#define SIXHOUR2USEC (int64_t)6 * 60 * 60 * 1000000 + + if ((radvert->nd_ra_curhoplimit && zif->rtadv.AdvCurHopLimit) && + (radvert->nd_ra_curhoplimit != zif->rtadv.AdvCurHopLimit) && + (monotime_since(&zif->rtadv.lastadvcurhoplimit, NULL) > + SIXHOUR2USEC || + zif->rtadv.lastadvcurhoplimit.tv_sec == 0)) { flog_warn( EC_ZEBRA_RA_PARAM_MISMATCH, "%s(%u): Rx RA - our AdvCurHopLimit doesn't agree with %s", ifp->name, ifp->ifindex, addr_str); + monotime(&zif->rtadv.lastadvcurhoplimit); } - if ((radvert->nd_ra_flags_reserved & ND_RA_FLAG_MANAGED) - && !zif->rtadv.AdvManagedFlag) { + if ((radvert->nd_ra_flags_reserved & ND_RA_FLAG_MANAGED) && + !zif->rtadv.AdvManagedFlag && + (monotime_since(&zif->rtadv.lastadvmanagedflag, NULL) > + SIXHOUR2USEC || + zif->rtadv.lastadvmanagedflag.tv_sec == 0)) { flog_warn( EC_ZEBRA_RA_PARAM_MISMATCH, "%s(%u): Rx RA - our AdvManagedFlag doesn't agree with %s", ifp->name, ifp->ifindex, addr_str); + monotime(&zif->rtadv.lastadvmanagedflag); } - if ((radvert->nd_ra_flags_reserved & ND_RA_FLAG_OTHER) - && !zif->rtadv.AdvOtherConfigFlag) { + if ((radvert->nd_ra_flags_reserved & ND_RA_FLAG_OTHER) && + !zif->rtadv.AdvOtherConfigFlag && + (monotime_since(&zif->rtadv.lastadvotherconfigflag, NULL) > + SIXHOUR2USEC || + zif->rtadv.lastadvotherconfigflag.tv_sec == 0)) { flog_warn( EC_ZEBRA_RA_PARAM_MISMATCH, "%s(%u): Rx RA - our AdvOtherConfigFlag doesn't agree with %s", ifp->name, ifp->ifindex, addr_str); + monotime(&zif->rtadv.lastadvotherconfigflag); } - if ((radvert->nd_ra_reachable && zif->rtadv.AdvReachableTime) - && (ntohl(radvert->nd_ra_reachable) - != zif->rtadv.AdvReachableTime)) { + if ((radvert->nd_ra_reachable && zif->rtadv.AdvReachableTime) && + (ntohl(radvert->nd_ra_reachable) != zif->rtadv.AdvReachableTime) && + (monotime_since(&zif->rtadv.lastadvreachabletime, NULL) > + SIXHOUR2USEC || + zif->rtadv.lastadvreachabletime.tv_sec == 0)) { flog_warn( EC_ZEBRA_RA_PARAM_MISMATCH, "%s(%u): Rx RA - our AdvReachableTime doesn't agree with %s", ifp->name, ifp->ifindex, addr_str); + monotime(&zif->rtadv.lastadvreachabletime); } - if ((ntohl(radvert->nd_ra_retransmit) - != (unsigned int)zif->rtadv.AdvRetransTimer)) { + if ((ntohl(radvert->nd_ra_retransmit) != + (unsigned int)zif->rtadv.AdvRetransTimer) && + (monotime_since(&zif->rtadv.lastadvretranstimer, NULL) > + SIXHOUR2USEC || + zif->rtadv.lastadvretranstimer.tv_sec == 0)) { flog_warn( EC_ZEBRA_RA_PARAM_MISMATCH, "%s(%u): Rx RA - our AdvRetransTimer doesn't agree with %s", ifp->name, ifp->ifindex, addr_str); + monotime(&zif->rtadv.lastadvretranstimer); } /* Create entry for neighbor if not known. */ |
