On 2018-01-31, Andrew Thrift <and...@networklabs.co.nz> wrote:
> Hi,
>
> I am testing OpenBGPD as a route-reflector, with a view to replacing
> our existing route reflectors.  I have a test environment where I have
> multiple vendors equipment peered with OpenBGPD to ensure it can
> handle our use-cases.
>
> I noticed that our Cisco IOS-XE devices have unstable BGP sessions and
> are dropping with the OpenBGPD log message:
>
> "sending notification: error in UPDATE message, optional attribute error"
>
> Upon further inspection, when the Cisco router issues an NLRI update
> and withdraw's a VPNv4 prefix OpenBGPD drops the session.
>
> I found a report of a similar issue, but with a Juniper MX router from
> Hendrik Meyburgh back in 2012, where the problem was with the
> vrf-table-label command on JunOS.   I checked our configuration and
> IOS-XE is configured with:
> "mpls label mode all-vrfs protocol bgp-vpnv4 per-vrf" which assigns a
> single label per VRF table, rather than a label per prefix.   I
> suspect that this is causing the NLRI updates to be formatted in a way
> that OpenBGPD does not like.
>
> I took a packet capture of the UPDATE causing the session to be
> terminated, there are two instances of it being dropped in the pcap
> available at https://mergesync.btg.co.nz/index.php/s/rvc8mc9RCpTR1Lg
>
> Is there anything we can do to stop OpenBGPD from dropping the
> session?   Running per-VRF label's is default on all Juniper
> platforms, and is common on Cisco as well.
>
>
> Regards,
>
>
>
> Andrew
>
>

It's hitting this case:

 1265                 case AID_VPN_IPv4:
 1266                         while (mplen > 0) {
 1267                                 if ((pos = rde_update_get_vpn4(mpp, mplen,
 1268                                     &prefix, &prefixlen)) == -1) {
 1269                                         log_peer_warnx(&peer->conf,
 1270                                             "bad VPNv4 nlri prefix");
 1271                                         rde_update_err(peer, ERR_UPDATE,
 1272                                             ERR_UPD_OPTATTR,
 1273                                             mpa.reach, mpa.reach_len);
 1274                                         goto done;
 1275                                 }
>1276                                 if (prefixlen > 32) {
>1277                                         rde_update_err(peer, ERR_UPDATE,
>1278                                             ERR_UPD_OPTATTR,
>1279                                             mpa.reach, mpa.reach_len);
 1280                                         goto done;
 1281                                 }
 
Question is why the prefixlen is set this way...

Border Gateway Protocol - UPDATE Message
    Marker: ffffffffffffffffffffffffffffffff
    Length: 45
    Type: UPDATE Message (2)
    Withdrawn Routes Length: 0
    Total Path Attribute Length: 22
    Path attributes
        Path Attribute - MP_UNREACH_NLRI
            Flags: 0x80, Optional, Non-transitive, Complete
                1... .... = Optional: Set
                .0.. .... = Transitive: Not set
                ..0. .... = Partial: Not set
                ...0 .... = Extended-Length: Not set
                .... 0000 = Unused: 0x0
            Type Code: MP_UNREACH_NLRI (15)
            Length: 19
            Address family identifier (AFI): IPv4 (1)
            Subsequent address family identifier (SAFI): Labeled VPN Unicast 
(128)
            Withdrawn routes (16 bytes)
                BGP Prefix
>                   Prefix Length: 120
                    Label Stack: 0 (withdrawn)
                    Route Distinguisher: 56028:130
                    MP Unreach NLRI IPv4 prefix: 100.64.0.42

Relevant bit of the pcap sliced off:

begin 644 bgp.pcap.1
MU,.RH0(`!````````````/__```!````-8%Q6N8G#0!W````=P```/)/1[ZT
MK=3*;0$[@`@`1<``:2=W0`#^!G>O9Q,'"&<3!WI810"SC067R&3)9!.@&#]5
MCE```!,2WBX<N/;R/E88$SH2'LO([0``_____________________P`M`@``
M`!:`#Q,``8!X@`````#:W````()D0``J-8%Q6HXJ#0!R````<@```-3*;0$[
M@/)/1[ZTK0@`1<``9"'@0`#_!GQ+9Q,'>F<3!P@`LUA%9,ED$XT%E_6@&/__
MW/X``!,2(?H9D@C-C=]Z+]8NI6/`\@$!_____________________P`H`P,)
M``&`>(``````VMP```""9$``*C6!<5JD*@T`2@```$H```#4RFT!.X#R3T>^
MM*T(`$7``#P1U$``_P:,?V<3!WIG$P<(`+-8163)9#N-!9?UH!'__]S6```3
M$JVF/+LY'?;_<@2PYQ#E]A@!`36!<5IF/PT`2@```$H```#R3T>^M*W4RFT!
M.X`(`$7``#PG>$``_@9WVV<3!PAG$P=Z6$4`LXT%E_5DR60\H!`_+?7K```3
M$J4$!S.*<4<CK17,O)3D9W```#6!<5I6:@T`2@```$H```#R3T>^M*W4RFT!
M.X`(`$7``#PG>4``_@9WVF<3!PAG$P=Z6$4`LXT%E_5DR60\H!D_+7_&```3
M$C'7AD>K6M-#U9:=T`K,M1\``#6!<5J2:@T`2@```$H```#4RFT!.X#R3T>^
MM*T(`$7``#PDYT``_P9Y;&<3!WIG$P<(`+-8163)9#R-!9?VH!#__]S6```3
3$J;7?D4KK0W@@DH8V=$-SL8!`0``
`
end


Reply via email to