topotests: convert bgp_prefix_sid to exabgp 4

Convert bgp_prefix_sid to exabgp 4

Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
This commit is contained in:
Louis Scalbert 2023-11-27 16:33:56 +01:00
parent cfcad6fd99
commit 811ad11a7e
4 changed files with 130 additions and 126 deletions

View File

@ -1,5 +1,6 @@
[exabgp.api] [exabgp.api]
ack = false
encoder = text encoder = text
highres = false highres = false
respawn = false respawn = false

View File

@ -1,103 +1,101 @@
group controller { neighbor 10.0.0.1 {
neighbor 10.0.0.1 { router-id 10.0.0.101;
router-id 10.0.0.101; local-address 10.0.0.101;
local-address 10.0.0.101; local-as 2;
local-as 2; peer-as 1;
peer-as 1;
family { family {
ipv4 nlri-mpls; ipv4 nlri-mpls;
} }
static { static {
# ref: draft-ietf-idr-bgp-prefix-sid-27 # ref: draft-ietf-idr-bgp-prefix-sid-27
# #
# IANA temporarily assigned the following: # IANA temporarily assigned the following:
# attribute code type (suggested value: 40) to # attribute code type (suggested value: 40) to
# the BGP Prefix-SID attribute # the BGP Prefix-SID attribute
# #
# 0 1 2 3 # 0 1 2 3
# 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 # 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
# | Type | Length | RESERVED | # | Type | Length | RESERVED |
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
# | Flags | Label Index | # | Flags | Label Index |
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
# | Label Index | # | Label Index |
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
# Figure. Label-Index TLV (Prefix-SID type-1) # Figure. Label-Index TLV (Prefix-SID type-1)
# #
# 0 1 2 3 # 0 1 2 3
# 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 # 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
# | Type | Length | Flags | # | Type | Length | Flags |
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
# | Flags | # | Flags |
# +-+-+-+-+-+-+-+-+ # +-+-+-+-+-+-+-+-+
# #
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
# | SRGB 1 (6 octets) | # | SRGB 1 (6 octets) |
# | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ # | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
# | | # | |
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
# #
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
# | SRGB n (6 octets) | # | SRGB n (6 octets) |
# | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ # | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
# | | # | |
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<Paste> # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<Paste>
# Figure. Originator SRGB TLV (Prefix-SID type-3) # Figure. Originator SRGB TLV (Prefix-SID type-3)
# ExaBGP generic-attribute binary pattern: # ExaBGP generic-attribute binary pattern:
# Attribute-type: 0x28 (40:BGP_PREFIX_SID) # Attribute-type: 0x28 (40:BGP_PREFIX_SID)
# Attribute-flag: 0xc0 (Option, Transitive) # Attribute-flag: 0xc0 (Option, Transitive)
# Attribute-body: Label-Index TLV and Originator SRGB TLV # Attribute-body: Label-Index TLV and Originator SRGB TLV
# Label-Index TLV: 0x01000700000000000001 # Label-Index TLV: 0x01000700000000000001
# Type (08bit): 0x01 # Type (08bit): 0x01
# Length (16bit): 0x0007 # Length (16bit): 0x0007
# RESERVED (08bit): 0x00 # RESERVED (08bit): 0x00
# Flags (16bit): 0x0000 # Flags (16bit): 0x0000
# Label Index (32bit): 0x00000001 # Label Index (32bit): 0x00000001
# Originator SRGB TLV: 0x03000800000c350000000a # Originator SRGB TLV: 0x03000800000c350000000a
# Type (08bit): 0x03 # Type (08bit): 0x03
# Length (16bit): 0x0008 (nb-SRGB is 1) # Length (16bit): 0x0008 (nb-SRGB is 1)
# Flags (16bit): 0x0000 # Flags (16bit): 0x0000
# SRGB1 (48bit): 0x0c3500:0x00000a (800000-800010 is SRGB1) # SRGB1 (48bit): 0x0c3500:0x00000a (800000-800010 is SRGB1)
route 3.0.0.1/32 next-hop 10.0.0.101 label [800001] attribute [0x28 0xc0 0x0100070000000000000103000800000c350000000a]; route 3.0.0.1/32 next-hop 10.0.0.101 label [800001] attribute [0x28 0xc0 0x0100070000000000000103000800000c350000000a];
# ExaBGP generic-attribute binary pattern: # ExaBGP generic-attribute binary pattern:
# Attribute-type: 0x28 (40:BGP_PREFIX_SID) # Attribute-type: 0x28 (40:BGP_PREFIX_SID)
# Attribute-flag: 0xc0 (Option, Transitive) # Attribute-flag: 0xc0 (Option, Transitive)
# Attribute-body: Label-Index TLV and Originator SRGB TLV # Attribute-body: Label-Index TLV and Originator SRGB TLV
# Label-Index TLV: 0x01000700000000000001 # Label-Index TLV: 0x01000700000000000001
# Type (08bit): 0x01 # Type (08bit): 0x01
# Length (16bit): 0x0007 # Length (16bit): 0x0007
# RESERVED (08bit): 0x00 # RESERVED (08bit): 0x00
# Flags (16bit): 0x0000 # Flags (16bit): 0x0000
# Label Index (32bit): 0x00000002 # Label Index (32bit): 0x00000002
# Originator SRGB TLV: 0x03000800000c350000000a # Originator SRGB TLV: 0x03000800000c350000000a
# Type (08bit): 0x03 # Type (08bit): 0x03
# Length (16bit): 0x0008 (nb-SRGB is 1) # Length (16bit): 0x0008 (nb-SRGB is 1)
# Flags (16bit): 0x0000 # Flags (16bit): 0x0000
# SRGB1 (48bit): 0x0c3500:0x00000a (800000-800010 is SRGB1) # SRGB1 (48bit): 0x0c3500:0x00000a (800000-800010 is SRGB1)
route 3.0.0.2/32 next-hop 10.0.0.101 label [800002] attribute [0x28 0xc0 0x0100070000000000000203000800000c350000000a]; route 3.0.0.2/32 next-hop 10.0.0.101 label [800002] attribute [0x28 0xc0 0x0100070000000000000203000800000c350000000a];
# ExaBGP generic-attribute binary pattern: # ExaBGP generic-attribute binary pattern:
# Attribute-type: 0x28 (40:BGP_PREFIX_SID) # Attribute-type: 0x28 (40:BGP_PREFIX_SID)
# Attribute-flag: 0xc0 (Option, Transitive) # Attribute-flag: 0xc0 (Option, Transitive)
# Attribute-body: Label-Index TLV and Originator SRGB TLV # Attribute-body: Label-Index TLV and Originator SRGB TLV
# Label-Index TLV: 0x01000700000000000001 # Label-Index TLV: 0x01000700000000000001
# Type (08bit): 0x01 # Type (08bit): 0x01
# Length (16bit): 0x0007 # Length (16bit): 0x0007
# RESERVED (08bit): 0x00 # RESERVED (08bit): 0x00
# Flags (16bit): 0x0000 # Flags (16bit): 0x0000
# Label Index (32bit): 0x00000003 # Label Index (32bit): 0x00000003
# Originator SRGB TLV: 0x03000800000c350000000a # Originator SRGB TLV: 0x03000800000c350000000a
# Type (08bit): 0x03 # Type (08bit): 0x03
# Length (16bit): 0x0008 (nb-SRGB is 1) # Length (16bit): 0x0008 (nb-SRGB is 1)
# Flags (16bit): 0x0000 # Flags (16bit): 0x0000
# SRGB1 (48bit): 0x0c3500:0x00000a (800000-800010 is SRGB1) # SRGB1 (48bit): 0x0c3500:0x00000a (800000-800010 is SRGB1)
route 3.0.0.3/32 next-hop 10.0.0.101 label [800003] attribute [0x28 0xc0 0x0100070000000000000303000800000c350000000a]; route 3.0.0.3/32 next-hop 10.0.0.101 label [800003] attribute [0x28 0xc0 0x0100070000000000000303000800000c350000000a];
}
} }
} }

