* Claudio Jeker <[EMAIL PROTECTED]> [2008-08-25 17:27]:
> On Mon, Aug 25, 2008 at 03:54:27PM +0200, Henning Brauer wrote:
> > * Graeme Lee <[EMAIL PROTECTED]> [2008-08-25 03:28]:
> > > Yes but the safi's are handled during capability negotiation (in function 
> > > parse_capabilities in session.c)
> > > Do I need to do more than just ignore the unknown safi's?  Currently, the 
> > > return (-1) in the mp_safi test never allows the connection to establish. 
> > >  
> > > Removing this at least allows the bgp session to function, but I'm not 
> > > sure 
> > > if that's all that's needed, or even if it's safe to do so.
> > 
> > 
> > I don't remember exactly what the RFCs demanded. IThere is one for
> > capabilties negotiation and one for the multiprotocol extensions. I
> > guess the latter is the relevant one. if you could check what it says
> > about the unknown safi case and it allows us to ingore them I am very
> > willing to make that change :)
> > 
> 
> RFC 2858 Section 7:
> 
>    A speaker that supports multiple <AFI, SAFI> tuples includes them as
>    multiple Capabilities in the Capabilities Optional Parameter.
> 
>    To have a bi-directional exchange of routing information for a
>    particular <AFI, SAFI> between a pair of BGP speakers, each such
>    speaker must advertise to the other (via the Capability Advertisement
>    mechanism) the capability to support that particular <AFI, SAFI>
>    routes.
> 
> I would say that unknown safi should be accepted in the capabilities but
> not during a bgp update. That would mean that your diff is not correct.
huh? that is exactly wgat my diff does. it doesn't change the way we
handle safis in updates - which means we might have to ignore unknown
safis there too, didn't check wether we do that already.

> 
> > Index: session.c
> > ===================================================================
> > RCS file: /cvs/src/usr.sbin/bgpd/session.c,v
> > retrieving revision 1.282
> > diff -u -p -r1.282 session.c
> > --- session.c       26 Jun 2008 00:01:51 -0000      1.282
> > +++ session.c       25 Aug 2008 13:54:06 -0000
> > @@ -2193,13 +2193,12 @@ parse_capabilities(struct peer *peer, u_
> >                     memcpy(&mp_safi, capa_val + 3, sizeof(mp_safi));
> >                     switch (mp_afi) {
> >                     case AFI_IPv4:
> > -                           if (mp_safi < 1 || mp_safi > 3) {
> > +                           if (mp_safi < 1 || mp_safi > 3)
> >                                     log_peer_warnx(&peer->conf,
> >                                         "parse_capabilities: AFI IPv4, "
> > -                                       "mp_safi %u illegal", mp_safi);
> > -                                   return (-1);
> > -                           }
> > -                           peer->capa.peer.mp_v4 = mp_safi;
> > +                                       "mp_safi %u unknown", mp_safi);
> > +                           else
> > +                                   peer->capa.peer.mp_v4 = mp_safi;
> >                             break;
> >                     case AFI_IPv6:
> >                             if (mp_safi < 1 || mp_safi > 3) {
> > 
> 
> I guess a similar hack should be added to AFI_IPv6. In the end we may need

yes, v6 not touched here.

> to accept any AFI/SAFI pair and just report them in show neighbor. The
> if (mp_safi < 1 || mp_safi > 3) will be invalid as soon as we support
> something like MPLS VPNs.

yup.

-- 
Henning Brauer, [EMAIL PROTECTED], [EMAIL PROTECTED]
BS Web Services, http://bsws.de
Full-Service ISP - Secure Hosting, Mail and DNS Services
Dedicated Servers, Rootservers, Application Hosting - Hamburg & Amsterdam

Reply via email to