Closed ANISH-GOTTAPU closed 2 years ago
Need to add check to start Ethernet&IPv4 only if physical ports are connected.
set_config throws error if vports are connected and ixNetwork starts Ethernet&IPv4 interfaces
test to reproduce the issue
import pytest def test_vxlan_compact(api, utils): count = 4 config = api.config() edge1_macs = get_macs("001801000011", count) edge2_macs = get_macs("001601000011", count) p1, p2 = config.ports.port(name="tx").port(name="rx") d1, d2 = config.devices.device(name="d1").device(name="d2") api.enable_scaling(True) e1, e2 = d1.ethernets.ethernet()[-1], d2.ethernets.ethernet()[-1] e1.port_name, e2.port_name = p1.name, p2.name e1.name, e2.name = "e1", "e2" e1.mac, e2.mac = "00:01:00:00:00:01", "00:01:00:00:00:02" ip1, ip2 = e1.ipv4_addresses.add(), e2.ipv4_addresses.add() ip1.name, ip2.name = "ip_d1", "ip_d2" ip1.address, ip2.address = "10.10.10.1", "10.10.10.2" ip1.gateway, ip2.gateway = "10.10.10.2", "10.10.10.1" bgp1, bgp2 = d1.bgp, d2.bgp bgp1.router_id, bgp2.router_id = "10.10.10.1", "10.10.10.2" bgp1_ipv4 = bgp1.ipv4_interfaces.add() bgp2_ipv4 = bgp2.ipv4_interfaces.add() bgp1_ipv4.ipv4_name, bgp2_ipv4.ipv4_name = ip1.name, ip2.name bgp1_peer, bgp2_peer = bgp1_ipv4.peers.add(), bgp2_ipv4.peers.add() bgp1_peer.name, bgp2_peer.name = "bgp_router1", "bgp_router2" bgp1_peer.peer_address, bgp2_peer.peer_address = "10.10.10.2", "10.10.10.1" bgp1_peer.as_type, bgp2_peer.as_type = "ebgp", "ebgp" bgp1_peer.as_number, bgp2_peer.as_number = 100, 200 # Create & advertise loopback under bgp in d1 & d2 d1_l1 = d1.ipv4_loopbacks.add() d1_l1.name = "d1_loopback1" d1_l1.eth_name = "e1" d1_l1.address = "1.1.1.1" bgp1_l1 = bgp1_peer.v4_routes.add(name="bgp_l1") bgp1_l1.addresses.add(address="1.1.1.1", prefix=32) d2_l1 = d2.ipv4_loopbacks.add() d2_l1.name = "d2_loopback1" d2_l1.eth_name = "e2" d2_l1.address = "2.2.2.2" bgp2_l1 = bgp2_peer.v4_routes.add(name="bgp2_l1") bgp2_l1.addresses.add(address="2.2.2.2", prefix=32) # Create vxlan on d1 d1_vxlan = d1.vxlan.v4_tunnels.add() d1_vxlan.vni = 1000 d1_vxlan.source_interface = d1_l1.name d1_vxlan.name = "d1_vxlan" # unicast communication vtep = d1_vxlan.destination_ip_mode.unicast.vteps.add() vtep.remote_vtep_address = "2.2.2.2" for i in range(1, count + 1): vtep.arp_suppression_cache.add(edge2_macs[i], "100.1.{}.2".format(i)) # Create vxlan on d2 d2_vxlan = d2.vxlan.v4_tunnels.add() d2_vxlan.vni = 1000 d2_vxlan.source_interface = d2_l1.name d2_vxlan.name = "d2_vxlan" # unicast communication vtep = d2_vxlan.destination_ip_mode.unicast.vteps.add() vtep.remote_vtep_address = "1.1.1.1" for i in range(1, count + 1): vtep.arp_suppression_cache.add(edge1_macs[i], "100.1.{}.1".format(i)) for i in range(1, count + 1): edge1_d = config.devices.device(name="edge1_d{}".format(i))[-1] edge2_d = config.devices.device(name="edge2_d{}".format(i))[-1] edge1_e = edge1_d.ethernets.ethernet()[-1] edge2_e = edge2_d.ethernets.ethernet()[-1] edge1_e.connection.vxlan_name = "d1_vxlan" edge2_e.connection.vxlan_name = "d2_vxlan" edge1_e.name = "edge1_e{}".format(i) edge2_e.name = "edge2_e{}".format(i) edge1_e.mac = edge1_macs[i] edge2_e.mac = edge2_macs[i] edge1_ip = edge1_e.ipv4_addresses.add() edge2_ip = edge2_e.ipv4_addresses.add() edge1_ip.name = "edge1_ip_d{}".format(i) edge2_ip.name = "edge2_ip_d{}".format(i) edge1_ip.address = "100.1.{}.1".format(i) edge2_ip.address = "100.1.{}.2".format(i) edge1_ip.gateway = "100.1.{}.2".format(i) edge2_ip.gateway = "100.1.{}.1".format(i) edge1_bgp, edge2_bgp = edge1_d.bgp, edge2_d.bgp edge1_bgp.router_id = "100.1.{}.1".format(i) edge2_bgp.router_id = "100.1.{}.2".format(i) edge1_bgp_ipv4 = edge1_bgp.ipv4_interfaces.add() edge2_bgp_ipv4 = edge2_bgp.ipv4_interfaces.add() edge1_bgp_ipv4.ipv4_name = "edge1_ip_d{}".format(i) edge2_bgp_ipv4.ipv4_name = "edge2_ip_d{}".format(i) edge1_bgp_peer = edge1_bgp_ipv4.peers.add() edge2_bgp_peer = edge2_bgp_ipv4.peers.add() edge1_bgp_peer.name = "edge1_bgp{}".format(i) edge2_bgp_peer.name = "edge2_bgp{}".format(i) edge1_bgp_peer.peer_address = "100.1.{}.2".format(i) edge2_bgp_peer.peer_address = "100.1.{}.1".format(i) edge1_bgp_peer.as_type, edge2_bgp_peer.as_type = "ibgp", "ibgp" edge1_bgp_peer.as_number, edge2_bgp_peer.as_number = 1000, 1000 edge1_bgp_rr = edge1_bgp_peer.v4_routes.add(name="A1{}".format(i)) edge1_bgp_rr.addresses.add( address="1.1.0.{}".format(i), count=180, prefix=32 ) edge1_bgp_rr2 = edge1_bgp_peer.v4_routes.add(name="D1{}".format(i)) edge1_bgp_rr2.addresses.add( address="2.1.0.{}".format(i), count=1, prefix=32 ) edge2_bgp_rr = edge2_bgp_peer.v4_routes.add(name="A2{}".format(i)) edge2_bgp_rr.addresses.add( address="3.1.0.{}".format(i), count=180, prefix=32 ) edge2_bgp_rr2 = edge2_bgp_peer.v4_routes.add(name="D2{}".format(i)) edge2_bgp_rr2.addresses.add( address="4.1.0.{}".format(i), count=1, prefix=32 ) a1_routes = ["A1{}".format(i) for i in range(1, count + 1)] d1_routes = ["D1{}".format(i) for i in range(1, count + 1)] a2_routes = ["A2{}".format(i) for i in range(1, count + 1)] d2_routes = ["D2{}".format(i) for i in range(1, count + 1)] flow = config.flows.flow(name="f1")[-1] flow.tx_rx.device.tx_names = a1_routes + d1_routes flow.tx_rx.device.rx_names = a2_routes + d2_routes flow.duration.fixed_packets.packets = count * 10 flow.metrics.enable = True flow.metrics.loss = True api.set_config(config) assert ( api._ixnetwork.Topology.find()[0] .DeviceGroup.find() .DeviceGroup.find() .DeviceGroup.find() .Multiplier ) == 4 assert ( api._ixnetwork.Topology.find()[0] .DeviceGroup.find() .DeviceGroup.find() .DeviceGroup.find() .NetworkGroup.find() .Multiplier ) == 2 def get_macs(mac, count, offset=1): """ Take mac as start mac returns the count of macs in a list """ mac_list = list() for i in range(count + 1): mac_address = "{:012X}".format(int(mac, 16) + offset * i) mac_address = ":".join( format(s, "02x") for s in bytearray.fromhex(mac_address) ) mac_list.append(mac_address) return mac_list if __name__ == "__main__": pytest.main(["-s", __file__])```
We will raise error when port is not configured. We need to fix error message. We will use this issue to fix the error string.
Need to add check to start Ethernet&IPv4 only if physical ports are connected.
set_config throws error if vports are connected and ixNetwork starts Ethernet&IPv4 interfaces
test to reproduce the issue