def test_evpn_prefix_add_eth_auto_discovery(self, mock_call): # Prepare test data route_type = bgpspeaker.EVPN_ETH_AUTO_DISCOVERY route_dist = '65000:100' esi = { 'type': ESI_TYPE_LACP, 'mac_addr': 'aa:bb:cc:dd:ee:ff', 'port_key': 100, } ethernet_tag_id = EVPN_MAX_ET redundancy_mode = REDUNDANCY_MODE_ALL_ACTIVE next_hop = '0.0.0.0' expected_kwargs = { 'route_type': route_type, 'route_dist': route_dist, 'esi': esi, 'ethernet_tag_id': ethernet_tag_id, 'redundancy_mode': redundancy_mode, 'next_hop': next_hop, } # Test speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') speaker.evpn_prefix_add( route_type=route_type, route_dist=route_dist, esi=esi, ethernet_tag_id=ethernet_tag_id, redundancy_mode=redundancy_mode, ) # Check mock_call.assert_called_with( 'evpn_prefix.add_local', **expected_kwargs)
def test_flowspec_prefix_add_vpnv6(self, mock_call): # Prepare test data flowspec_family = bgpspeaker.FLOWSPEC_FAMILY_VPNV6 route_dist = '65001:100' rules = { 'dst_prefix': '2001::3/128/32', } actions = { 'traffic_marking': { 'dscp': 24, } } expected_kwargs = { 'flowspec_family': flowspec_family, 'route_dist': route_dist, 'rules': rules, 'actions': actions, } # Test speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') speaker.flowspec_prefix_add( flowspec_family=flowspec_family, route_dist=route_dist, rules=rules, actions=actions) # Check mock_call.assert_called_with( 'flowspec.add_local', **expected_kwargs)
def test_flowspec_prefix_add_ipv4(self, mock_call): # Prepare test data flowspec_family = bgpspeaker.FLOWSPEC_FAMILY_IPV4 rules = { 'dst_prefix': '10.60.1.0/24', } actions = { 'traffic_marking': { 'dscp': 24, } } expected_kwargs = { 'flowspec_family': flowspec_family, 'rules': rules, 'actions': actions, } # Test speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') speaker.flowspec_prefix_add( flowspec_family=flowspec_family, rules=rules, actions=actions) # Check mock_call.assert_called_with( 'flowspec.add', **expected_kwargs)
def test_evpn_prefix_add_pmsi_ingress_rep(self, mock_call): # Prepare test data route_type = bgpspeaker.EVPN_MULTICAST_ETAG_ROUTE route_dist = '65000:100' ethernet_tag_id = 200 next_hop = '0.0.0.0' ip_addr = '192.168.0.1' pmsi_tunnel_type = bgpspeaker.PMSI_TYPE_INGRESS_REP expected_kwargs = { 'route_type': route_type, 'route_dist': route_dist, 'ethernet_tag_id': ethernet_tag_id, 'next_hop': next_hop, 'ip_addr': ip_addr, 'pmsi_tunnel_type': pmsi_tunnel_type, } # Test speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') speaker.evpn_prefix_add( route_type=route_type, route_dist=route_dist, ethernet_tag_id=ethernet_tag_id, ip_addr=ip_addr, pmsi_tunnel_type=pmsi_tunnel_type, ) # Check mock_call.assert_called_with( 'evpn_prefix.add_local', **expected_kwargs)
def test_evpn_prefix_del_eth_segment(self, mock_call): # Prepare test data route_type = bgpspeaker.EVPN_ETH_SEGMENT route_dist = '65000:100' esi = { 'esi_type': ESI_TYPE_MAC_BASED, 'mac_addr': 'aa:bb:cc:dd:ee:ff', 'local_disc': 100, } ip_addr = '192.168.0.1' expected_kwargs = { 'route_type': route_type, 'route_dist': route_dist, 'esi': esi, 'ip_addr': ip_addr, } # Test speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') speaker.evpn_prefix_del( route_type=route_type, route_dist=route_dist, esi=esi, ip_addr=ip_addr, ) # Check mock_call.assert_called_with( 'evpn_prefix.delete_local', **expected_kwargs)
def test_evpn_prefix_del_ip_prefix_route(self, mock_call): # Prepare test data route_type = bgpspeaker.EVPN_IP_PREFIX_ROUTE route_dist = '65000:100' ethernet_tag_id = 200 ip_prefix = '192.168.0.0/24' expected_kwargs = { 'route_type': route_type, 'route_dist': route_dist, 'ethernet_tag_id': ethernet_tag_id, 'ip_prefix': ip_prefix, } # Test speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') speaker.evpn_prefix_del( route_type=route_type, route_dist=route_dist, ethernet_tag_id=ethernet_tag_id, ip_prefix=ip_prefix, ) # Check mock_call.assert_called_with( 'evpn_prefix.delete_local', **expected_kwargs)
def test_evpn_prefix_del_mac_ip_adv(self, mock_call): # Prepare test data route_type = bgpspeaker.EVPN_MAC_IP_ADV_ROUTE route_dist = '65000:100' ethernet_tag_id = 200 mac_addr = 'aa:bb:cc:dd:ee:ff' ip_addr = '192.168.0.1' expected_kwargs = { 'route_type': route_type, 'route_dist': route_dist, 'ethernet_tag_id': ethernet_tag_id, 'mac_addr': mac_addr, 'ip_addr': ip_addr, } # Test speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') speaker.evpn_prefix_del( route_type=route_type, route_dist=route_dist, ethernet_tag_id=ethernet_tag_id, mac_addr=mac_addr, ip_addr=ip_addr, ) # Check mock_call.assert_called_with( 'evpn_prefix.delete_local', **expected_kwargs)
def test_evpn_prefix_del_multicast_etag(self, mock_call): # Prepare test data route_type = bgpspeaker.EVPN_MULTICAST_ETAG_ROUTE route_dist = '65000:100' esi = 0 # denotes single-homed ethernet_tag_id = 200 mac_addr = 'aa:bb:cc:dd:ee:ff' ip_addr = '192.168.0.1' expected_kwargs = { 'route_type': route_type, 'route_dist': route_dist, # 'esi': esi, # should be ignored 'ethernet_tag_id': ethernet_tag_id, # 'mac_addr': mac_addr, # should be ignored 'ip_addr': ip_addr, } # Test speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') speaker.evpn_prefix_del( route_type=route_type, route_dist=route_dist, esi=esi, ethernet_tag_id=ethernet_tag_id, mac_addr=mac_addr, ip_addr=ip_addr, ) # Check mock_call.assert_called_with( 'evpn_prefix.delete_local', **expected_kwargs)
def test_evpn_prefix_del_auto_discovery(self, mock_call): # Prepare test data route_type = bgpspeaker.EVPN_ETH_AUTO_DISCOVERY route_dist = '65000:100' esi = { 'type': ESI_TYPE_LACP, 'mac_addr': 'aa:bb:cc:dd:ee:ff', 'port_key': 100, } ethernet_tag_id = EVPN_MAX_ET expected_kwargs = { 'route_type': route_type, 'route_dist': route_dist, 'esi': esi, 'ethernet_tag_id': ethernet_tag_id, } # Test speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') speaker.evpn_prefix_del( route_type=route_type, route_dist=route_dist, esi=esi, ethernet_tag_id=ethernet_tag_id, ) # Check mock_call.assert_called_with( 'evpn_prefix.delete_local', **expected_kwargs)
def add_bgp_speaker(self, speaker_as): curr_speaker = self.cache.get_bgp_speaker(speaker_as) if curr_speaker is not None: raise bgp_driver_exc.BgpSpeakerAlreadyScheduled( current_as=speaker_as, rtid=self.routerid) # os-ken can only support One speaker if self.cache.get_hosted_bgp_speakers_count() == 1: raise bgp_driver_exc.BgpSpeakerMaxScheduled(count=1) # Validate input parameters. # speaker_as must be an integer in the allowed range. utils.validate_as_num('local_as', speaker_as) # Notify os-ken about BGP Speaker addition. # Please note: Since, only the route-advertisement support is # implemented we are explicitly setting the bgp_server_port # attribute to 0 which disables listening on port 179. curr_speaker = bgpspeaker.BGPSpeaker( as_number=speaker_as, router_id=self.routerid, bgp_server_port=0, best_path_change_handler=best_path_change_cb, peer_down_handler=bgp_peer_down_cb, peer_up_handler=bgp_peer_up_cb) LOG.info( _LI('Added BGP Speaker for local_as=%(as)d with ' 'router_id= %(rtid)s.'), { 'as': speaker_as, 'rtid': self.routerid }) self.cache.put_bgp_speaker(speaker_as, curr_speaker)
def test_evpn_prefix_add_invalid_route_type(self, mock_call): # Prepare test data route_type = 'foobar' # Invalid EVPN route type route_dist = '65000:100' esi = 0 # denotes single-homed ethernet_tag_id = 200 mac_addr = 'aa:bb:cc:dd:ee:ff' ip_addr = '192.168.0.1' next_hop = '10.0.0.1' # Test speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') speaker.evpn_prefix_add( route_type=route_type, route_dist=route_dist, esi=esi, ethernet_tag_id=ethernet_tag_id, mac_addr=mac_addr, ip_addr=ip_addr, next_hop=next_hop, ) # Check mock_call.assert_called_with( 'evpn_prefix.add_local', 'Invalid arguments detected')
def test_evpn_prefix_add_ip_prefix_route(self, mock_call): # Prepare test data route_type = bgpspeaker.EVPN_IP_PREFIX_ROUTE route_dist = '65000:100' esi = 0 # denotes single-homed ethernet_tag_id = 200 ip_prefix = '192.168.0.0/24' gw_ip_addr = '172.16.0.1' next_hop = '0.0.0.0' expected_kwargs = { 'route_type': route_type, 'route_dist': route_dist, 'esi': esi, 'ethernet_tag_id': ethernet_tag_id, 'ip_prefix': ip_prefix, 'gw_ip_addr': gw_ip_addr, 'next_hop': next_hop, } # Test speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') speaker.evpn_prefix_add( route_type=route_type, route_dist=route_dist, esi=esi, ethernet_tag_id=ethernet_tag_id, ip_prefix=ip_prefix, gw_ip_addr=gw_ip_addr, ) # Check mock_call.assert_called_with( 'evpn_prefix.add_local', **expected_kwargs)
def test_evpn_prefix_add_mac_ip_adv(self, mock_call): # Prepare test data route_type = bgpspeaker.EVPN_MAC_IP_ADV_ROUTE route_dist = '65000:100' esi = 0 # denotes single-homed ethernet_tag_id = 200 mac_addr = 'aa:bb:cc:dd:ee:ff' ip_addr = '192.168.0.1' next_hop = '10.0.0.1' expected_kwargs = { 'route_type': route_type, 'route_dist': route_dist, 'esi': esi, 'ethernet_tag_id': ethernet_tag_id, 'mac_addr': mac_addr, 'ip_addr': ip_addr, 'next_hop': next_hop, } # Test speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') speaker.evpn_prefix_add( route_type=route_type, route_dist=route_dist, esi=esi, ethernet_tag_id=ethernet_tag_id, mac_addr=mac_addr, ip_addr=ip_addr, next_hop=next_hop, ) # Check mock_call.assert_called_with( 'evpn_prefix.add_local', **expected_kwargs)
def __init__(self, speaker_as, routerid, bgp_peer_down_cb=None, bgp_peer_up_cb=None): eventlet.monkey_patch(os=False, thread=False) self.speaker = bgpspeaker.BGPSpeaker( as_number=speaker_as, router_id=str(routerid), peer_down_handler=bgp_peer_down_cb, peer_up_handler=bgp_peer_up_cb)
def test_flowspec_prefix_del_ipv6(self, mock_call): # Prepare test data flowspec_family = bgpspeaker.FLOWSPEC_FAMILY_IPV6 rules = { 'dst_prefix': '2001::3/128/32', } expected_kwargs = { 'flowspec_family': flowspec_family, 'rules': rules, } # Test speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') speaker.flowspec_prefix_del(flowspec_family=flowspec_family, rules=rules) # Check mock_call.assert_called_with('flowspec.del', **expected_kwargs)
def test_evpn_prefix_add_invalid_pmsi_tunnel_type(self, mock_call): # Prepare test data route_type = bgpspeaker.EVPN_MULTICAST_ETAG_ROUTE route_dist = '65000:100' ethernet_tag_id = 200 next_hop = '0.0.0.0' ip_addr = '192.168.0.1' pmsi_tunnel_type = 1 # Test speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') speaker.evpn_prefix_add( route_type=route_type, route_dist=route_dist, ethernet_tag_id=ethernet_tag_id, ip_addr=ip_addr, pmsi_tunnel_type=pmsi_tunnel_type, ) # Check mock_call.assert_called_with( 'evpn_prefix.add_local', 'Invalid arguments detected')
def test_flowspec_prefix_del_vpnv4(self, mock_call): # Prepare test data flowspec_family = bgpspeaker.FLOWSPEC_FAMILY_VPNV4 route_dist = '65001:100' rules = { 'dst_prefix': '10.70.1.0/24', } expected_kwargs = { 'flowspec_family': flowspec_family, 'route_dist': route_dist, 'rules': rules, } # Test speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') speaker.flowspec_prefix_del(flowspec_family=flowspec_family, route_dist=route_dist, rules=rules) # Check mock_call.assert_called_with('flowspec.del_local', **expected_kwargs)