Ejemplo n.º 1
0
    def test_ovirtmgmtm_to_ovs(self):
        """ Test transformation of initial management network to OVS.
        # TODO: test it with ovirtmgmt and test-network
        # NOTE: without default route
        # TODO: more asserts
        """
        with veth_pair() as (left, right):
            addrAdd(left, IP_ADDRESS, IP_CIDR)
            addrAdd(left, IPv6_ADDRESS, IPv6_CIDR, 6)
            linkSet(left, ['up'])
            with dnsmasqDhcp(left):
                network = {
                    NETWORK_NAME: {
                        'nic': right,
                        'bootproto': 'dhcp',
                        'bridged': True,
                        'blockingdhcp': True
                    }
                }
                options = NOCHK
                options['ovs'] = False

                try:
                    status, msg = self.setupNetworks(network, {}, options)
                    self.assertEqual(status, SUCCESS, msg)
                    self.assertNetworkExists(NETWORK_NAME)

                    options['ovs'] = True
                    status, msg = self.setupNetworks(network, {}, options)
                    self.assertEqual(status, SUCCESS, msg)
                    self.assertNetworkExists(NETWORK_NAME)
                finally:
                    dhcp.delete_dhclient_leases(NETWORK_NAME, True, False)
Ejemplo n.º 2
0
def _set_ip_config(iface, ipv4, ipv6, port, blockingdhcp):
    net_dev = NetDevice(iface, iproute2, ipv4=ipv4, ipv6=ipv6,
                        blockingdhcp=blockingdhcp)
    DynamicSourceRoute.addInterfaceTracking(net_dev)
    ipwrapper.linkSet(iface, ['down'])
    if ipv4.address:
        ipwrapper.addrAdd(iface, ipv4.address, ipv4.netmask)
    if ipv4.gateway and ipv4.defaultRoute:
        ipwrapper.routeAdd(['default', 'via', ipv4.gateway])
    if ipv6.address or ipv6.ipv6autoconf or ipv6.dhcpv6:
        sysctl.disable_ipv6(iface, disable=False)
    else:
        sysctl.disable_ipv6(iface)
    if ipv6.address:
        ipv6addr, ipv6netmask = ipv6.address.split('/')
        ipwrapper.addrAdd(iface, ipv6addr, ipv6netmask, family=6)
        if ipv6.gateway:
            ipwrapper.routeAdd(['default', 'via', ipv6.gateway], dev=iface,
                               family=6)
    ipwrapper.linkSet(port, ['up'])
    ipwrapper.linkSet(iface, ['up'])
    if ipv4.bootproto == 'dhcp':
        _run_dhclient(iface, blockingdhcp, ipv4.defaultRoute, 4)
    if ipv6.dhcpv6:
        _run_dhclient(iface, blockingdhcp, ipv6.defaultRoute, 6)
    iproute2._addSourceRoute(net_dev)
Ejemplo n.º 3
0
    def test_ovirtmgmtm_to_ovs(self):
        """ Test transformation of initial management network to OVS.
        # TODO: test it with ovirtmgmt and test-network
        # NOTE: without default route
        # TODO: more asserts
        """
        with veth_pair() as (left, right):
            addrAdd(left, IP_ADDRESS, IP_CIDR)
            addrAdd(left, IPv6_ADDRESS, IPv6_CIDR, 6)
            linkSet(left, ['up'])
            with dnsmasqDhcp(left):
                network = {
                    NETWORK_NAME: {'nic': right, 'bootproto': 'dhcp',
                                   'bridged': True, 'blockingdhcp': True}}
                options = NOCHK
                options['ovs'] = False

                try:
                    status, msg = self.setupNetworks(network, {}, options)
                    self.assertEqual(status, SUCCESS, msg)
                    self.assertNetworkExists(NETWORK_NAME)

                    options['ovs'] = True
                    status, msg = self.setupNetworks(network, {}, options)
                    self.assertEqual(status, SUCCESS, msg)
                    self.assertNetworkExists(NETWORK_NAME)
                finally:
                    dhcp.delete_dhclient_leases(NETWORK_NAME, True, False)
