Attribute-Unchanged

Test BGP address-family ipv6-unicast attribute-unchanged functionality. This command prevents the router from modifying specific BGP attributes when advertising IPv6 routes to a neighbor. The as-path option prevents the router from prepending its local AS to the path. The med option preserves the Multi-Exit Discriminator value without modification. The next-hop option keeps the original next-hop address instead of replacing it.

../../../../../../_images/attribute-unchanged.svg

Test eBGP IPv6 - Default behavior modifies attributes on re-advertisement

Description

Baseline test showing default eBGP re-advertisement behavior for IPv6. DUT1 (AS 200) originates 2001:db8:10::/64. DUT0 (AS 100) receives and forwards to DUT2 (AS 300) without attribute-unchanged. DUT2 should see next-hop changed to DUT0’s IP and AS-path prepended with AS 100.

Scenario

Step 1: Set the following configuration in DUT0 :

set interfaces ethernet eth0 address '2001:db8:1::100/64'
set interfaces ethernet eth1 address '2001:db8:2::100/64'
set protocols bgp 100 neighbor dut1 address-family ipv6-unicast activate
set protocols bgp 100 neighbor dut1 address-family ipv6-unicast route-map import PERMIT
set protocols bgp 100 neighbor dut1 remote-address '2001:db8:1::200'
set protocols bgp 100 neighbor dut1 remote-as 200
set protocols bgp 100 neighbor dut2 address-family ipv6-unicast activate
set protocols bgp 100 neighbor dut2 address-family ipv6-unicast route-map export PERMIT
set protocols bgp 100 neighbor dut2 remote-address '2001:db8:2::200'
set protocols bgp 100 neighbor dut2 remote-as 300
set protocols bgp 100 parameters router-id 1.1.1.100
set protocols route-map PERMIT rule 1 action permit
set system login user admin authentication encrypted-password '$6$GSjsCj8gHLv$/VcqU6FLi6CT2Oxn0MJQ2C2tqnRDrYKNF8HIYWJp68nvXvPdFccDsT04.WtigUONbKYrgKg8d6rEs8PjljMkH0'

Step 2: Set the following configuration in DUT1 :

set interfaces dummy dum0 address '2001:db8:10::1/64'
set interfaces ethernet eth0 address '2001:db8:1::200/64'
set protocols bgp 200 address-family ipv6-unicast redistribute connected route-map SET-MED
set protocols bgp 200 neighbor peer address-family ipv6-unicast activate
set protocols bgp 200 neighbor peer address-family ipv6-unicast route-map export SET-MED
set protocols bgp 200 neighbor peer remote-address '2001:db8:1::100'
set protocols bgp 200 neighbor peer remote-as 100
set protocols bgp 200 parameters router-id 1.1.1.200
set protocols route-map SET-MED rule 1 action permit
set protocols route-map SET-MED rule 1 set metric 50
set system login user admin authentication encrypted-password '$6$GSjsCj8gHLv$/VcqU6FLi6CT2Oxn0MJQ2C2tqnRDrYKNF8HIYWJp68nvXvPdFccDsT04.WtigUONbKYrgKg8d6rEs8PjljMkH0'

Step 3: Set the following configuration in DUT2 :

set interfaces ethernet eth0 address '2001:db8:2::200/64'
set protocols bgp 300 neighbor peer address-family ipv6-unicast activate
set protocols bgp 300 neighbor peer address-family ipv6-unicast route-map import PERMIT
set protocols bgp 300 neighbor peer remote-address '2001:db8:2::100'
set protocols bgp 300 neighbor peer remote-as 100
set protocols bgp 300 parameters router-id 3.3.3.3
set protocols route-map PERMIT rule 1 action permit
set system login user admin authentication encrypted-password '$6$GSjsCj8gHLv$/VcqU6FLi6CT2Oxn0MJQ2C2tqnRDrYKNF8HIYWJp68nvXvPdFccDsT04.WtigUONbKYrgKg8d6rEs8PjljMkH0'

Attention

Verify eBGP sessions establish on DUT0.

Step 4: Run command protocols bgp show ipv6 summary at DUT0 and check if output matches the following regular expressions:

