NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: kern/49507: bridge(4) doesn't extend the expire time of a MAC address entry that has traffic



The following reply was made to PR kern/49507; it has been noted by GNATS.

From: David Holland <dholland-bugs%netbsd.org@localhost>
To: gnats-bugs%netbsd.org@localhost
Cc: 
Subject: Re: kern/49507: bridge(4) doesn't extend the expire time of a MAC
 address entry that has traffic
Date: Sat, 27 Dec 2014 02:51:34 +0000

 (not sent to gnats)
    ------
 
 From: Ryota Ozaki <ozaki-r%netbsd.org@localhost>
 To: kern-bug-people%netbsd.org@localhost, gnats-admin%netbsd.org@localhost, netbsd-bugs%netbsd.org@localhost
 Subject: Re: kern/49507: bridge(4) doesn't extend the expire time of a MAC
 	address entry that has traffic
 Date: Fri, 26 Dec 2014 16:56:59 +0900
 
 On Fri, Dec 26, 2014 at 4:55 PM,  <ozaki-r%netbsd.org@localhost> wrote:
 >>Number:         49507
 >>Category:       kern
 >>Synopsis:       bridge(4) doesn't extend the expire time of a MAC address entry that has traffic
 >>Confidential:   no
 >>Severity:       non-critical
 >>Priority:       medium
 >>Responsible:    kern-bug-people
 >>State:          open
 >>Class:          sw-bug
 >>Submitter-Id:   net
 >>Arrival-Date:   Fri Dec 26 07:55:00 +0000 2014
 >>Originator:     Ryota Ozaki
 >>Release:        current
 >>Organization:
 >>Environment:
 > any
 >>Description:
 > The expire time of a cache entry in a bridge MAC address table is initialized
 > when the entry is created and never extended (except for "brconfig bridgeN static").
 > See bridge_rtupdate function.
 >
 > I don't think it's expected behavior of such caches. The expire time of a cache entry
 > should be extended when a frame for the entry go through the bridge.
 >
 > bridge(4) of OpenBSD has the same behavior as NetBSD (because their code is our
 > original). OTOH, FreeBSD's behavior is what I expect.
 >>How-To-Repeat:
 > Setup a bridge:
 >   ifconfig bridge0 create
 >   ifconfig bridge0 up
 >   brconfig bridge0 add wm1
 >   brconfig bridge0 add wm2
 >
 > Send frames over the bridge.
 >
 > Show entries:
 >   ifconfig bridge0
 >
 > You can see expire times of all address caches are constantly decreasing
 > regardless of traffic.
 >>Fix:
 > diff --git a/sys/net/if_bridge.c b/sys/net/if_bridge.c
 > index 9d60662..de418d2 100644
 > --- a/sys/net/if_bridge.c
 > +++ b/sys/net/if_bridge.c
 > @@ -2093,6 +2093,9 @@ again:
 >                                 brt->brt_expire = 0;
 >                         else
 >                                 brt->brt_expire = time_uptime + sc->sc_brttimeout;
 > +               } else {
 > +                       if ((brt->brt_flags & IFBAF_TYPEMASK) == IFBAF_DYNAMIC)
 > +                               brt->brt_expire = time_uptime + sc->sc_brttimeout;
 >                 }
 >         }
 >         BRIDGE_RT_REXIT(s);
 >
 
 Oops. This is the correct diff to HEAD:
 
 diff --git a/sys/net/if_bridge.c b/sys/net/if_bridge.c
 index 1ea2169..1c1ea3c 100644
 --- a/sys/net/if_bridge.c
 +++ b/sys/net/if_bridge.c
 @@ -1970,6 +1970,9 @@ bridge_rtupdate(struct bridge_softc *sc, const
 uint8_t *dst,
                         brt->brt_expire = 0;
                 else
                         brt->brt_expire = time_uptime + sc->sc_brttimeout;
 +       } else {
 +               if ((brt->brt_flags & IFBAF_TYPEMASK) == IFBAF_DYNAMIC)
 +                       brt->brt_expire = time_uptime + sc->sc_brttimeout;
         }
 
  out:
 


Home | Main Index | Thread Index | Old Index