def test_iflist(self, mock_check_output): ip_addr_str = ( b'1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue\n' b' link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00\n' b' inet 127.0.0.1/8 scope host lo\n' b' inet6 ::1/128 scope host\n' b' valid_lft forever preferred_lft forever\n ' b'2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500' b' qdisc pfifo_fast qlen 1000\n ' b' link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff\n' b' inet 10.1.1.1/24 brd 10.1.1.255 scope global eth0\n' b' inet6 1111:2222:3333:4444:5555/64 scope link\n' b' valid_lft forever preferred_lft forever\n' b'3: sit0: <NOARP> mtu 1480 qdisc noop\n' b' link/sit 0.0.0.0 brd 0.0.0.0') mock_check_output.return_value = ip_addr_str interfaces = iflist() name, addr, mask = interfaces[0] self.assertEqual(b'lo', name) self.assertEqual(b'127.0.0.1', addr) self.assertEqual(b'8', mask) name, addr, mask = interfaces[1] self.assertEqual(b'eth0', name) self.assertEqual(b'10.1.1.1', addr) self.assertEqual(b'24', mask) # check ignore option interfaces = iflist(ignore=(b"lo", )) name, addr, mask = interfaces[0] self.assertEqual(b'eth0', name) self.assertEqual(b'10.1.1.1', addr) self.assertEqual(b'24', mask) with self.assertRaises(IndexError): name, addr, mask = interfaces[1] interfaces = iflist(ignore=(b"eth0", )) name, addr, mask = interfaces[0] self.assertEqual(b'lo', name) self.assertEqual(b'127.0.0.1', addr) self.assertEqual(b'8', mask) with self.assertRaises(IndexError): name, addr, mask = interfaces[1] # test with no input mock_check_output.return_value = '' interfaces = iflist() with self.assertRaises(IndexError): name, addr, mask = interfaces[0]
def test_iflist(self, mock_check_output): ip_addr_str = ( b'1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue\n' b' link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00\n' b' inet 127.0.0.1/8 scope host lo\n' b' inet6 ::1/128 scope host\n' b' valid_lft forever preferred_lft forever\n ' b'2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500' b' qdisc pfifo_fast qlen 1000\n ' b' link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff\n' b' inet 10.1.1.1/24 brd 10.1.1.255 scope global eth0\n' b' inet6 1111:2222:3333:4444:5555/64 scope link\n' b' valid_lft forever preferred_lft forever\n' b'3: sit0: <NOARP> mtu 1480 qdisc noop\n' b' link/sit 0.0.0.0 brd 0.0.0.0') mock_check_output.return_value = ip_addr_str interfaces = iflist() name, addr, mask = interfaces[0] self.assertEqual(b'lo', name) self.assertEqual(b'127.0.0.1', addr) self.assertEqual(b'8', mask) name, addr, mask = interfaces[1] self.assertEqual(b'eth0', name) self.assertEqual(b'10.1.1.1', addr) self.assertEqual(b'24', mask) # check ignore option interfaces = iflist(ignore=(b"lo",)) name, addr, mask = interfaces[0] self.assertEqual(b'eth0', name) self.assertEqual(b'10.1.1.1', addr) self.assertEqual(b'24', mask) with self.assertRaises(IndexError): name, addr, mask = interfaces[1] interfaces = iflist(ignore=(b"eth0",)) name, addr, mask = interfaces[0] self.assertEqual(b'lo', name) self.assertEqual(b'127.0.0.1', addr) self.assertEqual(b'8', mask) with self.assertRaises(IndexError): name, addr, mask = interfaces[1] # test with no input mock_check_output.return_value = '' interfaces = iflist() with self.assertRaises(IndexError): name, addr, mask = interfaces[0]
def _open_dhcp_ext_socket(self): # find configured external interface ip address for ifname, addr, mask in netns.iflist(): if ifname == self.conf.cisco_pnr.external_interface: break else: raise UnexpectedError(msg='Failed to find external intf ' 'matching config') # open, bind, and connect UDP socket s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.bind((addr, DHCP_SERVER_PORT)) s.connect((self.conf.cisco_pnr.dhcp_server_addr, self.conf.cisco_pnr.dhcp_server_port)) return s, addr
def _open_dns_int_socket(self): # list interfaces, make sure there is at least one interfaces = netns.iflist(ignore=("lo", )) if not interfaces: raise UnexpectedError(msg="Failed to find " "single interface in dhcp namespace") ifname, addr, mask = interfaces[0] # open socket for receiving DNS requests and sending DNS responses # on internal net s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind((addr, DNS_SERVER_PORT)) return s, addr, DNS_SERVER_PORT
def _open_dns_int_socket(self): # list interfaces, make sure there is at least one interfaces = netns.iflist(ignore=("lo",)) if not interfaces: raise UnexpectedError(msg="Failed to find " "single interface in dhcp namespace") ifname, addr, mask = interfaces[0] # open socket for receiving DNS requests and sending DNS responses # on internal net s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind((addr, DNS_SERVER_PORT)) return s, addr, DNS_SERVER_PORT
def _open_dns_ext_socket(self): # find configured external interface ip address for ifname, addr, mask in netns.iflist(): if ifname == self.conf.cisco_pnr.external_interface: break else: raise UnexpectedError(msg='Failed to find external ' 'interface matching config') # open, bind, and connect UDP socket s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.bind((addr, 0)) # any available port addr, port = s.getsockname() s.connect((self.conf.cisco_pnr.dns_server_addr, self.conf.cisco_pnr.dns_server_port)) return s, addr, port
def _open_dhcp_int_socket(self): # list interfaces, fail if not exactly one interfaces = netns.iflist(ignore=("lo",)) if not interfaces: raise UnexpectedError(msg="failed to find single interface " "in dhcp ns") addr = interfaces[0][1] # open socket for receiving DHCP requests on internal net recv_s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) recv_s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) recv_s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) recv_s.bind(("0.0.0.0", DHCP_SERVER_PORT)) # open socket for sending DHCP responses on internal net send_s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) send_s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) send_s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) send_s.bind((addr, DHCP_SERVER_PORT)) return recv_s, send_s, addr
def _open_dhcp_int_socket(self): # list interfaces, fail if not exactly one interfaces = netns.iflist(ignore=("lo", )) if not interfaces: raise UnexpectedError(msg="failed to find single interface " "in dhcp ns") addr = interfaces[0][1] # open socket for receiving DHCP requests on internal net recv_s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) recv_s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) recv_s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) recv_s.bind(("0.0.0.0", DHCP_SERVER_PORT)) # open socket for sending DHCP responses on internal net send_s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) send_s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) send_s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) send_s.bind((addr, DHCP_SERVER_PORT)) return recv_s, send_s, addr