Ejemplo n.º 4
0
def _set_ip_config(ip_config):
    iface = ip_config.top_dev
    ipv4 = ip_config.ipv4
    ipv6 = ip_config.ipv6
    port = ip_config.port
    blocking_dhcp = ip_config.blocking_dhcp

    net_dev = NetDevice(iface, iproute2, ipv4=ipv4, ipv6=ipv6, blockingdhcp=blocking_dhcp)
    DynamicSourceRoute.addInterfaceTracking(net_dev)
    ipwrapper.linkSet(iface, ["down"])
    if ipv4.address:
        ipwrapper.addrAdd(iface, ipv4.address, ipv4.netmask)
    if ipv4.gateway and ipv4.defaultRoute:
        ipwrapper.routeAdd(["default", "via", ipv4.gateway])
    if ipv6.address or ipv6.ipv6autoconf or ipv6.dhcpv6:
        sysctl.disable_ipv6(iface, disable=False)
    else:
        sysctl.disable_ipv6(iface)
    if ipv6.address:
        ipv6addr, ipv6netmask = ipv6.address.split("/")
        ipwrapper.addrAdd(iface, ipv6addr, ipv6netmask, family=6)
        if ipv6.gateway:
            ipwrapper.routeAdd(["default", "via", ipv6.gateway], dev=iface, family=6)
    ipwrapper.linkSet(port, ["up"])
    ipwrapper.linkSet(iface, ["up"])
    if ipv4.bootproto == "dhcp":
        _run_dhclient(iface, blocking_dhcp, ipv4.defaultRoute, 4)
    if ipv6.dhcpv6:
        _run_dhclient(iface, blocking_dhcp, ipv6.defaultRoute, 6)
    iproute2._addSourceRoute(net_dev)
Ejemplo n.º 5
0
def _set_network_ip_config(ip_config):
    """Set IP configuration on Vdsm controlled OVS network"""
    iface = ip_config.top_dev
    ipv4 = ip_config.ipv4
    ipv6 = ip_config.ipv6
    port = ip_config.port
    blocking_dhcp = ip_config.blocking_dhcp

    net_dev = NetDevice(iface, iproute2, ipv4=ipv4, ipv6=ipv6,
                        blockingdhcp=blocking_dhcp)
    DynamicSourceRoute.addInterfaceTracking(net_dev)
    ipwrapper.linkSet(iface, ['down'])
    if ipv4.address:
        ipwrapper.addrAdd(iface, ipv4.address, ipv4.netmask)
    if ipv4.gateway and ipv4.defaultRoute:
        ipwrapper.routeAdd(['default', 'via', ipv4.gateway])
    if ipv6.address or ipv6.ipv6autoconf or ipv6.dhcpv6:
        sysctl.disable_ipv6(iface, disable=False)
    else:
        sysctl.disable_ipv6(iface)
    if ipv6.address:
        ipv6addr, ipv6netmask = ipv6.address.split('/')
        ipwrapper.addrAdd(iface, ipv6addr, ipv6netmask, family=6)
        if ipv6.gateway:
            ipwrapper.routeAdd(['default', 'via', ipv6.gateway], dev=iface,
                               family=6)
    ipwrapper.linkSet(port, ['up'])
    ipwrapper.linkSet(iface, ['up'])
    if ipv4.bootproto == 'dhcp':
        _run_dhclient(iface, blocking_dhcp, ipv4.defaultRoute, 4)
    if ipv6.dhcpv6:
        _run_dhclient(iface, blocking_dhcp, ipv6.defaultRoute, 6)
    iproute2._addSourceRoute(net_dev)
Ejemplo n.º 6
0
 def _setIpConfig(self, iface):
     ipConfig = iface.ipConfig
     if ipConfig.ipaddr:
         self.removeIpConfig(iface)
         ipwrapper.addrAdd(iface.name, ipConfig.ipaddr,
                           ipConfig.netmask)
         if ipConfig.gateway and ipConfig.defaultRoute:
             ipwrapper.routeAdd(['default', 'via', ipConfig.gateway])
Ejemplo n.º 7
0
 def test_local_auto_with_static_address_without_ra_server(self):
     with dummy_device() as dev:
         ipwrapper.addrAdd(dev, '2001::88', '64', family=6)
         ip_addrs = addresses.getIpAddrs()[dev]
         self.assertEqual(True, addresses.is_ipv6_local_auto(dev))
         self.assertEqual(1, len(ip_addrs))
         self.assertTrue(addresses.is_ipv6(ip_addrs[0]))
         self.assertTrue(not addresses.is_dynamic(ip_addrs[0]))
