diff options
author | 2017-06-09 10:56:12 +0000 | |
---|---|---|
committer | 2017-06-09 10:56:12 +0000 | |
commit | 187c1e66d4341e6c1fad308ca4d17d4d5026f61a (patch) | |
tree | e7e5aa68af1af1a07afe76b885d482343b6b4a4d /os_net_config | |
parent | 58a913e1554c5dd71a6fb7f7ba354d25379e2c97 (diff) | |
parent | c8901b8ac34cf180c0a62c39a2b31def9c28aaf3 (diff) |
Merge "Multiqueue support for OvsDpdkBond"
Diffstat (limited to 'os_net_config')
-rw-r--r-- | os_net_config/impl_ifcfg.py | 5 | ||||
-rw-r--r-- | os_net_config/objects.py | 6 | ||||
-rw-r--r-- | os_net_config/tests/test_impl_ifcfg.py | 79 |
3 files changed, 88 insertions, 2 deletions
diff --git a/os_net_config/impl_ifcfg.py b/os_net_config/impl_ifcfg.py index d98df31..997b695 100644 --- a/os_net_config/impl_ifcfg.py +++ b/os_net_config/impl_ifcfg.py @@ -326,6 +326,11 @@ class IfcfgNetConfig(os_net_config.NetConfig): for member in base_opt.members: ovs_extra.append("set Interface %s mtu_request=$MTU" % member.name) + if base_opt.rx_queue: + data += "RX_QUEUE=%i\n" % base_opt.rx_queue + for member in base_opt.members: + ovs_extra.append("set Interface %s options:n_rxq=" + "$RX_QUEUE" % member.name) if base_opt.ovs_options: data += "OVS_OPTIONS=\"%s\"\n" % base_opt.ovs_options ovs_extra.extend(base_opt.ovs_extra) diff --git a/os_net_config/objects.py b/os_net_config/objects.py index 86e0895..5fe6e49 100644 --- a/os_net_config/objects.py +++ b/os_net_config/objects.py @@ -1057,7 +1057,7 @@ class OvsDpdkBond(_BaseOpts): routes=None, mtu=None, primary=False, members=None, ovs_options=None, ovs_extra=None, nic_mapping=None, persist_mapping=False, defroute=True, dhclient_args=None, - dns_servers=None, nm_controlled=False): + dns_servers=None, nm_controlled=False, rx_queue=None): super(OvsDpdkBond, self).__init__(name, use_dhcp, use_dhcpv6, addresses, routes, mtu, primary, nic_mapping, persist_mapping, @@ -1066,6 +1066,7 @@ class OvsDpdkBond(_BaseOpts): self.members = members or [] self.ovs_options = ovs_options self.ovs_extra = format_ovs_extra(self, ovs_extra) + self.rx_queue = rx_queue for member in self.members: if member.primary: @@ -1088,6 +1089,7 @@ class OvsDpdkBond(_BaseOpts): persist_mapping, defroute, dhclient_args, dns_servers, nm_controlled) = _BaseOpts.base_opts_from_json( json, include_primary=False) + rx_queue = json.get('rx_queue', None) ovs_options = json.get('ovs_options') ovs_extra = json.get('ovs_extra', []) if not isinstance(ovs_extra, list): @@ -1119,7 +1121,7 @@ class OvsDpdkBond(_BaseOpts): persist_mapping=persist_mapping, defroute=defroute, dhclient_args=dhclient_args, dns_servers=dns_servers, - nm_controlled=nm_controlled) + nm_controlled=nm_controlled, rx_queue=rx_queue) class VppInterface(_BaseOpts): diff --git a/os_net_config/tests/test_impl_ifcfg.py b/os_net_config/tests/test_impl_ifcfg.py index c67115b..80f83f1 100644 --- a/os_net_config/tests/test_impl_ifcfg.py +++ b/os_net_config/tests/test_impl_ifcfg.py @@ -1035,6 +1035,85 @@ OVS_EXTRA="set Interface dpdk0 mtu_request=$MTU \ self.assertEqual(dpdk_bond_config, self.get_interface_config('dpdkbond0')) + def test_network_ovs_dpdk_bond_with_rx_queue(self): + nic_mapping = {'nic1': 'eth0', 'nic2': 'eth1', 'nic3': 'eth2'} + self.stubbed_mapped_nics = nic_mapping + + iface0 = objects.Interface(name='nic2') + dpdk0 = objects.OvsDpdkPort(name='dpdk0', members=[iface0]) + iface1 = objects.Interface(name='nic3') + dpdk1 = objects.OvsDpdkPort(name='dpdk1', members=[iface1]) + bond = objects.OvsDpdkBond('dpdkbond0', rx_queue=4, + members=[dpdk0, dpdk1]) + bridge = objects.OvsUserBridge('br-link', members=[bond]) + + def test_bind_dpdk_interfaces(ifname, driver, noop): + self.assertIn(ifname, ['eth1', 'eth2']) + self.assertEqual(driver, 'vfio-pci') + self.stubs.Set(utils, 'bind_dpdk_interfaces', + test_bind_dpdk_interfaces) + + self.provider.add_ovs_dpdk_bond(bond) + self.provider.add_ovs_user_bridge(bridge) + + dpdk_bond_config = """# This file is autogenerated by os-net-config +DEVICE=dpdkbond0 +ONBOOT=yes +HOTPLUG=no +NM_CONTROLLED=no +PEERDNS=no +DEVICETYPE=ovs +TYPE=OVSDPDKBond +OVS_BRIDGE=br-link +BOND_IFACES="dpdk0 dpdk1" +RX_QUEUE=4 +OVS_EXTRA="set Interface dpdk0 options:n_rxq=$RX_QUEUE \ +-- set Interface dpdk1 options:n_rxq=$RX_QUEUE" +""" + self.assertEqual(dpdk_bond_config, + self.get_interface_config('dpdkbond0')) + + def test_network_ovs_dpdk_bond_with_mtu_and_rx_queue(self): + nic_mapping = {'nic1': 'eth0', 'nic2': 'eth1', 'nic3': 'eth2'} + self.stubbed_mapped_nics = nic_mapping + + iface0 = objects.Interface(name='nic2') + dpdk0 = objects.OvsDpdkPort(name='dpdk0', members=[iface0]) + iface1 = objects.Interface(name='nic3') + dpdk1 = objects.OvsDpdkPort(name='dpdk1', members=[iface1]) + bond = objects.OvsDpdkBond('dpdkbond0', rx_queue=4, mtu=9000, + members=[dpdk0, dpdk1]) + bridge = objects.OvsUserBridge('br-link', members=[bond]) + + def test_bind_dpdk_interfaces(ifname, driver, noop): + self.assertIn(ifname, ['eth1', 'eth2']) + self.assertEqual(driver, 'vfio-pci') + self.stubs.Set(utils, 'bind_dpdk_interfaces', + test_bind_dpdk_interfaces) + + self.provider.add_ovs_dpdk_bond(bond) + self.provider.add_ovs_user_bridge(bridge) + + dpdk_bond_config = """# This file is autogenerated by os-net-config +DEVICE=dpdkbond0 +ONBOOT=yes +HOTPLUG=no +NM_CONTROLLED=no +PEERDNS=no +DEVICETYPE=ovs +TYPE=OVSDPDKBond +OVS_BRIDGE=br-link +BOND_IFACES="dpdk0 dpdk1" +RX_QUEUE=4 +MTU=9000 +OVS_EXTRA="set Interface dpdk0 mtu_request=$MTU \ +-- set Interface dpdk1 mtu_request=$MTU \ +-- set Interface dpdk0 options:n_rxq=$RX_QUEUE \ +-- set Interface dpdk1 options:n_rxq=$RX_QUEUE" +""" + self.assertEqual(dpdk_bond_config, + self.get_interface_config('dpdkbond0')) + class TestIfcfgNetConfigApply(base.TestCase): |