Beispiel #1
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]
Beispiel #2
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]
Beispiel #3
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
Beispiel #4
0
    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
Beispiel #5
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
Beispiel #6
0
    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
Beispiel #7
0
    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
Beispiel #8
0
    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
Beispiel #9
0
    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
Beispiel #10
0
    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