Ejemplo n.º 8
0
def setIP(dummy_name, ipaddr, netmask, family=4):
    try:
        addrAdd(dummy_name, ipaddr, netmask, family)
    except IPRoute2Error as e:
        message = ('Failed to add the IPv%s address %s/%s to device %s: %s' %
                   (family, ipaddr, netmask, dummy_name, e))
        if family == 6:
            message += ('; NetworkManager may have set the sysctl disable_ipv6'
                        ' flag on the device, please see e.g. RH BZ #1102064')
        raise SkipTest(message)
Ejemplo n.º 9
0
Archivo: dummy.py Proyecto: Caez83/vdsm
def setIP(dummy_name, ipaddr, netmask, family=4):
    try:
        addrAdd(dummy_name, ipaddr, netmask, family)
    except IPRoute2Error as e:
        message = ('Failed to add the IPv%s address %s/%s to device %s: %s'
                   % (family, ipaddr, netmask, dummy_name, e))
        if family == 6:
            message += ('; NetworkManager may have set the sysctl disable_ipv6'
                        ' flag on the device, please see e.g. RH BZ #1102064')
        raise SkipTest(message)
Ejemplo n.º 10
0
 def set_ip(self, ipaddr, netmask, family=4):
     try:
         addrAdd(self.devName, ipaddr, netmask, family)
     except IPRoute2Error as e:
         message = ('Failed to add the IPv%s address %s/%s to device %s: %s'
                    % (family, ipaddr, netmask, self.devName, e))
         if family == 6:
             message += ("; NetworkManager may have set the sysctl "
                         "disable_ipv6 flag on the device, please see e.g. "
                         "RH BZ #1102064")
         raise SkipTest(message)
Ejemplo n.º 11
0
 def set_ip(self, ipaddr, netmask, family=4):
     try:
         addrAdd(self.devName, ipaddr, netmask, family)
     except IPRoute2Error as e:
         message = (
             'Failed to add the IPv%s address %s/%s to device %s: %s' %
             (family, ipaddr, netmask, self.devName, e))
         if family == 6:
             message += ("; NetworkManager may have set the sysctl "
                         "disable_ipv6 flag on the device, please see e.g. "
                         "RH BZ #1102064")
         raise SkipTest(message)
Ejemplo n.º 12
0
    def test_ip_info(self):
        def get_ip_info(*a, **kw):
            """filter away ipv6 link local addresses that may or may not exist
            on the device depending on OS configuration"""
            ipv4addr, ipv4netmask, ipv4addrs, ipv6addrs = \
                netinfo.getIpInfo(*a, **kw)
            ipv6addrs = [
                addr for addr in ipv6addrs
                if not netaddr.IPAddress(addr.split('/')[0]).is_link_local()]
            return ipv4addr, ipv4netmask, ipv4addrs, ipv6addrs

        IP_ADDR = '192.0.2.2'
        IP_ADDR_SECOND = '192.0.2.3'
        IP_ADDR_GW = '192.0.2.1'
        IP_ADDR2 = '198.51.100.9'
        IP_ADDR3 = '198.51.100.11'
        IP_ADDR2_GW = '198.51.100.1'
        IPV6_ADDR = '2607:f0d0:1002:51::4'
        NET_MASK = '255.255.255.0'
        PREFIX_LENGTH = 24
        IPV6_PREFIX_LENGTH = 64
        IP_ADDR_CIDR = self._cidr_form(IP_ADDR, PREFIX_LENGTH)
        IP_ADDR_SECOND_CIDR = self._cidr_form(IP_ADDR_SECOND, PREFIX_LENGTH)
        IP_ADDR2_CIDR = self._cidr_form(IP_ADDR2, PREFIX_LENGTH)
        IP_ADDR3_CIDR = self._cidr_form(IP_ADDR3, 32)
        IPV6_ADDR_CIDR = self._cidr_form(IPV6_ADDR, IPV6_PREFIX_LENGTH)
        with dummy_device() as device:
            ipwrapper.addrAdd(device, IP_ADDR, PREFIX_LENGTH)
            ipwrapper.addrAdd(device, IP_ADDR_SECOND, PREFIX_LENGTH)
            ipwrapper.addrAdd(device, IP_ADDR2, PREFIX_LENGTH)
            ipwrapper.addrAdd(device, IPV6_ADDR, IPV6_PREFIX_LENGTH, family=6)
            # 32 bit addresses are reported slashless by netlink
            ipwrapper.addrAdd(device, IP_ADDR3, 32)
            self.assertEqual(
                get_ip_info(device),
                (IP_ADDR, NET_MASK,
                 [IP_ADDR_CIDR, IP_ADDR2_CIDR, IP_ADDR3_CIDR,
                  IP_ADDR_SECOND_CIDR],
                 [IPV6_ADDR_CIDR]))
            self.assertEqual(
                get_ip_info(device, ipv4_gateway=IP_ADDR_GW),
                (IP_ADDR, NET_MASK,
                 [IP_ADDR_CIDR, IP_ADDR2_CIDR, IP_ADDR3_CIDR,
                  IP_ADDR_SECOND_CIDR],
                 [IPV6_ADDR_CIDR]))
            self.assertEqual(
                get_ip_info(device, ipv4_gateway=IP_ADDR2_GW),
                (IP_ADDR2, NET_MASK,
                 [IP_ADDR_CIDR, IP_ADDR2_CIDR, IP_ADDR3_CIDR,
                  IP_ADDR_SECOND_CIDR],
                 [IPV6_ADDR_CIDR]))