2001:db8:1::200.*Established[\s\S]*2001:db8:2::200.*Established
Show output
IPv6 Unicast Summary:
BGP router identifier 1.1.1.100, local AS number 100 VRF default vrf-id 0
BGP table version 2
RIB entries 3, using 384 bytes of memory
Peers 2, using 47 KiB of memory

Neighbor        LocalAddr       V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down        State   PfxRcd   PfxSnt Desc
2001:db8:1::200 0.0.0.0         4        200         8         6        2    0    0 00:00:04  Established        2 (Policy) N/A
2001:db8:2::200 0.0.0.0         4        300         4         5        2    0    0 00:00:02  Established (Policy)        2 N/A

Total number of neighbors 2

Attention

Verify DUT2 receives route 2001:db8:10::/64 with next-hop as DUT0’s IP and AS-path 100 200.

Step 5: Run command protocols bgp show ipv6 2001:db8:10::/64 at DUT2 and check if output matches the following regular expressions:

100 200[\s\S]*2001:db8:2::100 from 2001:db8:2::100
Show output
BGP routing table entry for 2001:db8:10::/64, version 2
Paths: (1 available, best #1, table default)
  Not advertised to any peer
  100 200
    2001:db8:2::100 from 2001:db8:2::100 (1.1.1.100)
    (fe80::dcad:beff:feef:6c01) (used)
      Origin incomplete, valid, external, best (First path received)
      Last update: Thu Mar  5 14:46:56 2026

Test eBGP IPv6 - Attribute-unchanged as-path

Description

Verify that attribute-unchanged as-path prevents DUT0 from prepending its AS when re-advertising IPv6 routes. DUT0 forwards to DUT2 without adding AS 100 to the path.

Scenario

Step 1: Set the following configuration in DUT0 :

set interfaces ethernet eth0 address '2001:db8:1::100/64'
set interfaces ethernet eth1 address '2001:db8:2::100/64'
set protocols bgp 100 neighbor dut1 address-family ipv6-unicast activate
set protocols bgp 100 neighbor dut1 address-family ipv6-unicast route-map import PERMIT
set protocols bgp 100 neighbor dut1 remote-address '2001:db8:1::200'
set protocols bgp 100 neighbor dut1 remote-as 200
set protocols bgp 100 neighbor dut2 address-family ipv6-unicast activate
set protocols bgp 100 neighbor dut2 address-family ipv6-unicast attribute-unchanged as-path
set protocols bgp 100 neighbor dut2 address-family ipv6-unicast route-map export PERMIT
set protocols bgp 100 neighbor dut2 remote-address '2001:db8:2::200'
set protocols bgp 100 neighbor dut2 remote-as 300
set protocols bgp 100 parameters router-id 1.1.1.100
set protocols route-map PERMIT rule 1 action permit
set system login user admin authentication encrypted-password '$6$GSjsCj8gHLv$/VcqU6FLi6CT2Oxn0MJQ2C2tqnRDrYKNF8HIYWJp68nvXvPdFccDsT04.WtigUONbKYrgKg8d6rEs8PjljMkH0'

Step 2: Set the following configuration in DUT1 :

set interfaces dummy dum0 address '2001:db8:10::1/64'
set interfaces ethernet eth0 address '2001:db8:1::200/64'
set protocols bgp 200 address-family ipv6-unicast redistribute connected route-map SET-MED
set protocols bgp 200 neighbor peer address-family ipv6-unicast activate
set protocols bgp 200 neighbor peer address-family ipv6-unicast route-map export SET-MED
set protocols bgp 200 neighbor peer remote-address '2001:db8:1::100'
set protocols bgp 200 neighbor peer remote-as 100
set protocols bgp 200 parameters router-id 1.1.1.200
set protocols route-map SET-MED rule 1 action permit
set protocols route-map SET-MED rule 1 set metric 50
set system login user admin authentication encrypted-password '$6$GSjsCj8gHLv$/VcqU6FLi6CT2Oxn0MJQ2C2tqnRDrYKNF8HIYWJp68nvXvPdFccDsT04.WtigUONbKYrgKg8d6rEs8PjljMkH0'

Step 3: Set the following configuration in DUT2 :

set interfaces ethernet eth0 address '2001:db8:2::200/64'
set protocols bgp 300 neighbor peer address-family ipv6-unicast activate
set protocols bgp 300 neighbor peer address-family ipv6-unicast route-map import PERMIT
set protocols bgp 300 neighbor peer remote-address '2001:db8:2::100'
set protocols bgp 300 neighbor peer remote-as 100
set protocols bgp 300 parameters router-id 3.3.3.3
set protocols route-map PERMIT rule 1 action permit
set system login user admin authentication encrypted-password '$6$GSjsCj8gHLv$/VcqU6FLi6CT2Oxn0MJQ2C2tqnRDrYKNF8HIYWJp68nvXvPdFccDsT04.WtigUONbKYrgKg8d6rEs8PjljMkH0'

Attention

Verify eBGP sessions establish on DUT0.

Step 4: Run command protocols bgp show ipv6 summary at DUT0 and check if output matches the following regular expressions:

2001:db8:1::200.*Established[\s\S]*2001:db8:2::200.*Established
Show output
IPv6 Unicast Summary:
BGP router identifier 1.1.1.100, local AS number 100 VRF default vrf-id 0
BGP table version 2
RIB entries 3, using 384 bytes of memory
Peers 2, using 47 KiB of memory

Neighbor        LocalAddr       V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down        State   PfxRcd   PfxSnt Desc
2001:db8:1::200 0.0.0.0         4        200         8         6        2    0    0 00:00:02  Established        2 (Policy) N/A
2001:db8:2::200 0.0.0.0         4        300         2         3        0    0    0 00:00:01  Established (Policy)        0 N/A

Total number of neighbors 2

Attention

Verify DUT0 advertises route 2001:db8:10::/64 to DUT2 with AS-path 200 (not prepended).

Step 5: Run command protocols bgp show ipv6 neighbors neighbor dut2 advertised-routes at DUT0 and check if output matches the following regular expressions:

2001:db8:10::/64[\s\S]*\s200\s
Show output
BGP table version is 2, local router ID is 1.1.1.100, vrf id 0
Default local pref 100, local AS 100
local address (null)
Status codes:  s suppressed, d damped, h history, u unsorted, * valid, > best, = multipath,
               i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes:  i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 *>  2001:db8:1::/64  ::                                     0 200 ?
 *>  2001:db8:10::/64 ::                                     0 200 ?

Total number of prefixes 2

Test eBGP IPv6 - Attribute-unchanged next-hop

Description

Verify that attribute-unchanged next-hop preserves the original next-hop when re-advertising IPv6 routes. DUT0 forwards to DUT2 keeping DUT1’s global address as next-hop, but AS-path is still prepended with DUT0’s AS. Unlike IPv4 where the preserved next-hop is marked as (inaccessible), in IPv6 BGP updates carry both a global and a link-local next-hop, so FRR resolves reachability via the link-local address and the route remains usable.

Scenario

Step 1: Set the following configuration in DUT0 :

set interfaces ethernet eth0 address '2001:db8:1::100/64'
set interfaces ethernet eth1 address '2001:db8:2::100/64'
set protocols bgp 100 neighbor dut1 address-family ipv6-unicast activate
set protocols bgp 100 neighbor dut1 address-family ipv6-unicast route-map import PERMIT
set protocols bgp 100 neighbor dut1 remote-address '2001:db8:1::200'
set protocols bgp 100 neighbor dut1 remote-as 200
set protocols bgp 100 neighbor dut2 address-family ipv6-unicast activate
set protocols bgp 100 neighbor dut2 address-family ipv6-unicast attribute-unchanged next-hop
set protocols bgp 100 neighbor dut2 address-family ipv6-unicast route-map export PERMIT
set protocols bgp 100 neighbor dut2 remote-address '2001:db8:2::200'
set protocols bgp 100 neighbor dut2 remote-as 300
set protocols bgp 100 parameters router-id 1.1.1.100
set protocols route-map PERMIT rule 1 action permit
set system login user admin authentication encrypted-password '$6$GSjsCj8gHLv$/VcqU6FLi6CT2Oxn0MJQ2C2tqnRDrYKNF8HIYWJp68nvXvPdFccDsT04.WtigUONbKYrgKg8d6rEs8PjljMkH0'

Step 2: Set the following configuration in DUT1 :

set interfaces dummy dum0 address '2001:db8:10::1/64'
set interfaces ethernet eth0 address '2001:db8:1::200/64'
set protocols bgp 200 address-family ipv6-unicast redistribute connected route-map SET-MED
set protocols bgp 200 neighbor peer address-family ipv6-unicast activate
set protocols bgp 200 neighbor peer address-family ipv6-unicast route-map export SET-MED
set protocols bgp 200 neighbor peer remote-address '2001:db8:1::100'
set protocols bgp 200 neighbor peer remote-as 100
set protocols bgp 200 parameters router-id 1.1.1.200
set protocols route-map SET-MED rule 1 action permit
set protocols route-map SET-MED rule 1 set metric 50
set system login user admin authentication encrypted-password '$6$GSjsCj8gHLv$/VcqU6FLi6CT2Oxn0MJQ2C2tqnRDrYKNF8HIYWJp68nvXvPdFccDsT04.WtigUONbKYrgKg8d6rEs8PjljMkH0'

Step 3: Set the following configuration in DUT2 :

set interfaces ethernet eth0 address '2001:db8:2::200/64'
set protocols bgp 300 neighbor peer address-family ipv6-unicast activate
set protocols bgp 300 neighbor peer address-family ipv6-unicast route-map import PERMIT
set protocols bgp 300 neighbor peer remote-address '2001:db8:2::100'
set protocols bgp 300 neighbor peer remote-as 100
set protocols bgp 300 parameters router-id 3.3.3.3
set protocols route-map PERMIT rule 1 action permit
set system login user admin authentication encrypted-password '$6$GSjsCj8gHLv$/VcqU6FLi6CT2Oxn0MJQ2C2tqnRDrYKNF8HIYWJp68nvXvPdFccDsT04.WtigUONbKYrgKg8d6rEs8PjljMkH0'

Attention

Verify eBGP sessions establish on DUT0.

Step 4: Run command protocols bgp show ipv6 summary at DUT0 and check if output matches the following regular expressions:

2001:db8:1::200.*Established[\s\S]*2001:db8:2::200.*Established
Show output
IPv6 Unicast Summary:
BGP router identifier 1.1.1.100, local AS number 100 VRF default vrf-id 0
BGP table version 0
RIB entries 0, using 0 bytes of memory
Peers 2, using 47 KiB of memory

Neighbor        LocalAddr       V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down        State   PfxRcd   PfxSnt Desc
2001:db8:1::200 0.0.0.0         4        200         4         3        0    0    0 00:00:01  Established        0 (Policy) N/A
2001:db8:2::200 0.0.0.0         4        300         3         5        0    0    0 00:00:01  Established (Policy)        0 N/A

Total number of neighbors 2

Attention

Verify DUT2 receives route 2001:db8:10::/64 with original global next-hop preserved (DUT1) and AS-path 100 200.

Step 5: Run command protocols bgp show ipv6 2001:db8:10::/64 at DUT2 and check if output matches the following regular expressions:

100 200[\s\S]*2001:db8:1::200 from 2001:db8:2::100
Show output
BGP routing table entry for 2001:db8:10::/64, version 2
Paths: (1 available, best #1, table default)
  Not advertised to any peer
  100 200
    2001:db8:1::200 from 2001:db8:2::100 (1.1.1.100)
    (fe80::dcad:beff:feef:6c01) (used)
      Origin incomplete, valid, external, best (First path received)
      Last update: Thu Mar  5 14:47:25 2026

Test eBGP IPv6 - Attribute-unchanged med

Description

Verify that address-family ipv6-unicast attribute-unchanged med preserves the MED value when re-advertising routes. DUT1 sets MED 50 and DUT2 should see it unchanged.

Scenario

Step 1: Set the following configuration in DUT0 :

set interfaces ethernet eth0 address '2001:db8:1::100/64'
set interfaces ethernet eth1 address '2001:db8:2::100/64'
set protocols bgp 100 neighbor dut1 address-family ipv6-unicast activate
set protocols bgp 100 neighbor dut1 address-family ipv6-unicast route-map import PERMIT
set protocols bgp 100 neighbor dut1 remote-address '2001:db8:1::200'
set protocols bgp 100 neighbor dut1 remote-as 200
set protocols bgp 100 neighbor dut2 address-family ipv6-unicast activate
set protocols bgp 100 neighbor dut2 address-family ipv6-unicast attribute-unchanged med
set protocols bgp 100 neighbor dut2 address-family ipv6-unicast route-map export PERMIT
set protocols bgp 100 neighbor dut2 remote-address '2001:db8:2::200'
set protocols bgp 100 neighbor dut2 remote-as 300
set protocols bgp 100 parameters router-id 1.1.1.100
set protocols route-map PERMIT rule 1 action permit
set system login user admin authentication encrypted-password '$6$GSjsCj8gHLv$/VcqU6FLi6CT2Oxn0MJQ2C2tqnRDrYKNF8HIYWJp68nvXvPdFccDsT04.WtigUONbKYrgKg8d6rEs8PjljMkH0'

Step 2: Set the following configuration in DUT1 :

set interfaces dummy dum0 address '2001:db8:10::1/64'
set interfaces ethernet eth0 address '2001:db8:1::200/64'
set protocols bgp 200 address-family ipv6-unicast redistribute connected route-map SET-MED
set protocols bgp 200 neighbor peer address-family ipv6-unicast activate
set protocols bgp 200 neighbor peer address-family ipv6-unicast route-map export SET-MED
set protocols bgp 200 neighbor peer remote-address '2001:db8:1::100'
set protocols bgp 200 neighbor peer remote-as 100
set protocols bgp 200 parameters router-id 1.1.1.200
set protocols route-map SET-MED rule 1 action permit
set protocols route-map SET-MED rule 1 set metric 50
set system login user admin authentication encrypted-password '$6$GSjsCj8gHLv$/VcqU6FLi6CT2Oxn0MJQ2C2tqnRDrYKNF8HIYWJp68nvXvPdFccDsT04.WtigUONbKYrgKg8d6rEs8PjljMkH0'

Step 3: Set the following configuration in DUT2 :

set interfaces ethernet eth0 address '2001:db8:2::200/64'
set protocols bgp 300 neighbor peer address-family ipv6-unicast activate
set protocols bgp 300 neighbor peer address-family ipv6-unicast route-map import PERMIT
set protocols bgp 300 neighbor peer remote-address '2001:db8:2::100'
set protocols bgp 300 neighbor peer remote-as 100
set protocols bgp 300 parameters router-id 3.3.3.3
set protocols route-map PERMIT rule 1 action permit
set system login user admin authentication encrypted-password '$6$GSjsCj8gHLv$/VcqU6FLi6CT2Oxn0MJQ2C2tqnRDrYKNF8HIYWJp68nvXvPdFccDsT04.WtigUONbKYrgKg8d6rEs8PjljMkH0'

Attention

Verify eBGP sessions establish on DUT0.

Step 4: Run command protocols bgp show ipv6 summary at DUT0 and check if output matches the following regular expressions:

2001:db8:1::200.*Established[\s\S]*2001:db8:2::200.*Established
Show output
IPv6 Unicast Summary:
BGP router identifier 1.1.1.100, local AS number 100 VRF default vrf-id 0
BGP table version 2
RIB entries 3, using 384 bytes of memory
Peers 2, using 47 KiB of memory

Neighbor        LocalAddr       V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down        State   PfxRcd   PfxSnt Desc
2001:db8:1::200 0.0.0.0         4        200         7         6        2    0    0 00:00:03  Established        2 (Policy) N/A
2001:db8:2::200 0.0.0.0         4        300         2         3        0    0    0 00:00:01  Established (Policy)        0 N/A

Total number of neighbors 2

Attention

Verify DUT2 receives route 2001:db8:10::/64 with MED 50 preserved.

Step 5: Run command protocols bgp show ipv6 at DUT2 and check if output matches the following regular expressions:

2001:db8:10::/64[\s\S]*50
Show output
BGP table version is 2, local router ID is 3.3.3.3, vrf id 0
Default local pref 100, local AS 300
local address -
Status codes:  s suppressed, d damped, h history, u unsorted, * valid, > best, = multipath,
               i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes:  i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 *>  2001:db8:1::/64  fe80::dcad:beff:feef:6c01
                                            50             0 100 200 ?
 *>  2001:db8:10::/64 fe80::dcad:beff:feef:6c01
                                            50             0 100 200 ?

Displayed 2 routes and 2 total paths