def test_bug_740(): """ http://www.xorp.org/bugzilla/show_bug.cgi?id=740 This test triggers a simple problem when there is both an import and an export policy. If the import policy uses the neighbor statement then BGP fails. The connection is established to verify that BGP is still alive. """ # Make a connection just to see if BGP is still alive coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") # Put an extra delay here so the TCP connection doesn't occur at the same # time as the peer is bounced due to the interface address changing. delay(2) coord("peer1 establish AS 75 holdtime 0 id 75.75.75.75 keepalive false") delay(2) coord("peer1 assert established") return True
def test_bug_740(): """ http://www.xorp.org/bugzilla/show_bug.cgi?id=740 This test triggers a simple problem when there is both an import and an export policy. If the import policy uses the neighbor statement then BGP fails. The connection is established to verify that BGP is still alive. """ # Make a connection just to see if BGP is still alive coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") # Put an extra delay here so the TCP connection doesn't occur at the same # time as the peer is bounced due to the interface address changing. delay(2) coord("peer1 establish AS 75 holdtime 0 id 75.75.75.75 keepalive false") delay(2) coord("peer1 assert established"); return True
def test1_1_B(): """ Direct connection Basic EBGP """ # configure the test peering. coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") coord("peer1 establish AS 65001 holdtime 0 id 1.2.3.4 keepalive false") delay(2) coord("peer1 assert established"); return True
def test1_1_B(): """ Direct connection Basic EBGP """ # configure the test peering. coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") coord("peer1 establish AS 65001 holdtime 0 id 1.2.3.4 keepalive false") delay(2) coord("peer1 assert established") return True
def test1_13_A(): """ MULTI_EXIT_DISC Attribute """ coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") coord("target 127.0.0.1 10002") coord("initialise attach peer2") coord("peer1 establish AS 1 holdtime 0 id 10.0.0.1 keepalive false") coord("peer2 establish AS 2 holdtime 0 id 10.0.0.2 keepalive false") packet1 = "packet update \ nexthop 127.0.0.1 \ origin 0 \ aspath 2 \ med 42 \ nlri 172.16.0.0/16" packet2 = "packet update \ nexthop 127.0.0.1 \ origin 0 \ aspath empty \ localpref 100 \ nlri 172.16.0.0/16" coord("peer1 expect %s" % packet1) coord("peer2 expect %s" % packet2) if not config.conf_add_static_route4(builddir(1), "172.16.0.0/16"): return False delay(10) coord("peer1 assert established") coord("peer2 assert established") coord("peer1 assert queue 0") coord("peer2 assert queue 0") return True
def test1_10_C(): """ To verify that a BGP router properly generates the ORIGIN attribute """ coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") coord("target 127.0.0.1 10002") coord("initialise attach peer2") coord("target 127.0.0.1 10003") coord("initialise attach peer3") coord("peer1 establish AS 65001 holdtime 0 id 10.0.0.1 keepalive false") coord("peer2 establish AS 65000 holdtime 0 id 10.0.0.2 keepalive false") coord("peer3 establish AS 65000 holdtime 0 id 10.0.0.3 keepalive false") delay(2) coord("peer1 assert established"); coord("peer2 assert established"); coord("peer3 assert established"); delay(2) incomplete = 2 coord("peer1 expect packet update \ nexthop 127.0.0.1 \ origin %s \ aspath 65000 \ med 0 nlri \ 172.16.0.0/16" % incomplete) if not config.conf_add_static_route4(builddir(1), "172.16.0.0/16"): return False delay(10) coord("peer1 assert established") coord("peer2 assert established") coord("peer3 assert established") coord("peer1 assert queue 0") return True
def test_bug_360(): """ http://www.xorp.org/bugzilla/show_bug.cgi?id=360 The bug report stated that the output from the bgp show route command can vary. This test populates the routing table with similar values and repeats the show command a number of times. NOTE: No problem was ever found. """ coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") coord("peer1 establish AS 75 holdtime 0 id 75.75.75.75 keepalive false") delay(2) coord("peer1 assert established"); delay(2) packet = "packet update \ nexthop 127.0.0.2 \ origin %s \ aspath %s \ nlri %s" incomplete = "2" coord("peer1 send %s" % (packet % (incomplete, "75,50,25", "25.25.25.0/24"))) coord("peer1 send %s" % (packet % (incomplete, "75,50,25", "25.25.0.0/16"))) coord("peer1 send %s" % (packet % (incomplete, "75,50,25", "25.0.0.0/8"))) coord("peer1 send %s" % (packet % (incomplete, "75", "75.75.75.0/24"))) coord("peer1 send %s" % (packet % (incomplete, "75", "75.75.0.0/16"))) coord("peer1 send %s" % (packet % (incomplete, "75", "75.70.0.0/8"))) if not config.conf_add_static_route4(builddir(1), "100.100.100.0/24"): return False if not config.conf_add_static_route4(builddir(1), "100.100.0.0/16"): return False if not config.conf_add_static_route4(builddir(1), "100.0.0.0/8"): return False reference_output = \ """*> 100.100.100.0/24 127.0.0.1 0.0.0.0 i *> 100.100.0.0/16 127.0.0.1 0.0.0.0 i *> 100.0.0.0/8 127.0.0.1 0.0.0.0 i *> 25.25.25.0/24 127.0.0.2 75.75.75.75 75 50 25 ? *> 25.25.0.0/16 127.0.0.2 75.75.75.75 75 50 25 ? *> 25.0.0.0/8 127.0.0.2 75.75.75.75 75 50 25 ? *> 75.75.75.0/24 127.0.0.2 75.75.75.75 75 ? *> 75.75.0.0/16 127.0.0.2 75.75.75.75 75 ? *> 75.0.0.0/8 127.0.0.2 75.75.75.75 75 ? """ for l in range(100): result, output = config.show_bgp_routes(builddir(1)) import string # Looks like the xorpsh inserts carriage returns. output = output.replace('\r', '') # XXX # This might be a problem on windows, in later installations of python # we can use splitlines. lines = string.split(output, '\n') output = "" for i in lines: if i and i[0] == '*': output += i + '\n' if reference_output != output: reference = '/tmp/reference' actual = '/tmp/actual' print 'Output did now match check %s and %s' % (reference, actual) file = open(reference, 'w') file.write(reference_output) file.close() file = open(actual, 'w') file.write(output) file.close() print '<@' + reference_output + '@>' print "===" print '<@' + output + '@>' return False return True
def test_bug_649(): """ http://www.xorp.org/bugzilla/show_bug.cgi?id=649 Trigger a problem caused by BGP receiving the "route_info_changed" XRL. 1) A default static route is required with a metric of 1 2) Add a route that does not cover the nexthop the route should reduce the coverage of the default route. Causing the RIB to send an "route_info_invalid" XRL to sent to BGP. 3) Install a route that exactly matches the range covered by the RIB causing a "route_info_changed" XRL to be sent to BGP. Note that at the time of writing BGP installed all routes with a metric of 0 and the static route has a metric of 1. Only if the routes match and the metric changes should there be an upcall. """ coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") coord("peer1 establish AS 65001 holdtime 0 id 1.2.3.4 keepalive false") delay(2) coord("peer1 assert established"); # Install the default route. if not config.conf_add_static_route4(builddir(1), "0.0.0.0/0"): return False delay(2) packet = "packet update \ nexthop 10.0.0.1\ origin 0 \ aspath 65001 \ nlri %s" # Send in a route that does not cover the nexthop. coord("peer1 send %s" % (packet % ("10.1.0.0/20"))) # Send in a route that covers the nexthop and matches the next hop resolver # value. coord("peer1 send %s" % (packet % ("10.0.0.0/16"))) coord("peer1 assert established"); return True
def test4_12(): """ Test route flap damping """ coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") coord("target 127.0.0.1 10002") coord("initialise attach peer2") coord("peer1 establish AS 1 holdtime 0 id 10.0.0.1 keepalive false") coord("peer2 establish AS 3 holdtime 0 id 10.0.0.2 keepalive false") delay(2) coord("peer1 assert established"); coord("peer2 assert established"); packet = "packet update \ nexthop %s \ origin 0 \ aspath %s \ med 0 \ nlri 192.1.0.0/16" spacket1 = packet % ("127.0.0.3", "1,12") spacket2 = packet % ("127.0.0.3", "1,14") # The nexthop is not re-written as it is on a common subnet. epacket1 = packet % ("127.0.0.3", "2,1,12") epacket2 = packet % ("127.0.0.3", "2,1,14") # This is a hack to test that no packets arrive on this peer. coord("peer1 expect %s" % spacket1) coord("peer2 expect %s" % epacket1) coord("peer2 expect %s" % epacket2) coord("peer2 send packet update withdraw 192.1.0.0/16") for i in range(5): coord("peer1 send %s" % spacket1) coord("peer1 send %s" % spacket2) delay(10) coord("peer1 assert established") coord("peer2 assert established") coord("peer1 assert queue 1") coord("peer2 assert queue 0") # The release of the damped packet. coord("peer2 expect %s" % epacket2) sleep = 5 * 60 print 'Sleeping for %d seconds, waiting for damped route' % sleep delay(sleep) # Make sure that at the end of the test all the connections still exist. coord("peer1 assert established") coord("peer2 assert established") coord("peer1 assert queue 1") coord("peer2 assert queue 0") return True
def test4_6_A(): """ Verify that the NO_EXPORT community can be set on a redistributed route """ coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") coord("target 127.0.0.1 10002") coord("initialise attach peer2") coord("peer1 establish AS 65001 holdtime 0 id 10.0.0.1 keepalive false") coord("peer2 establish AS 65002 holdtime 0 id 10.0.0.2 keepalive false") delay(2) coord("peer1 assert established"); coord("peer2 assert established"); delay(2) packet = "packet update \ nexthop 127.0.0.1 \ origin 0 \ aspath 65000 \ med 0 \ nlri 172.16.0.0/16 \ community NO_EXPORT" coord("peer1 expect %s" % packet) coord("peer2 expect %s" % packet) if not config.conf_add_static_route4(builddir(1), "172.16.0.0/16"): return False delay(10) coord("peer1 assert established") coord("peer2 assert established") coord("peer1 assert queue 0") coord("peer2 assert queue 0") return True
def test1_10_C(): """ To verify that a BGP router properly generates the ORIGIN attribute """ coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") coord("target 127.0.0.1 10002") coord("initialise attach peer2") coord("target 127.0.0.1 10003") coord("initialise attach peer3") coord("peer1 establish AS 65001 holdtime 0 id 10.0.0.1 keepalive false") coord("peer2 establish AS 65000 holdtime 0 id 10.0.0.2 keepalive false") coord("peer3 establish AS 65000 holdtime 0 id 10.0.0.3 keepalive false") delay(2) coord("peer1 assert established") coord("peer2 assert established") coord("peer3 assert established") delay(2) incomplete = 2 coord("peer1 expect packet update \ nexthop 127.0.0.1 \ origin %s \ aspath 65000 \ med 0 nlri \ 172.16.0.0/16" % incomplete) if not config.conf_add_static_route4(builddir(1), "172.16.0.0/16"): return False delay(10) coord("peer1 assert established") coord("peer2 assert established") coord("peer3 assert established") coord("peer1 assert queue 0") return True
def test1_6_B(): """ Cease notification message """ # Set the prefix limit to 3 config.conf_set_prefix_limit(builddir(1), "peer1", 3) coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") coord("peer1 establish AS 65001 holdtime 0 id 1.2.3.4 keepalive false") delay(2) coord("peer1 assert established") packet = "packet update \ nexthop 127.0.0.2 \ origin 0 \ aspath 65001 \ med 0\ nlri %s" cease = 6 coord("peer1 expect packet notify %s" % cease) # Send four NRLIs to trigger a cease coord("peer1 send %s" % (packet % "172.16.0.0/16")) coord("peer1 send %s" % (packet % "172.16.0.0/17")) coord("peer1 send %s" % (packet % "172.16.0.0/18")) coord("peer1 send %s" % (packet % "172.16.0.0/19")) delay(2) coord("peer1 assert idle") coord("peer1 assert queue 0") return True
def test_dump_1(): """ Test that new sessions correctly receive all the routes that they should. Peer1 populated with routes. Peer2 repeatedly connects to verify that the BGP dump code is working correctly """ coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") coord("peer1 establish AS 65000 holdtime 0 id 75.75.75.75 keepalive false") delay(2) coord("peer1 assert established") delay(2) coord("peer1 send dump mrtd update ../../data/bgp/icsi1.mrtd", \ noblock=True) bgp_peer_unchanged("peer1") coord("target 127.0.0.1 10002") coord("initialise attach peer2") for i in range(10): os.system("date") print "Iteration: ", i coord("peer2 establish AS 65001 holdtime 0 id 1.1.1.1 keepalive false",noblock=True) delay(2) bgp_peer_unchanged("peer2") coord("peer2 assert established") coord("peer2 disconnect") return True
def test_policy_med1(): """ Introduce a med of 0 and expect a med of 2 at the peers. Allows the testing of import and export policies to change the med. """ coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") coord("target 127.0.0.1 10002") coord("initialise attach peer2") coord("target 127.0.0.1 10003") coord("initialise attach peer3") coord("peer1 establish AS 1 holdtime 0 id 10.0.0.1 keepalive false") coord("peer2 establish AS 1 holdtime 0 id 10.0.0.2 keepalive false") coord("peer3 establish AS 3 holdtime 0 id 10.0.0.3 keepalive false") delay(2) coord("peer1 assert established") coord("peer2 assert established") coord("peer3 assert established") delay(2) packet = "packet update \ nexthop %s \ origin 0 \ aspath %s \ med %s \ nlri 192.1.0.0/16" spacket = packet % ("127.0.0.2", "1", "0") # The nexthop is not re-written as it is on a common subnet. epacket = packet % ("127.0.0.2", "2,1", "42") coord("peer1 expect %s" % epacket) coord("peer2 expect %s" % epacket) coord("peer3 expect %s" % epacket) delay(2) coord("peer2 send %s" % spacket) delay(10) coord("peer1 assert established") coord("peer2 assert established") coord("peer3 assert established") coord("peer1 assert queue 1") coord("peer2 assert queue 1") coord("peer3 assert queue 0") return True
def test_bug_360(): """ http://www.xorp.org/bugzilla/show_bug.cgi?id=360 The bug report stated that the output from the bgp show route command can vary. This test populates the routing table with similar values and repeats the show command a number of times. NOTE: No problem was ever found. """ coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") coord("peer1 establish AS 75 holdtime 0 id 75.75.75.75 keepalive false") delay(2) coord("peer1 assert established") delay(2) packet = "packet update \ nexthop 127.0.0.2 \ origin %s \ aspath %s \ nlri %s" incomplete = "2" coord("peer1 send %s" % (packet % (incomplete, "75,50,25", "25.25.25.0/24"))) coord("peer1 send %s" % (packet % (incomplete, "75,50,25", "25.25.0.0/16"))) coord("peer1 send %s" % (packet % (incomplete, "75,50,25", "25.0.0.0/8"))) coord("peer1 send %s" % (packet % (incomplete, "75", "75.75.75.0/24"))) coord("peer1 send %s" % (packet % (incomplete, "75", "75.75.0.0/16"))) coord("peer1 send %s" % (packet % (incomplete, "75", "75.70.0.0/8"))) if not config.conf_add_static_route4(builddir(1), "100.100.100.0/24"): return False if not config.conf_add_static_route4(builddir(1), "100.100.0.0/16"): return False if not config.conf_add_static_route4(builddir(1), "100.0.0.0/8"): return False reference_output = \ """*> 100.100.100.0/24 127.0.0.1 0.0.0.0 i *> 100.100.0.0/16 127.0.0.1 0.0.0.0 i *> 100.0.0.0/8 127.0.0.1 0.0.0.0 i *> 25.25.25.0/24 127.0.0.2 75.75.75.75 75 50 25 ? *> 25.25.0.0/16 127.0.0.2 75.75.75.75 75 50 25 ? *> 25.0.0.0/8 127.0.0.2 75.75.75.75 75 50 25 ? *> 75.75.75.0/24 127.0.0.2 75.75.75.75 75 ? *> 75.75.0.0/16 127.0.0.2 75.75.75.75 75 ? *> 75.0.0.0/8 127.0.0.2 75.75.75.75 75 ? """ for l in range(100): result, output = config.show_bgp_routes(builddir(1)) import string # Looks like the xorpsh inserts carriage returns. output = output.replace('\r', '') # XXX # This might be a problem on windows, in later installations of python # we can use splitlines. lines = string.split(output, '\n') output = "" for i in lines: if i and i[0] == '*': output += i + '\n' if reference_output != output: reference = '/tmp/reference' actual = '/tmp/actual' print 'Output did now match check %s and %s' % (reference, actual) file = open(reference, 'w') file.write(reference_output) file.close() file = open(actual, 'w') file.write(output) file.close() print '<@' + reference_output + '@>' print "===" print '<@' + output + '@>' return False return True
def test1_13_C(): """ MULTI_EXIT_DISC Attribute """ coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") coord("target 127.0.0.1 10002") coord("initialise attach peer2") coord("peer1 establish AS 1 holdtime 0 id 10.0.0.1 keepalive false") coord("peer2 establish AS 2 holdtime 0 id 10.0.0.2 keepalive false") packet = "packet update \ origin 0 \ %s \ nlri 172.16.0.0/16" spacket = packet % "nexthop 127.0.0.2 aspath empty med 42" # The nexthop is not re-written as it is on a common subnet. epacket = packet % "nexthop 127.0.0.2 aspath 2 med 0" coord("peer1 expect %s" % epacket) coord("peer2 expect %s" % epacket) coord("peer2 send %s" % spacket) delay(10) coord("peer1 assert established") coord("peer2 assert established") coord("peer1 assert queue 0") coord("peer2 assert queue 1") return True
def test1_15_B(): """ ATOMIC_AGGREGATE Attribute """ coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") coord("target 127.0.0.1 10002") coord("initialise attach peer2") coord("target 127.0.0.1 10003") coord("initialise attach peer3") delay(2) coord("peer1 establish AS 1 holdtime 0 id 10.0.0.1 keepalive false") coord("peer2 establish AS 2 holdtime 0 id 10.0.0.2 keepalive false") coord("peer3 establish AS 4 holdtime 0 id 10.0.0.3 keepalive false") packet1 = "packet update \ nexthop 127.0.0.2 \ origin 0 \ aspath %s \ med 0 \ nlri 192.0.0.0/8" packet2 = "packet update \ nexthop 127.0.0.2 \ origin 0 \ aspath %s \ med 0 \ nlri 192.1.0.0/16" spacket1 = packet1 % "1" spacket2 = packet2 % "2" # # XXX # This test is not complete the expect packets should check for: # Atomic Aggregate Attribute and Aggregator Attribute AS/3 10.0.0.1 # # epacket1 = packet1 % "3,1" # epacket2 = packet2 % "3,2" # coord("peer1 expect %s" % epacket2) # coord("peer2 expect %s" % epacket1) # coord("peer3 expect %s" % epacket1) # coord("peer3 expect %s" % epacket2) coord("peer1 send %s" % spacket1) coord("peer2 send %s" % spacket2) delay(10) coord("peer1 trie recv lookup 192.1.0.0/8 aspath 3") coord("peer1 trie recv lookup 192.1.0.0/16 not") coord("peer2 trie recv lookup 192.1.0.0/8 aspath 3") coord("peer2 trie recv lookup 192.1.0.0/16 not") coord("peer3 trie recv lookup 192.1.0.0/8 aspath 3") coord("peer3 trie recv lookup 192.1.0.0/16 not") # coord("peer1 assert queue 0") # coord("peer2 assert queue 0") # coord("peer3 assert queue 0") coord("peer1 assert established") coord("peer2 assert established") coord("peer3 assert established") return True
def test1_12_AB(): """ Check the rewriting of the NEXT_HOP attribute. """ coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") coord("target 127.0.0.1 10002") coord("initialise attach peer2") coord("peer1 establish AS 1 holdtime 0 id 10.0.0.1 keepalive false") coord("peer2 establish AS 2 holdtime 0 id 10.0.0.2 keepalive false") delay(2) coord("peer1 assert established") coord("peer2 assert established") delay(2) packet = "packet update \ nexthop 127.0.0.2 \ origin 0 \ nlri 172.16.0.0/16 %s" coord("peer1 expect %s" % (packet % "aspath 2 med 0")) coord("peer2 expect %s" % (packet % "aspath empty localpref 100")) if not config.conf_add_static_route4(builddir(1), "172.16.0.0/16", "127.0.0.2"): return False delay(10) coord("peer1 assert established") coord("peer2 assert established") coord("peer1 assert queue 0") coord("peer2 assert queue 0") return True
def test4_11_A(): """ Test route flap damping """ coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") coord("target 127.0.0.1 10002") coord("initialise attach peer2") coord("target 127.0.0.1 10003") coord("initialise attach peer3") coord("peer1 establish AS 1 holdtime 0 id 10.0.0.1 keepalive false") coord("peer2 establish AS 1 holdtime 0 id 10.0.0.2 keepalive false") coord("peer3 establish AS 3 holdtime 0 id 10.0.0.3 keepalive false") delay(2) coord("peer1 assert established"); coord("peer2 assert established"); coord("peer3 assert established"); delay(2) packet = "packet update \ nexthop %s \ origin 0 \ aspath %s \ med 0 \ nlri 192.1.0.0/16" spacket = packet % ("127.0.0.2", "1") # The nexthop is not re-written as it is on a common subnet. epacket = packet % ("127.0.0.2", "2,1") coord("peer1 expect %s" % epacket) coord("peer2 expect %s" % epacket) coord("peer3 expect %s" % epacket) delay(2) coord("peer1 send %s" % spacket) delay(10) coord("peer1 assert established") coord("peer2 assert established") coord("peer3 assert established") coord("peer1 assert queue 1") coord("peer2 assert queue 1") coord("peer3 assert queue 0") return True
def test_bug_649(): """ http://www.xorp.org/bugzilla/show_bug.cgi?id=649 Trigger a problem caused by BGP receiving the "route_info_changed" XRL. 1) A default static route is required with a metric of 1 2) Add a route that does not cover the nexthop the route should reduce the coverage of the default route. Causing the RIB to send an "route_info_invalid" XRL to sent to BGP. 3) Install a route that exactly matches the range covered by the RIB causing a "route_info_changed" XRL to be sent to BGP. Note that at the time of writing BGP installed all routes with a metric of 0 and the static route has a metric of 1. Only if the routes match and the metric changes should there be an upcall. """ coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") coord("peer1 establish AS 65001 holdtime 0 id 1.2.3.4 keepalive false") delay(2) coord("peer1 assert established") # Install the default route. if not config.conf_add_static_route4(builddir(1), "0.0.0.0/0"): return False delay(2) packet = "packet update \ nexthop 10.0.0.1\ origin 0 \ aspath 65001 \ nlri %s" # Send in a route that does not cover the nexthop. coord("peer1 send %s" % (packet % ("10.1.0.0/20"))) # Send in a route that covers the nexthop and matches the next hop resolver # value. coord("peer1 send %s" % (packet % ("10.0.0.0/16"))) coord("peer1 assert established") return True
def test1_13_B(): """ MULTI_EXIT_DISC Attribute """ coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") coord("target 127.0.0.1 10002") coord("initialise attach peer2") coord("peer1 establish AS 1 holdtime 0 id 10.0.0.1 keepalive false") coord("peer2 establish AS 2 holdtime 0 id 10.0.0.2 keepalive false") packet = "packet update \ nexthop 127.0.0.2 \ origin 0 \ aspath 1 \ %s \ nlri 172.16.0.0/16" spacket = packet % "med 42" epacket = packet % "localpref 100" coord("peer1 expect %s" % epacket) coord("peer2 expect %s" % epacket) coord("peer1 send %s" % spacket) delay(10) coord("peer1 assert established") coord("peer2 assert established") coord("peer1 assert queue 1") coord("peer2 assert queue 0") return True
def test1_15_A(): """ ATOMIC_AGGREGATE Attribute """ coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") coord("target 127.0.0.1 10002") coord("initialise attach peer2") coord("target 127.0.0.1 10003") coord("initialise attach peer3") delay(2) coord("peer1 establish AS 1 holdtime 0 id 10.0.0.1 keepalive false") coord("peer2 establish AS 2 holdtime 0 id 10.0.0.2 keepalive false") coord("peer3 establish AS 4 holdtime 0 id 10.0.0.3 keepalive false") packet1 = "packet update \ nexthop 127.0.0.2 \ origin 0 \ aspath %s \ med 0 \ nlri 192.0.0.0/8" packet2 = "packet update \ nexthop 127.0.0.2 \ origin 0 \ aspath %s \ med 0 \ nlri 192.1.0.0/16" spacket1 = packet1 % "1" spacket2 = packet2 % "2" epacket1 = packet1 % "3,1" epacket2 = packet2 % "3,2" coord("peer1 expect %s" % epacket2) coord("peer2 expect %s" % epacket1) coord("peer3 expect %s" % epacket1) coord("peer3 expect %s" % epacket2) coord("peer1 send %s" % spacket1) coord("peer2 send %s" % spacket2) delay(10) coord("peer1 assert queue 0") coord("peer2 assert queue 0") coord("peer3 assert queue 0") coord("peer1 assert established") coord("peer2 assert established") coord("peer3 assert established") return True
def test_dump_1(): """ Test that new sessions correctly receive all the routes that they should. Peer1 populated with routes. Peer2 repeatedly connects to verify that the BGP dump code is working correctly """ coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") coord("peer1 establish AS 65000 holdtime 0 id 75.75.75.75 keepalive false") delay(2) coord("peer1 assert established") delay(2) coord("peer1 send dump mrtd update ../../data/bgp/icsi1.mrtd", \ noblock=True) bgp_peer_unchanged("peer1") coord("target 127.0.0.1 10002") coord("initialise attach peer2") for i in range(10): os.system("date") print "Iteration: ", i coord("peer2 establish AS 65001 holdtime 0 id 1.1.1.1 keepalive false", noblock=True) delay(2) bgp_peer_unchanged("peer2") coord("peer2 assert established") coord("peer2 disconnect") return True
def test1_6_B(): """ Cease notification message """ # Set the prefix limit to 3 config.conf_set_prefix_limit(builddir(1), "peer1", 3) coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") coord("peer1 establish AS 65001 holdtime 0 id 1.2.3.4 keepalive false") delay(2) coord("peer1 assert established"); packet = "packet update \ nexthop 127.0.0.2 \ origin 0 \ aspath 65001 \ med 0\ nlri %s" cease = 6 coord("peer1 expect packet notify %s" % cease) # Send four NRLIs to trigger a cease coord("peer1 send %s" % (packet % "172.16.0.0/16")) coord("peer1 send %s" % (packet % "172.16.0.0/17")) coord("peer1 send %s" % (packet % "172.16.0.0/18")) coord("peer1 send %s" % (packet % "172.16.0.0/19")) delay(2) coord("peer1 assert idle") coord("peer1 assert queue 0") return True
def test3_8_A(): """ To verify that correct handling of NLRI field errors in UPDATE messages """ print "Manual checks" print "1) Verify that the multicast NLRI generated an error message" print "2) Verify the route has not been installed" # configure the test peering. coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") coord("peer1 establish AS 65001 holdtime 0 id 1.2.3.4 keepalive false") delay(2) coord("peer1 assert established") bad_packet = "packet update \ origin 0 \ aspath 65001 \ nexthop 127.0.0.1 \ nlri 172.16.0.0/16 \ nlri 224.0.0.5/16" coord("peer1 send %s" % bad_packet) delay(10) coord("peer1 assert established") return True
def test1_12_AB(): """ Check the rewriting of the NEXT_HOP attribute. """ coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") coord("target 127.0.0.1 10002") coord("initialise attach peer2") coord("peer1 establish AS 1 holdtime 0 id 10.0.0.1 keepalive false") coord("peer2 establish AS 2 holdtime 0 id 10.0.0.2 keepalive false") delay(2) coord("peer1 assert established"); coord("peer2 assert established"); delay(2) packet = "packet update \ nexthop 127.0.0.2 \ origin 0 \ nlri 172.16.0.0/16 %s" coord("peer1 expect %s" % (packet % "aspath 2 med 0")) coord("peer2 expect %s" % (packet % "aspath empty localpref 100")) if not config.conf_add_static_route4(builddir(1), "172.16.0.0/16", "127.0.0.2"): return False delay(10) coord("peer1 assert established") coord("peer2 assert established") coord("peer1 assert queue 0") coord("peer2 assert queue 0") return True
def test4_6_A(): """ Verify that the NO_EXPORT community can be set on a redistributed route """ coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") coord("target 127.0.0.1 10002") coord("initialise attach peer2") coord("peer1 establish AS 65001 holdtime 0 id 10.0.0.1 keepalive false") coord("peer2 establish AS 65002 holdtime 0 id 10.0.0.2 keepalive false") delay(2) coord("peer1 assert established") coord("peer2 assert established") delay(2) packet = "packet update \ nexthop 127.0.0.1 \ origin 0 \ aspath 65000 \ med 0 \ nlri 172.16.0.0/16 \ community NO_EXPORT" coord("peer1 expect %s" % packet) coord("peer2 expect %s" % packet) if not config.conf_add_static_route4(builddir(1), "172.16.0.0/16"): return False delay(10) coord("peer1 assert established") coord("peer2 assert established") coord("peer1 assert queue 0") coord("peer2 assert queue 0") return True
def test4_8_A(): """ Verify correct operation of the multiprotocol extension """ coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") coord("peer1 establish AS 1 holdtime 0 id 10.0.0.1 keepalive false") delay(2) coord("peer1 assert established") delay(2) # packet = "packet update \ # nexthop 127.0.0.1 \ # origin 0 \ # aspath 65000 \ # med 0 \ # nlri 172.16.0.0/16 \ # community NO_EXPORT" # coord("peer1 expect %s" % packet) if not config.conf_add_static_route4(builddir(1), "16.0.0.0/4"): return False delay(10) coord("peer1 assert established") coord("peer1 assert queue 0") return True
def test4_11_A(): """ Test route flap damping """ coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") coord("target 127.0.0.1 10002") coord("initialise attach peer2") coord("target 127.0.0.1 10003") coord("initialise attach peer3") coord("peer1 establish AS 1 holdtime 0 id 10.0.0.1 keepalive false") coord("peer2 establish AS 1 holdtime 0 id 10.0.0.2 keepalive false") coord("peer3 establish AS 3 holdtime 0 id 10.0.0.3 keepalive false") delay(2) coord("peer1 assert established") coord("peer2 assert established") coord("peer3 assert established") delay(2) packet = "packet update \ nexthop %s \ origin 0 \ aspath %s \ med 0 \ nlri 192.1.0.0/16" spacket = packet % ("127.0.0.2", "1") # The nexthop is not re-written as it is on a common subnet. epacket = packet % ("127.0.0.2", "2,1") coord("peer1 expect %s" % epacket) coord("peer2 expect %s" % epacket) coord("peer3 expect %s" % epacket) delay(2) coord("peer1 send %s" % spacket) delay(10) coord("peer1 assert established") coord("peer2 assert established") coord("peer3 assert established") coord("peer1 assert queue 1") coord("peer2 assert queue 1") coord("peer3 assert queue 0") return True
def test3_8_A(): """ To verify that correct handling of NLRI field errors in UPDATE messages """ print "Manual checks" print "1) Verify that the multicast NLRI generated an error message" print "2) Verify the route has not been installed" # configure the test peering. coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") coord("peer1 establish AS 65001 holdtime 0 id 1.2.3.4 keepalive false") delay(2) coord("peer1 assert established"); bad_packet = "packet update \ origin 0 \ aspath 65001 \ nexthop 127.0.0.1 \ nlri 172.16.0.0/16 \ nlri 224.0.0.5/16" coord("peer1 send %s" % bad_packet) delay(10) coord("peer1 assert established") return True
def test4_11_BCD(): """ Test route flap damping """ coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") coord("target 127.0.0.1 10002") coord("initialise attach peer2") coord("target 127.0.0.1 10003") coord("initialise attach peer3") coord("peer1 establish AS 1 holdtime 0 id 10.0.0.1 keepalive false") coord("peer2 establish AS 1 holdtime 0 id 10.0.0.2 keepalive false") coord("peer3 establish AS 3 holdtime 0 id 10.0.0.3 keepalive false") delay(2) coord("peer1 assert established") coord("peer2 assert established") coord("peer3 assert established") delay(2) packet = "packet update \ nexthop %s \ origin 0 \ aspath %s \ med 0 \ nlri 192.1.0.0/16" spacket = packet % ("127.0.0.3", "1") # The nexthop is not re-written as it is on a common subnet. epacket2 = packet % ("127.0.0.2", "2,1") epacket3 = packet % ("127.0.0.3", "2,1") coord("peer1 expect %s" % epacket3) coord("peer2 expect %s" % epacket3) coord("peer3 expect %s" % epacket3) delay(2) # 9. TR2 Sends an update message with a route of 192.1.0.0/16 ... coord("peer2 send %s" % spacket) coord("peer1 assert established") coord("peer2 assert established") coord("peer3 assert established") coord("peer1 assert queue 1") coord("peer2 assert queue 1") coord("peer3 assert queue 0") spacket = packet % ("127.0.0.2", "1") coord("peer3 expect %s" % epacket2) coord("peer3 expect %s" % epacket3) coord("peer3 expect %s" % epacket2) coord("peer3 expect %s" % epacket3) delay(2) # Flap the route from peer1 spacket = packet % ("127.0.0.2", "1") coord("peer1 send %s" % spacket) coord("peer1 send packet update withdraw 192.1.0.0/16") coord("peer1 send %s" % spacket) coord("peer1 send packet update withdraw 192.1.0.0/16") delay(2) coord("peer1 assert established") coord("peer2 assert established") coord("peer3 assert established") coord("peer1 assert queue 1") coord("peer2 assert queue 1") coord("peer3 assert queue 0") # Part C coord("peer1 send %s" % spacket) coord("peer1 send packet update withdraw 192.1.0.0/16") coord("peer1 send %s" % spacket) # coord("peer1 send packet update withdraw 192.1.0.0/16") # Part D delay(10) # The release of the damped packet. coord("peer3 expect %s" % epacket2) sleep = 5 * 60 print 'Sleeping for %d seconds, waiting for damped route' % sleep delay(sleep) # Make sure that at the end of the test all the connections still exist. coord("peer1 assert established") coord("peer2 assert established") coord("peer3 assert established") coord("peer1 assert queue 1") coord("peer2 assert queue 1") coord("peer3 assert queue 0") return True
def test4_8_A(): """ Verify correct operation of the multiprotocol extension """ coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") coord("peer1 establish AS 1 holdtime 0 id 10.0.0.1 keepalive false") delay(2) coord("peer1 assert established"); delay(2) # packet = "packet update \ # nexthop 127.0.0.1 \ # origin 0 \ # aspath 65000 \ # med 0 \ # nlri 172.16.0.0/16 \ # community NO_EXPORT" # coord("peer1 expect %s" % packet) if not config.conf_add_static_route4(builddir(1), "16.0.0.0/4"): return False delay(10) coord("peer1 assert established") coord("peer1 assert queue 0") return True
def test4_12(): """ Test route flap damping """ coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") coord("target 127.0.0.1 10002") coord("initialise attach peer2") coord("peer1 establish AS 1 holdtime 0 id 10.0.0.1 keepalive false") coord("peer2 establish AS 3 holdtime 0 id 10.0.0.2 keepalive false") delay(2) coord("peer1 assert established") coord("peer2 assert established") packet = "packet update \ nexthop %s \ origin 0 \ aspath %s \ med 0 \ nlri 192.1.0.0/16" spacket1 = packet % ("127.0.0.3", "1,12") spacket2 = packet % ("127.0.0.3", "1,14") # The nexthop is not re-written as it is on a common subnet. epacket1 = packet % ("127.0.0.3", "2,1,12") epacket2 = packet % ("127.0.0.3", "2,1,14") # This is a hack to test that no packets arrive on this peer. coord("peer1 expect %s" % spacket1) coord("peer2 expect %s" % epacket1) coord("peer2 expect %s" % epacket2) coord("peer2 send packet update withdraw 192.1.0.0/16") for i in range(5): coord("peer1 send %s" % spacket1) coord("peer1 send %s" % spacket2) delay(10) coord("peer1 assert established") coord("peer2 assert established") coord("peer1 assert queue 1") coord("peer2 assert queue 0") # The release of the damped packet. coord("peer2 expect %s" % epacket2) sleep = 5 * 60 print 'Sleeping for %d seconds, waiting for damped route' % sleep delay(sleep) # Make sure that at the end of the test all the connections still exist. coord("peer1 assert established") coord("peer2 assert established") coord("peer1 assert queue 1") coord("peer2 assert queue 0") return True
def test4_11_BCD(): """ Test route flap damping """ coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") coord("target 127.0.0.1 10002") coord("initialise attach peer2") coord("target 127.0.0.1 10003") coord("initialise attach peer3") coord("peer1 establish AS 1 holdtime 0 id 10.0.0.1 keepalive false") coord("peer2 establish AS 1 holdtime 0 id 10.0.0.2 keepalive false") coord("peer3 establish AS 3 holdtime 0 id 10.0.0.3 keepalive false") delay(2) coord("peer1 assert established"); coord("peer2 assert established"); coord("peer3 assert established"); delay(2) packet = "packet update \ nexthop %s \ origin 0 \ aspath %s \ med 0 \ nlri 192.1.0.0/16" spacket = packet % ("127.0.0.3", "1") # The nexthop is not re-written as it is on a common subnet. epacket2 = packet % ("127.0.0.2", "2,1") epacket3 = packet % ("127.0.0.3", "2,1") coord("peer1 expect %s" % epacket3) coord("peer2 expect %s" % epacket3) coord("peer3 expect %s" % epacket3) delay(2) # 9. TR2 Sends an update message with a route of 192.1.0.0/16 ... coord("peer2 send %s" % spacket) coord("peer1 assert established") coord("peer2 assert established") coord("peer3 assert established") coord("peer1 assert queue 1") coord("peer2 assert queue 1") coord("peer3 assert queue 0") spacket = packet % ("127.0.0.2", "1") coord("peer3 expect %s" % epacket2) coord("peer3 expect %s" % epacket3) coord("peer3 expect %s" % epacket2) coord("peer3 expect %s" % epacket3) delay(2) # Flap the route from peer1 spacket = packet % ("127.0.0.2", "1") coord("peer1 send %s" % spacket) coord("peer1 send packet update withdraw 192.1.0.0/16") coord("peer1 send %s" % spacket) coord("peer1 send packet update withdraw 192.1.0.0/16") delay(2) coord("peer1 assert established") coord("peer2 assert established") coord("peer3 assert established") coord("peer1 assert queue 1") coord("peer2 assert queue 1") coord("peer3 assert queue 0") # Part C coord("peer1 send %s" % spacket) coord("peer1 send packet update withdraw 192.1.0.0/16") coord("peer1 send %s" % spacket) # coord("peer1 send packet update withdraw 192.1.0.0/16") # Part D delay(10) # The release of the damped packet. coord("peer3 expect %s" % epacket2) sleep = 5 * 60 print 'Sleeping for %d seconds, waiting for damped route' % sleep delay(sleep) # Make sure that at the end of the test all the connections still exist. coord("peer1 assert established") coord("peer2 assert established") coord("peer3 assert established") coord("peer1 assert queue 1") coord("peer2 assert queue 1") coord("peer3 assert queue 0") return True
def test_bug_639(): """ http://www.xorp.org/bugzilla/show_bug.cgi?id=639 BGP and STATIC install the same route, this route also resolved the nexthop. The introduction of the policy to redistribute static triggers the problem in the RIB. This emulates the order of events when the router is being configured and a peering comes up. """ coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") coord("peer1 establish AS 65001 holdtime 0 id 1.2.3.4 keepalive false") delay(2) coord("peer1 assert established"); incomplete = "2" packet = "packet update \ nexthop %s \ origin " + incomplete + "\ aspath 65001 \ med 0 \ nlri %s" if not config.conf_add_static_route4(builddir(1), "192.168.0.0/16"): return False delay(2) coord("peer1 send %s" % (packet % ("192.168.0.1", "192.168.0.0/16"))) if not config.conf_redist_static(builddir(1), False): return False delay(5) coord("peer1 assert established"); return True
def test_bug_639(): """ http://www.xorp.org/bugzilla/show_bug.cgi?id=639 BGP and STATIC install the same route, this route also resolved the nexthop. The introduction of the policy to redistribute static triggers the problem in the RIB. This emulates the order of events when the router is being configured and a peering comes up. """ coord("reset") coord("target 127.0.0.1 10001") coord("initialise attach peer1") coord("peer1 establish AS 65001 holdtime 0 id 1.2.3.4 keepalive false") delay(2) coord("peer1 assert established") incomplete = "2" packet = "packet update \ nexthop %s \ origin " + incomplete + "\ aspath 65001 \ med 0 \ nlri %s" if not config.conf_add_static_route4(builddir(1), "192.168.0.0/16"): return False delay(2) coord("peer1 send %s" % (packet % ("192.168.0.1", "192.168.0.0/16"))) if not config.conf_redist_static(builddir(1), False): return False delay(5) coord("peer1 assert established") return True