MTU setting for OVSDpdkBond

This patch allows the MTU setting for DPDK bonds. In case of DPDK
bonds, the MTU setting needs to be done for each of the interfaces
attached to the bond.

Change-Id: Ida627313d14a674430b2aff3644fd62b2e0bcab7
Implements: blueprint ovs-2-6-features-dpdk
Signed-off-by: Karthik S <ksundara@redhat.com>
This commit is contained in:
Karthik S 2017-05-30 07:21:52 -04:00
parent e7e81ac011
commit cc7ff987ca
4 changed files with 47 additions and 0 deletions

View File

@ -6,6 +6,7 @@
{
"type" : "ovs_dpdk_bond",
"name" : "dpdkbond0",
"mtu" : 9000,
"members": [
{
"type" : "ovs_dpdk_port",

View File

@ -13,6 +13,8 @@ network_config:
-
type: ovs_dpdk_bond
name: dpdkbond0
# MTU is optional, e.g. for jumbo frames
mtu: 9000
members:
-
type: ovs_dpdk_port

View File

@ -316,6 +316,12 @@ class IfcfgNetConfig(os_net_config.NetConfig):
if base_opt.members:
members = [member.name for member in base_opt.members]
data += ("BOND_IFACES=\"%s\"\n" % " ".join(members))
# MTU configuration given for the OvsDpdkbond shall be applied
# to each of the members of the OvsDpdkbond
if base_opt.mtu:
for member in base_opt.members:
ovs_extra.append("set Interface %s mtu_request=$MTU" %
member.name)
if base_opt.ovs_options:
data += "OVS_OPTIONS=\"%s\"\n" % base_opt.ovs_options
ovs_extra.extend(base_opt.ovs_extra)

View File

@ -952,6 +952,44 @@ DEVICETYPE=ovs
TYPE=OVSDPDKBond
OVS_BRIDGE=br-link
BOND_IFACES="dpdk0 dpdk1"
"""
self.assertEqual(dpdk_bond_config,
self.get_interface_config('dpdkbond0'))
def test_network_ovs_dpdk_bond_with_mtu(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', 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"
MTU=9000
OVS_EXTRA="set Interface dpdk0 mtu_request=$MTU \
-- set Interface dpdk1 mtu_request=$MTU"
"""
self.assertEqual(dpdk_bond_config,
self.get_interface_config('dpdkbond0'))