Ejemplo n.º 13
0
    def test_ip_info(self):
        def get_ip_info(*a, **kw):
            """filter away ipv6 link local addresses that may or may not exist
            on the device depending on OS configuration"""
            ipv4addr, ipv4netmask, ipv4addrs, ipv6addrs = \
                addresses.getIpInfo(*a, **kw)
            ipv6addrs = [
                addr for addr in ipv6addrs
                if not netaddr.IPAddress(addr.split('/')[0]).is_link_local()
            ]
            return ipv4addr, ipv4netmask, ipv4addrs, ipv6addrs

        IP_ADDR = '192.0.2.2'
        IP_ADDR_SECOND = '192.0.2.3'
        IP_ADDR_GW = '192.0.2.1'
        IP_ADDR2 = '198.51.100.9'
        IP_ADDR3 = '198.51.100.11'
        IP_ADDR2_GW = '198.51.100.1'
        IPV6_ADDR = '2607:f0d0:1002:51::4'
        NET_MASK = '255.255.255.0'
        PREFIX_LENGTH = 24
        IPV6_PREFIX_LENGTH = 64
        IP_ADDR_CIDR = self._cidr_form(IP_ADDR, PREFIX_LENGTH)
        IP_ADDR_SECOND_CIDR = self._cidr_form(IP_ADDR_SECOND, PREFIX_LENGTH)
        IP_ADDR2_CIDR = self._cidr_form(IP_ADDR2, PREFIX_LENGTH)
        IP_ADDR3_CIDR = self._cidr_form(IP_ADDR3, 32)
        IPV6_ADDR_CIDR = self._cidr_form(IPV6_ADDR, IPV6_PREFIX_LENGTH)
        with dummy_device() as device:
            ipwrapper.addrAdd(device, IP_ADDR, PREFIX_LENGTH)
            ipwrapper.addrAdd(device, IP_ADDR_SECOND, PREFIX_LENGTH)
            ipwrapper.addrAdd(device, IP_ADDR2, PREFIX_LENGTH)
            ipwrapper.addrAdd(device, IPV6_ADDR, IPV6_PREFIX_LENGTH, family=6)
            # 32 bit addresses are reported slashless by netlink
            ipwrapper.addrAdd(device, IP_ADDR3, 32)
            self.assertEqual(get_ip_info(device), (IP_ADDR, NET_MASK, [
                IP_ADDR_CIDR, IP_ADDR2_CIDR, IP_ADDR3_CIDR, IP_ADDR_SECOND_CIDR
            ], [IPV6_ADDR_CIDR]))
            self.assertEqual(get_ip_info(device, ipv4_gateway=IP_ADDR_GW),
                             (IP_ADDR, NET_MASK, [
                                 IP_ADDR_CIDR, IP_ADDR2_CIDR, IP_ADDR3_CIDR,
                                 IP_ADDR_SECOND_CIDR
                             ], [IPV6_ADDR_CIDR]))
            self.assertEqual(get_ip_info(device, ipv4_gateway=IP_ADDR2_GW),
                             (IP_ADDR2, NET_MASK, [
                                 IP_ADDR_CIDR, IP_ADDR2_CIDR, IP_ADDR3_CIDR,
                                 IP_ADDR_SECOND_CIDR
                             ], [IPV6_ADDR_CIDR]))