View File

@ -1,19 +1,22 @@
group controller { process receive-routes {
run /etc/exabgp/exa-receive.py --no-timestamp 2;
encoder json;
}
process receive-routes { neighbor 10.0.0.1 {
run "/etc/exabgp/exa-receive.py --no-timestamp 2"; router-id 10.0.0.102;
receive-routes; local-address 10.0.0.102;
encoder json; local-as 3;
peer-as 1;
family {
ipv4 nlri-mpls;
} }
api {
neighbor 10.0.0.1 { processes [ receive-routes ];
router-id 10.0.0.102; receive {
local-address 10.0.0.102; parsed;
local-as 3; update;
peer-as 1;
family {
ipv4 nlri-mpls;
} }
} }
} }

View File

@ -120,13 +120,9 @@ def exabgp_get_update_prefix(filename, afi, nexthop, prefix):
ret = ret.get(afi) ret = ret.get(afi)
if ret is None: if ret is None:
continue continue
ret = ret.get(nexthop) for nh in ret.get(nexthop, []):
if ret is None: if nh.get("nlri") == prefix:
continue return output
ret = ret.get(prefix)
if ret is None:
continue
return output
return "Not found" return "Not found"
@ -135,33 +131,39 @@ def test_peer2_receive_prefix_sid_type1():
peer2 = tgen.gears["peer2"] peer2 = tgen.gears["peer2"]
logfile = "{}/{}-received.log".format(peer2.gearlogdir, peer2.name) logfile = "{}/{}-received.log".format(peer2.gearlogdir, peer2.name)
def _check_type1_peer2(prefix, labelindex): def _check_type1_peer2(prefix, label):
output = exabgp_get_update_prefix( output = exabgp_get_update_prefix(
logfile, "ipv4 nlri-mpls", "10.0.0.101", prefix logfile, "ipv4 nlri-mpls", "10.0.0.101", prefix
) )
expected = { expected = {
"type": "update", "type": "update",
"neighbor": { "neighbor": {
"ip": "10.0.0.1", "address": {
"peer": "10.0.0.1",
},
"message": { "message": {
"update": { "update": {
"attribute": { "announce": {
"attribute-0x28-0xE0": "0x010007000000{:08x}".format( "ipv4 nlri-mpls": {
labelindex "10.0.0.101": [
) {
"nlri": prefix,
"label": [[label]],
}
]
}
}, },
"announce": {"ipv4 nlri-mpls": {"10.0.0.101": {}}},
} }
}, },
}, },
} }
return topotest.json_cmp(output, expected) return topotest.json_cmp(output, expected)
test_func = functools.partial(_check_type1_peer2, "3.0.0.1/32", labelindex=1) test_func = functools.partial(_check_type1_peer2, "3.0.0.1/32", label=8001)
success, result = topotest.run_and_expect(test_func, None, count=10, wait=0.5) success, result = topotest.run_and_expect(test_func, None, count=10, wait=0.5)
assert result is None, 'Failed _check_type1_peer2 in "{}"'.format("peer2") assert result is None, 'Failed _check_type1_peer2 in "{}"'.format("peer2")
test_func = functools.partial(_check_type1_peer2, "3.0.0.2/32", labelindex=2) test_func = functools.partial(_check_type1_peer2, "3.0.0.2/32", label=8002)
success, result = topotest.run_and_expect(test_func, None, count=10, wait=0.5) success, result = topotest.run_and_expect(test_func, None, count=10, wait=0.5)
assert result is None, 'Failed _check_type1_peer2 in "{}"'.format("peer2") assert result is None, 'Failed _check_type1_peer2 in "{}"'.format("peer2")