Exa-Networks / exabgp

The BGP swiss army knife of networking
Other
2.07k stars 443 forks source link

ipv6 route with fragment flag attributes is not added to peer #1102

Closed enag11 closed 2 years ago

enag11 commented 2 years ago

Using 4.2.18

Announcing the following ipv6 route and adding to and exabgp4 peer and an IOS/XR router

announce_flow_1 = 'announce flow route { match { source beef:f00e::/64; destination 2a02:29b8:1925::2e69/128; protocol tcp;  fragment [first-fragment is-fragment last-fragment ]; } } '

The exabgp4 announcing the route shows

17:17:59 | 21960  | process       | command from process announce-routes : announce flow route { match { source beef:f00e::/64; destination 2a02:29b8:1925::2e69/128; protocol tcp;  fragment [first-fragment is-fragment last-fragment ]; } }
17:17:59 | 21960  | reactor       | async | announce-routes | announce flow route { match { source beef:f00e::/64; destination 2a02:29b8:1925::2e69/128; protocol tcp; fragment [ first-fragment is-fragment last-fragment ]; } }
17:17:59 | 21960  | configuration | > route            |
17:17:59 | 21960  | configuration | > match            |
17:17:59 | 21960  | configuration | . source           | 'beef:f00e::/64'
17:17:59 | 21960  | configuration | . destination      | '2a02:29b8:1925::2e69/128'
17:17:59 | 21960  | configuration | . protocol         | 'tcp'
17:17:59 | 21960  | configuration | . fragment         | '[' 'first-fragment' 'is-fragment' 'last-fragment' ']'
17:17:59 | 21960  | configuration | < match            |
17:17:59 | 21960  | configuration | < route            |
17:17:59 | 21960  | api           | flow added to neighbor 198.18.18.114 local-ip 198.18.18.170 local-as 100 peer-as 100 router-id 198.18.18.170 family-allowed in-open, neighbor 198.18.18.90 local-ip 198.18.18.170 local-as 100 peer-as 100 router-id 198.18.18.170 family-allowed in-open : flow destination-ipv6 2a02:29b8:1925::2e69/128/0 source-ipv6 beef:f00e::/64/0 protocol =tcp fragment [ first-fragment is-fragment last-fragment ]
17:17:59 | 21960  | outgoing-1    | sending TCP payload (  86) FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF 0056 0200 0000 3F40 0101 0040 0200 4005 0400 0000 6480 0E2E 0002 8500 0028 0180 002A 0229 B819 2500 0000 0000 0000 002E 6902 4000 BEEF F00E 0000 0000 0381 060C 0004 0002 8008
17:17:59 | 21960  | outgoing-1    | >> 1 UPDATE(s)
17:17:59 | 21960  | outgoing-1    | sending TCP payload (  86) FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF 0056 0200 0000 3F40 0101 0040 0200 4005 0400 0000 6480 0E2E 0002 8500 0028 0180 002A 0229 B819 2500 0000 0000 0000 002E 6902 4000 BEEF F00E 0000 0000 0381 060C 0004 0002 8008
17:17:59 | 21960  | outgoing-1    | >> 1 UPDATE(s)

The IOS/XR adds the route

*>iDest:2a02:29b8:1925::2e69/0-128,Source:beef:f00e::/0-64,NH:=6,Frag:~FF|~IsF|~LF/320

The exabgp4 peer log shows the following

17:17:59 | 21648  | incoming-1    | received complete TCP payload (  19) FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF 0056 02
17:17:59 | 21648  | incoming-1    | received complete TCP payload (  67) 0000 003F 4001 0100 4002 0040 0504 0000 0064 800E 2E00 0285 0000 2801 8000 2A02 29B8 1925 0000 0000 0000 0000 2E69 0240 00BE EFF0 0E00 0000 0003 8106 0C00 0400 0280 08
17:17:59 | 21648  | incoming-1    | << message of type UPDATE
17:17:59 | 21648  | parser        | parsing UPDATE (  67) 0000 003F 4001 0100 4002 0040 0504 0000 0064 800E 2E00 0285 0000 2801 8000 2A02 29B8 1925 0000 0000 0000 0000 2E69 0240 00BE EFF0 0E00 0000 0003 8106 0C00 0400 0280 08
17:17:59 | 21648  | routes        | withdrawn NLRI none
17:17:59 | 21648  | parser        | attribute origin             flag 0x40 type 0x01 len 0x01 payload 00
17:17:59 | 21648  | parser        | attribute as-path            flag 0x40 type 0x02 len 0x00
17:17:59 | 21648  | parser        | attribute local-preference   flag 0x40 type 0x05 len 0x04 payload 0000 0064
17:17:59 | 21648  | parser        | attribute mp-reach-nlri      flag 0x80 type 0x0e len 0x2e payload 0002 8500 0028 0180 002A 0229 B819 2500 0000 0000 0000 002E 6902 4000 BEEF F00E 0000 0000 0381 060C 0004 0002 8008
17:17:59 | 21648  | parser        | NLRI      ipv6 flow          without path-information     payload 2801 8000 2A02 29B8 1925 0000 0000 0000 0000 2E69 0240 00BE EFF0 0E00 0000 0003 8106 0C00 0400 0280 08
17:17:59 | 21648  | routes        | announced NLRI none
17:17:59 | 21648  | parser        | decoded UPDATE (   0) json { "exabgp": "4.0.1", "time": 1655399879.384409, "host" : "afx-exabgp41", "pid" : 21648, "ppid" : 21647, "counter": 1, "type": "update", "neighbor": { "address": { "local": "198.18.18.114", "peer": "198.18.18.170" }, "asn": { "local": 100, "peer": 100 } , "direction": "in", "message": { "update": { "attribute": { "origin": "igp", "local-preference": 100 } } } } }
17:17:59 | 21648  | peer-1        | << UPDATE #9
thomas-mangin commented 2 years ago

This should be fixed but I will let it open as RFC 8956 was not finalised when I wrote the Ipv6 support and it seems that I need to review it and look at 3.3 (Type 3 - Upper-Layer Protocol) and perhaps other too.

enag11 commented 2 years ago

Thanks, I will try the fix

enag11 commented 2 years ago

The fix looks good. Thanks