Ejemplo n.º 14
0
 def _setIpConfig(self, iface):
     ipv4 = iface.ipv4
     ipv6 = iface.ipv6
     if ipv4.address or ipv6.address:
         self.removeIpConfig(iface)
     if ipv4.address:
         ipwrapper.addrAdd(iface.name, ipv4.address, ipv4.netmask)
         if ipv4.gateway and ipv4.defaultRoute:
             ipwrapper.routeAdd(["default", "via", ipv4.gateway])
     if ipv6.address:
         ipv6addr, ipv6netmask = ipv6.address.split("/")
         ipwrapper.addrAdd(iface.name, ipv6addr, ipv6netmask, family=6)
         if ipv6.gateway:
             ipwrapper.routeAdd(["default", "via", ipv6.gateway], dev=iface.name, family=6)
     if ipv6.ipv6autoconf is not None:
         with open("/proc/sys/net/ipv6/conf/%s/autoconf" % iface.name, "w") as ipv6_autoconf:
             ipv6_autoconf.write("1" if ipv6.ipv6autoconf else "0")
Ejemplo n.º 15
0
 def _setIpConfig(self, iface):
     ipConfig = iface.ipConfig
     if ipConfig.ipaddr or ipConfig.ipv6addr:
         self.removeIpConfig(iface)
     if ipConfig.ipaddr:
         ipwrapper.addrAdd(iface.name, ipConfig.ipaddr,
                           ipConfig.netmask)
         if ipConfig.gateway and ipConfig.defaultRoute:
             ipwrapper.routeAdd(['default', 'via', ipConfig.gateway])
     if ipConfig.ipv6addr:
         ipv6addr, ipv6netmask = ipConfig.ipv6addr.split('/')
         ipwrapper.addrAdd(iface.name, ipv6addr, ipv6netmask, family=6)
         if ipConfig.ipv6gateway:
             ipwrapper.routeAdd(['default', 'via', ipConfig.ipv6gateway],
                                dev=iface.name, family=6)
     if ipConfig.ipv6autoconf is not None:
         with open('/proc/sys/net/ipv6/conf/%s/autoconf' % iface.name,
                   'w') as ipv6_autoconf:
             ipv6_autoconf.write('1' if ipConfig.ipv6autoconf else '0')
Ejemplo n.º 16
0
 def _setIpConfig(self, iface):
     ipConfig = iface.ipConfig
     if ipConfig.ipaddr or ipConfig.ipv6addr:
         self.removeIpConfig(iface)
     if ipConfig.ipaddr:
         ipwrapper.addrAdd(iface.name, ipConfig.ipaddr,
                           ipConfig.netmask)
         if ipConfig.gateway and ipConfig.defaultRoute:
             ipwrapper.routeAdd(['default', 'via', ipConfig.gateway])
     if ipConfig.ipv6addr:
         ipv6addr, ipv6netmask = ipConfig.ipv6addr.split('/')
         ipwrapper.addrAdd(iface.name, ipv6addr, ipv6netmask, family=6)
         if ipConfig.ipv6gateway:
             ipwrapper.routeAdd(['default', 'via', ipConfig.ipv6gateway],
                                dev=iface.name, family=6)
     if ipConfig.ipv6autoconf is not None:
         with open('/proc/sys/net/ipv6/conf/%s/autoconf' % iface.name,
                   'w') as ipv6_autoconf:
             ipv6_autoconf.write('1' if ipConfig.ipv6autoconf else '0')
