mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-07-27 11:44:16 +00:00
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:
parent
cfcad6fd99
commit
811ad11a7e
@ -1,5 +1,6 @@
|
|||||||
|
|
||||||
[exabgp.api]
|
[exabgp.api]
|
||||||
|
ack = false
|
||||||
encoder = text
|
encoder = text
|
||||||
highres = false
|
highres = false
|
||||||
respawn = false
|
respawn = false
|
||||||
|
@ -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];
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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")
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user