Ejemplo n.º 17
0
 def test_iperf_upper_limit(self):
     # Upper limit is not an accurate measure. This is because it converges
     # over time and depends on current machine hardware (CPU).
     # Hence, it is hard to make hard assertions on it. The test should run
     # at least 60 seconds (the longer the better) and the user should
     # inspect the computed average rate and optionally the additional
     # traffic data that was collected in client.out in order to be
     # convinced QOS is working properly.
     limit_kbps = 1000  # 1 Mbps (in kbps)
     server_ip = '192.0.2.1'
     client_ip = '192.0.2.10'
     qos_out = {'ul': {'m2': limit_kbps}, 'ls': {'m2': limit_kbps}}
     # using a network namespace is essential since otherwise the kernel
     # short-circuits the traffic and bypasses the veth devices and the
     # classfull qdisc.
     with network_namespace('server_ns') as ns, bridge_device() as bridge, \
             veth_pair() as (server_peer, server_dev), \
             veth_pair() as (client_dev, client_peer):
         linkSet(server_peer, ['up'])
         linkSet(client_peer, ['up'])
         # iperf server and its veth peer lie in a separate network
         # namespace
         link_set_netns(server_dev, ns)
         bridge.addIf(server_peer)
         bridge.addIf(client_peer)
         linkSet(client_dev, ['up'])
         netns_exec(ns, ['ip', 'link', 'set', 'dev', server_dev, 'up'])
         addrAdd(client_dev, client_ip, 24)
         netns_exec(ns, [
             'ip', '-4', 'addr', 'add', 'dev', server_dev,
             '%s/24' % server_ip
         ])
         qos.configure_outbound(qos_out, client_peer, None)
         with running(IperfServer(server_ip, network_ns=ns)):
             client = IperfClient(server_ip, client_ip, test_time=60)
             client.start()
             max_rate = max([
                 float(interval['streams'][0]['bits_per_second']) / (2**10)
                 for interval in client.out['intervals']
             ])
             self.assertTrue(0 < max_rate < limit_kbps * 1.5)
Ejemplo n.º 18
0
 def test_iperf_upper_limit(self):
     # Upper limit is not an accurate measure. This is because it converges
     # over time and depends on current machine hardware (CPU).
     # Hence, it is hard to make hard assertions on it. The test should run
     # at least 60 seconds (the longer the better) and the user should
     # inspect the computed average rate and optionally the additional
     # traffic data that was collected in client.out in order to be
     # convinced QOS is working properly.
     limit_kbps = 1000  # 1 Mbps (in kbps)
     server_ip = '192.0.2.1'
     client_ip = '192.0.2.10'
     qos_out = {'ul': {'m2': limit_kbps}, 'ls': {'m2': limit_kbps}}
     # using a network namespace is essential since otherwise the kernel
     # short-circuits the traffic and bypasses the veth devices and the
     # classfull qdisc.
     with network_namespace('server_ns') as ns, bridge_device() as bridge, \
             veth_pair() as (server_peer, server_dev), \
             veth_pair() as (client_dev, client_peer):
         linkSet(server_peer, ['up'])
         linkSet(client_peer, ['up'])
         # iperf server and its veth peer lie in a separate network
         # namespace
         link_set_netns(server_dev, ns)
         bridge.addIf(server_peer)
         bridge.addIf(client_peer)
         linkSet(client_dev, ['up'])
         netns_exec(ns, ['ip', 'link', 'set', 'dev', server_dev, 'up'])
         addrAdd(client_dev, client_ip, 24)
         netns_exec(ns, ['ip', '-4', 'addr', 'add', 'dev', server_dev,
                         '%s/24' % server_ip])
         qos.configure_outbound(qos_out, client_peer, None)
         with running(IperfServer(server_ip, network_ns=ns)):
             client = IperfClient(server_ip, client_ip, test_time=60)
             client.start()
             max_rate = max([float(
                 interval['streams'][0]['bits_per_second'])/(2**10)
                 for interval in client.out['intervals']])
             self.assertTrue(0 < max_rate < limit_kbps * 1.5)
Ejemplo n.º 19
0
    def test_local_auto_with_dynamic_address_from_ra(self):
        IPV6_NETADDRESS = '2001:1:1:1'
        IPV6_NETPREFIX_LEN = '64'
        with veth_pair() as (server, client):
            with dnsmasq_run(server, ipv6_slaac_prefix=IPV6_NETADDRESS + '::'):
                with wait_for_ipv6(client):
                    ipwrapper.linkSet(client, ['up'])
                    ipwrapper.linkSet(server, ['up'])
                    ipwrapper.addrAdd(server, IPV6_NETADDRESS + '::1',
                                      IPV6_NETPREFIX_LEN, family=6)

                # Expecting link and global addresses on client iface
                # The addresses are given randomly, so we sort them
                ip_addrs = sorted(addresses.getIpAddrs()[client],
                                  key=lambda ip: ip['address'])
                self.assertEqual(2, len(ip_addrs))

                self.assertTrue(addresses.is_dynamic(ip_addrs[0]))
                self.assertEqual('global', ip_addrs[0]['scope'])
                self.assertEqual(IPV6_NETADDRESS,
                                 ip_addrs[0]['address'][:len(IPV6_NETADDRESS)])

                self.assertEqual('link', ip_addrs[1]['scope'])
Ejemplo n.º 20
0
    def testSetupNetworksAddDelDhcp(self, bridged, families):
        """Copied from networkTests.py, source_route checking changed from
        device_name to BRIDGE_NAME.
        """
        def _assert_applied(network_name, requested, reported):
            self.assertNetworkExists(network_name)
            reported_network = reported.networks[network_name]

            if requested['bridged']:
                self.assertEqual(reported_network['cfg']['BOOTPROTO'],
                                 requested['bootproto'])
                reported_devices = reported.bridges
                device_name = network_name
            else:
                # CHANGED: always bridged
                pass
            self.assertIn(device_name, reported_devices)
            reported_device = reported_devices[device_name]

            requested_dhcpv4 = requested['bootproto'] == 'dhcp'
            self.assertEqual(reported_network['dhcpv4'], requested_dhcpv4)
            self.assertEqual(reported_network['dhcpv6'], requested['dhcpv6'])

            self.assertEqual(reported_device['cfg']['BOOTPROTO'],
                             requested['bootproto'])
            self.assertEqual(reported_device['dhcpv4'], requested_dhcpv4)
            self.assertEqual(reported_device['dhcpv6'], requested['dhcpv6'])

            if requested_dhcpv4:
                self.assertEqual(reported_network['gateway'], IP_GATEWAY)
                # TODO: source routing not ready for IPv6
                ip_addr = reported_network['addr']
                self.assertSourceRoutingConfiguration(BRIDGE_NAME,  # CHANGED
                                                      ip_addr)
                return device_name, ip_addr
            return None, None

        with veth_pair() as (left, right):
            addrAdd(left, IP_ADDRESS, IP_CIDR)
            addrAdd(left, IPv6_ADDRESS, IPv6_CIDR, 6)
            linkSet(left, ['up'])
            with dnsmasqDhcp(left):
                dhcpv4 = 4 in families
                dhcpv6 = 6 in families
                bootproto = 'dhcp' if dhcpv4 else 'none'
                network = {NETWORK_NAME: {'nic': right, 'bridged': bridged,
                                          'bootproto': bootproto,
                                          'dhcpv6': dhcpv6,
                                          'blockingdhcp': True}}
                try:
                    status, msg = self.setupNetworks(network, {}, NOCHK)
                    self.assertEqual(status, SUCCESS, msg)

                    device_name, ip_addr = _assert_applied(
                        NETWORK_NAME, network[NETWORK_NAME],
                        self.vdsm_net.netinfo)

                    # Do not report DHCP from (typically still valid) leases
                    network[NETWORK_NAME]['bootproto'] = 'none'
                    network[NETWORK_NAME]['dhcpv6'] = False
                    status, msg = self.setupNetworks(network, {}, NOCHK)
                    self.assertEqual(status, SUCCESS, msg)

                    _assert_applied(NETWORK_NAME, network[NETWORK_NAME],
                                    self.vdsm_net.netinfo)

                    network = {NETWORK_NAME: {'remove': True}}
                    status, msg = self.setupNetworks(network, {}, NOCHK)
                    self.assertEqual(status, SUCCESS, msg)
                    self.assertNetworkDoesntExist(NETWORK_NAME)

                    # Assert that routes and rules don't exist
                    if dhcpv4:
                        source_route = _get_source_route(device_name, ip_addr)
                        for route in source_route._buildRoutes():
                            self.assertRouteDoesNotExist(route)
                        for rule in source_route._buildRules():
                            self.assertRuleDoesNotExist(rule)
                finally:
                    dhcp.delete_dhclient_leases(
                        NETWORK_NAME if bridged else right, dhcpv4, dhcpv6)
Ejemplo n.º 21
0
    def testSetupNetworksAddDelDhcp(self, bridged, families):
        """Copied from networkTests.py, source_route checking changed from
        device_name to BRIDGE_NAME.
        """
        def _assert_applied(network_name, requested, reported):
            self.assertNetworkExists(network_name)
            reported_network = reported.networks[network_name]

            if requested['bridged']:
                self.assertEqual(reported_network['cfg']['BOOTPROTO'],
                                 requested['bootproto'])
                reported_devices = reported.bridges
                device_name = network_name
            else:
                # CHANGED: always bridged
                pass
            self.assertIn(device_name, reported_devices)
            reported_device = reported_devices[device_name]

            requested_dhcpv4 = requested['bootproto'] == 'dhcp'
            self.assertEqual(reported_network['dhcpv4'], requested_dhcpv4)
            self.assertEqual(reported_network['dhcpv6'], requested['dhcpv6'])

            self.assertEqual(reported_device['cfg']['BOOTPROTO'],
                             requested['bootproto'])
            self.assertEqual(reported_device['dhcpv4'], requested_dhcpv4)
            self.assertEqual(reported_device['dhcpv6'], requested['dhcpv6'])

            if requested_dhcpv4:
                self.assertEqual(reported_network['gateway'], IP_GATEWAY)
                # TODO: source routing not ready for IPv6
                ip_addr = reported_network['addr']
                self.assertSourceRoutingConfiguration(
                    BRIDGE_NAME,  # CHANGED
                    ip_addr)
                return device_name, ip_addr
            return None, None

        with veth_pair() as (left, right):
            addrAdd(left, IP_ADDRESS, IP_CIDR)
            addrAdd(left, IPv6_ADDRESS, IPv6_CIDR, 6)
            linkSet(left, ['up'])
            with dnsmasqDhcp(left):
                dhcpv4 = 4 in families
                dhcpv6 = 6 in families
                bootproto = 'dhcp' if dhcpv4 else 'none'
                network = {
                    NETWORK_NAME: {
                        'nic': right,
                        'bridged': bridged,
                        'bootproto': bootproto,
                        'dhcpv6': dhcpv6,
                        'blockingdhcp': True
                    }
                }
                try:
                    status, msg = self.setupNetworks(network, {}, NOCHK)
                    self.assertEqual(status, SUCCESS, msg)

                    device_name, ip_addr = _assert_applied(
                        NETWORK_NAME, network[NETWORK_NAME],
                        self.vdsm_net.netinfo)

                    # Do not report DHCP from (typically still valid) leases
                    network[NETWORK_NAME]['bootproto'] = 'none'
                    network[NETWORK_NAME]['dhcpv6'] = False
                    status, msg = self.setupNetworks(network, {}, NOCHK)
                    self.assertEqual(status, SUCCESS, msg)

                    _assert_applied(NETWORK_NAME, network[NETWORK_NAME],
                                    self.vdsm_net.netinfo)

                    network = {NETWORK_NAME: {'remove': True}}
                    status, msg = self.setupNetworks(network, {}, NOCHK)
                    self.assertEqual(status, SUCCESS, msg)
                    self.assertNetworkDoesntExist(NETWORK_NAME)

                    # Assert that routes and rules don't exist
                    if dhcpv4:
                        source_route = _get_source_route(device_name, ip_addr)
                        for route in source_route._buildRoutes():
                            self.assertRouteDoesNotExist(route)
                        for rule in source_route._buildRules():
                            self.assertRuleDoesNotExist(rule)
                finally:
                    dhcp.delete_dhclient_leases(
                        NETWORK_NAME if bridged else right, dhcpv4, dhcpv6)
Ejemplo n.º 22
0
def setIP(dummyName, ipaddr, netmask):
    try:
        addrAdd(dummyName, ipaddr, netmask)
    except IPRoute2Error:
        raise SkipTest('Failed to set device ip')
Ejemplo n.º 23
0
def setIP(dummyName, ipaddr, netmask, family=4):
    try:
        addrAdd(dummyName, ipaddr, netmask, family)
    except IPRoute2Error as e:
        raise SkipTest('Failed to set device ip: %s' % e)