aboutsummaryrefslogtreecommitdiffstats
path: root/os_net_config/objects.py
diff options
context:
space:
mode:
Diffstat (limited to 'os_net_config/objects.py')
-rw-r--r--os_net_config/objects.py198
1 files changed, 140 insertions, 58 deletions
diff --git a/os_net_config/objects.py b/os_net_config/objects.py
index 3136be0..ec915da 100644
--- a/os_net_config/objects.py
+++ b/os_net_config/objects.py
@@ -68,6 +68,8 @@ def object_from_json(json):
return OvsDpdkPort.from_json(json)
elif obj_type == "ovs_dpdk_bond":
return OvsDpdkBond.from_json(json)
+ elif obj_type == "vpp_interface":
+ return VppInterface.from_json(json)
def _get_required_field(json, name, object_name):
@@ -181,7 +183,7 @@ class _BaseOpts(object):
def __init__(self, name, use_dhcp=False, use_dhcpv6=False, addresses=None,
routes=None, mtu=None, primary=False, nic_mapping=None,
persist_mapping=False, defroute=True, dhclient_args=None,
- dns_servers=None):
+ dns_servers=None, nm_controlled=False):
addresses = addresses or []
routes = routes or []
dns_servers = dns_servers or []
@@ -209,6 +211,7 @@ class _BaseOpts(object):
self.defroute = defroute
self.dhclient_args = dhclient_args
self.dns_servers = dns_servers
+ self.nm_controlled = nm_controlled
self.bridge_name = None # internal
self.linux_bridge_name = None # internal
self.ivs_bridge_name = None # internal
@@ -244,6 +247,7 @@ class _BaseOpts(object):
mtu = json.get('mtu', None)
dhclient_args = json.get('dhclient_args')
dns_servers = json.get('dns_servers')
+ nm_controlled = json.get('nm_controlled')
primary = strutils.bool_from_string(str(json.get('primary', False)))
addresses = []
routes = []
@@ -274,11 +278,11 @@ class _BaseOpts(object):
if include_primary:
return (use_dhcp, use_dhcpv6, addresses, routes, mtu, primary,
nic_mapping, persist_mapping, defroute, dhclient_args,
- dns_servers)
+ dns_servers, nm_controlled)
else:
return (use_dhcp, use_dhcpv6, addresses, routes, mtu,
nic_mapping, persist_mapping, defroute, dhclient_args,
- dns_servers)
+ dns_servers, nm_controlled)
class Interface(_BaseOpts):
@@ -287,14 +291,16 @@ class Interface(_BaseOpts):
def __init__(self, name, use_dhcp=False, use_dhcpv6=False, addresses=None,
routes=None, mtu=None, primary=False, nic_mapping=None,
persist_mapping=False, defroute=True, dhclient_args=None,
- dns_servers=None, ethtool_opts=None, hotplug=False):
+ dns_servers=None, nm_controlled=False, ethtool_opts=None,
+ hotplug=False):
addresses = addresses or []
routes = routes or []
dns_servers = dns_servers or []
super(Interface, self).__init__(name, use_dhcp, use_dhcpv6, addresses,
routes, mtu, primary, nic_mapping,
persist_mapping, defroute,
- dhclient_args, dns_servers)
+ dhclient_args, dns_servers,
+ nm_controlled)
self.ethtool_opts = ethtool_opts
self.hotplug = hotplug
@@ -318,7 +324,7 @@ class Vlan(_BaseOpts):
def __init__(self, device, vlan_id, use_dhcp=False, use_dhcpv6=False,
addresses=None, routes=None, mtu=None, primary=False,
nic_mapping=None, persist_mapping=False, defroute=True,
- dhclient_args=None, dns_servers=None):
+ dhclient_args=None, dns_servers=None, nm_controlled=False):
addresses = addresses or []
routes = routes or []
dns_servers = dns_servers or []
@@ -326,7 +332,7 @@ class Vlan(_BaseOpts):
super(Vlan, self).__init__(name, use_dhcp, use_dhcpv6, addresses,
routes, mtu, primary, nic_mapping,
persist_mapping, defroute, dhclient_args,
- dns_servers)
+ dns_servers, nm_controlled)
self.vlan_id = int(vlan_id)
mapped_nic_names = _mapped_nics(nic_mapping)
@@ -350,7 +356,7 @@ class IvsInterface(_BaseOpts):
def __init__(self, vlan_id, name='ivs', use_dhcp=False, use_dhcpv6=False,
addresses=None, routes=None, mtu=1500, primary=False,
nic_mapping=None, persist_mapping=False, defroute=True,
- dhclient_args=None, dns_servers=None):
+ dhclient_args=None, dns_servers=None, nm_controlled=False):
addresses = addresses or []
routes = routes or []
dns_servers = dns_servers or []
@@ -359,7 +365,7 @@ class IvsInterface(_BaseOpts):
addresses, routes, mtu, primary,
nic_mapping, persist_mapping,
defroute, dhclient_args,
- dns_servers)
+ dns_servers, nm_controlled)
self.vlan_id = int(vlan_id)
@staticmethod
@@ -376,7 +382,8 @@ class NfvswitchInternal(_BaseOpts):
def __init__(self, vlan_id, name='nfvswitch', use_dhcp=False,
use_dhcpv6=False, addresses=None, routes=None, mtu=1500,
primary=False, nic_mapping=None, persist_mapping=False,
- defroute=True, dhclient_args=None, dns_servers=None):
+ defroute=True, dhclient_args=None, dns_servers=None,
+ nm_controlled=False):
addresses = addresses or []
routes = routes or []
dns_servers = dns_servers or []
@@ -385,7 +392,8 @@ class NfvswitchInternal(_BaseOpts):
use_dhcpv6, addresses, routes,
mtu, primary, nic_mapping,
persist_mapping, defroute,
- dhclient_args, dns_servers)
+ dhclient_args, dns_servers,
+ nm_controlled)
self.vlan_id = int(vlan_id)
@staticmethod
@@ -403,7 +411,7 @@ class OvsBridge(_BaseOpts):
routes=None, mtu=None, members=None, ovs_options=None,
ovs_extra=None, nic_mapping=None, persist_mapping=False,
defroute=True, dhclient_args=None, dns_servers=None,
- fail_mode=None):
+ nm_controlled=False, fail_mode=None):
addresses = addresses or []
routes = routes or []
members = members or []
@@ -411,7 +419,8 @@ class OvsBridge(_BaseOpts):
super(OvsBridge, self).__init__(name, use_dhcp, use_dhcpv6, addresses,
routes, mtu, False, nic_mapping,
persist_mapping, defroute,
- dhclient_args, dns_servers)
+ dhclient_args, dns_servers,
+ nm_controlled)
self.members = members
self.ovs_options = ovs_options
ovs_extra = ovs_extra or []
@@ -436,7 +445,8 @@ class OvsBridge(_BaseOpts):
name = _get_required_field(json, 'name', 'OvsBridge')
(use_dhcp, use_dhcpv6, addresses, routes, mtu, nic_mapping,
persist_mapping, defroute,
- dhclient_args, dns_servers) = _BaseOpts.base_opts_from_json(
+ dhclient_args, dns_servers,
+ nm_controlled) = _BaseOpts.base_opts_from_json(
json, include_primary=False)
ovs_options = json.get('ovs_options')
ovs_extra = json.get('ovs_extra', [])
@@ -461,7 +471,7 @@ class OvsBridge(_BaseOpts):
ovs_extra=ovs_extra, nic_mapping=nic_mapping,
persist_mapping=persist_mapping, defroute=defroute,
dhclient_args=dhclient_args, dns_servers=dns_servers,
- fail_mode=fail_mode)
+ nm_controlled=nm_controlled, fail_mode=fail_mode)
class OvsUserBridge(_BaseOpts):
@@ -471,12 +481,12 @@ class OvsUserBridge(_BaseOpts):
routes=None, mtu=None, members=None, ovs_options=None,
ovs_extra=None, nic_mapping=None, persist_mapping=False,
defroute=True, dhclient_args=None, dns_servers=None,
- fail_mode=None):
+ nm_controlled=False, fail_mode=None):
super(OvsUserBridge, self).__init__(name, use_dhcp, use_dhcpv6,
addresses, routes, mtu, False,
nic_mapping, persist_mapping,
defroute, dhclient_args,
- dns_servers)
+ dns_servers, nm_controlled)
self.members = members or []
self.ovs_options = ovs_options
ovs_extra = ovs_extra or []
@@ -503,7 +513,8 @@ class OvsUserBridge(_BaseOpts):
name = _get_required_field(json, 'name', 'OvsUserBridge')
(use_dhcp, use_dhcpv6, addresses, routes, mtu, nic_mapping,
persist_mapping, defroute,
- dhclient_args, dns_servers) = _BaseOpts.base_opts_from_json(
+ dhclient_args, dns_servers,
+ nm_controlled) = _BaseOpts.base_opts_from_json(
json, include_primary=False)
ovs_options = json.get('ovs_options')
ovs_extra = json.get('ovs_extra', [])
@@ -528,7 +539,8 @@ class OvsUserBridge(_BaseOpts):
ovs_extra=ovs_extra, nic_mapping=nic_mapping,
persist_mapping=persist_mapping,
defroute=defroute, dhclient_args=dhclient_args,
- dns_servers=dns_servers, fail_mode=fail_mode)
+ dns_servers=dns_servers,
+ nm_controlled=nm_controlled, fail_mode=fail_mode)
class LinuxBridge(_BaseOpts):
@@ -537,7 +549,7 @@ class LinuxBridge(_BaseOpts):
def __init__(self, name, use_dhcp=False, use_dhcpv6=False, addresses=None,
routes=None, mtu=None, members=None, nic_mapping=None,
persist_mapping=False, defroute=True, dhclient_args=None,
- dns_servers=None):
+ dns_servers=None, nm_controlled=False):
addresses = addresses or []
routes = routes or []
members = members or []
@@ -545,7 +557,8 @@ class LinuxBridge(_BaseOpts):
super(LinuxBridge, self).__init__(name, use_dhcp, use_dhcpv6,
addresses, routes, mtu, False,
nic_mapping, persist_mapping,
- defroute, dhclient_args, dns_servers)
+ defroute, dhclient_args, dns_servers,
+ nm_controlled)
self.members = members
for member in self.members:
member.linux_bridge_name = name
@@ -564,7 +577,7 @@ class LinuxBridge(_BaseOpts):
name = _get_required_field(json, 'name', 'LinuxBridge')
(use_dhcp, use_dhcpv6, addresses, routes, mtu, nic_mapping,
persist_mapping, defroute, dhclient_args,
- dns_servers) = _BaseOpts.base_opts_from_json(
+ dns_servers, nm_controlled) = _BaseOpts.base_opts_from_json(
json, include_primary=False)
members = []
@@ -583,7 +596,8 @@ class LinuxBridge(_BaseOpts):
members=members, nic_mapping=nic_mapping,
persist_mapping=persist_mapping, defroute=defroute,
dhclient_args=dhclient_args,
- dns_servers=dns_servers)
+ dns_servers=dns_servers,
+ nm_controlled=nm_controlled)
class IvsBridge(_BaseOpts):
@@ -602,7 +616,7 @@ class IvsBridge(_BaseOpts):
def __init__(self, name='ivs', use_dhcp=False, use_dhcpv6=False,
addresses=None, routes=None, mtu=1500, members=None,
nic_mapping=None, persist_mapping=False, defroute=True,
- dhclient_args=None, dns_servers=None):
+ dhclient_args=None, dns_servers=None, nm_controlled=False):
addresses = addresses or []
routes = routes or []
members = members or []
@@ -610,7 +624,8 @@ class IvsBridge(_BaseOpts):
super(IvsBridge, self).__init__(name, use_dhcp, use_dhcpv6,
addresses, routes, mtu, False,
nic_mapping, persist_mapping,
- defroute, dhclient_args, dns_servers)
+ defroute, dhclient_args, dns_servers,
+ nm_controlled)
self.members = members
for member in self.members:
if isinstance(member, OvsBond) or isinstance(member, LinuxBond):
@@ -625,7 +640,7 @@ class IvsBridge(_BaseOpts):
name = 'ivs'
(use_dhcp, use_dhcpv6, addresses, routes, mtu, nic_mapping,
persist_mapping, defroute, dhclient_args,
- dns_servers) = _BaseOpts.base_opts_from_json(
+ dns_servers, nm_controlled) = _BaseOpts.base_opts_from_json(
json, include_primary=False)
members = []
@@ -644,7 +659,7 @@ class IvsBridge(_BaseOpts):
members=members, nic_mapping=nic_mapping,
persist_mapping=persist_mapping, defroute=defroute,
dhclient_args=dhclient_args,
- dns_servers=dns_servers)
+ dns_servers=dns_servers, nm_controlled=nm_controlled)
class NfvswitchBridge(_BaseOpts):
@@ -658,7 +673,8 @@ class NfvswitchBridge(_BaseOpts):
def __init__(self, name='nfvswitch', use_dhcp=False, use_dhcpv6=False,
addresses=None, routes=None, mtu=1500, members=None,
nic_mapping=None, persist_mapping=False, defroute=True,
- dhclient_args=None, dns_servers=None, options=""):
+ dhclient_args=None, dns_servers=None, nm_controlled=False,
+ options=""):
addresses = addresses or []
routes = routes or []
members = members or []
@@ -667,7 +683,7 @@ class NfvswitchBridge(_BaseOpts):
addresses, routes, mtu, False,
nic_mapping, persist_mapping,
defroute, dhclient_args,
- dns_servers)
+ dns_servers, nm_controlled)
self.options = options
self.members = members
for member in self.members:
@@ -683,7 +699,7 @@ class NfvswitchBridge(_BaseOpts):
name = 'nfvswitch'
(use_dhcp, use_dhcpv6, addresses, routes, mtu, nic_mapping,
persist_mapping, defroute, dhclient_args,
- dns_servers) = _BaseOpts.base_opts_from_json(
+ dns_servers, nm_controlled) = _BaseOpts.base_opts_from_json(
json, include_primary=False)
# members
@@ -707,7 +723,8 @@ class NfvswitchBridge(_BaseOpts):
members=members, nic_mapping=nic_mapping,
persist_mapping=persist_mapping,
defroute=defroute, dhclient_args=dhclient_args,
- dns_servers=dns_servers, options=options)
+ dns_servers=dns_servers,
+ nm_controlled=nm_controlled, options=options)
class LinuxTeam(_BaseOpts):
@@ -716,7 +733,8 @@ class LinuxTeam(_BaseOpts):
def __init__(self, name, use_dhcp=False, use_dhcpv6=False, addresses=None,
routes=None, mtu=None, primary=False, members=None,
bonding_options=None, nic_mapping=None, persist_mapping=False,
- defroute=True, dhclient_args=None, dns_servers=None):
+ defroute=True, dhclient_args=None, dns_servers=None,
+ nm_controlled=False):
addresses = addresses or []
routes = routes or []
members = members or []
@@ -724,7 +742,8 @@ class LinuxTeam(_BaseOpts):
super(LinuxTeam, self).__init__(name, use_dhcp, use_dhcpv6, addresses,
routes, mtu, primary, nic_mapping,
persist_mapping, defroute,
- dhclient_args, dns_servers)
+ dhclient_args, dns_servers,
+ nm_controlled)
self.members = members
self.bonding_options = bonding_options
for member in self.members:
@@ -743,7 +762,7 @@ class LinuxTeam(_BaseOpts):
name = _get_required_field(json, 'name', 'LinuxTeam')
(use_dhcp, use_dhcpv6, addresses, routes, mtu, nic_mapping,
persist_mapping, defroute, dhclient_args,
- dns_servers) = _BaseOpts.base_opts_from_json(
+ dns_servers, nm_controlled) = _BaseOpts.base_opts_from_json(
json, include_primary=False)
bonding_options = json.get('bonding_options')
members = []
@@ -763,7 +782,8 @@ class LinuxTeam(_BaseOpts):
members=members, bonding_options=bonding_options,
nic_mapping=nic_mapping,
persist_mapping=persist_mapping, defroute=defroute,
- dhclient_args=dhclient_args, dns_servers=dns_servers)
+ dhclient_args=dhclient_args, dns_servers=dns_servers,
+ nm_controlled=nm_controlled)
class LinuxBond(_BaseOpts):
@@ -772,7 +792,8 @@ class LinuxBond(_BaseOpts):
def __init__(self, name, use_dhcp=False, use_dhcpv6=False, addresses=None,
routes=None, mtu=None, primary=False, members=None,
bonding_options=None, nic_mapping=None, persist_mapping=False,
- defroute=True, dhclient_args=None, dns_servers=None):
+ defroute=True, dhclient_args=None, dns_servers=None,
+ nm_controlled=False):
addresses = addresses or []
routes = routes or []
members = members or []
@@ -780,7 +801,8 @@ class LinuxBond(_BaseOpts):
super(LinuxBond, self).__init__(name, use_dhcp, use_dhcpv6, addresses,
routes, mtu, primary, nic_mapping,
persist_mapping, defroute,
- dhclient_args, dns_servers)
+ dhclient_args, dns_servers,
+ nm_controlled)
self.members = members
self.bonding_options = bonding_options
for member in self.members:
@@ -799,7 +821,7 @@ class LinuxBond(_BaseOpts):
name = _get_required_field(json, 'name', 'LinuxBond')
(use_dhcp, use_dhcpv6, addresses, routes, mtu, nic_mapping,
persist_mapping, defroute, dhclient_args,
- dns_servers) = _BaseOpts.base_opts_from_json(
+ dns_servers, nm_controlled) = _BaseOpts.base_opts_from_json(
json, include_primary=False)
bonding_options = json.get('bonding_options')
members = []
@@ -819,7 +841,8 @@ class LinuxBond(_BaseOpts):
members=members, bonding_options=bonding_options,
nic_mapping=nic_mapping,
persist_mapping=persist_mapping, defroute=defroute,
- dhclient_args=dhclient_args, dns_servers=dns_servers)
+ dhclient_args=dhclient_args, dns_servers=dns_servers,
+ nm_controlled=nm_controlled)
class OvsBond(_BaseOpts):
@@ -829,7 +852,7 @@ class OvsBond(_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):
+ dns_servers=None, nm_controlled=False):
addresses = addresses or []
routes = routes or []
members = members or []
@@ -837,7 +860,7 @@ class OvsBond(_BaseOpts):
super(OvsBond, self).__init__(name, use_dhcp, use_dhcpv6, addresses,
routes, mtu, primary, nic_mapping,
persist_mapping, defroute, dhclient_args,
- dns_servers)
+ dns_servers, nm_controlled)
self.members = members
self.ovs_options = ovs_options
self.ovs_extra = format_ovs_extra(self, ovs_extra)
@@ -860,7 +883,7 @@ class OvsBond(_BaseOpts):
name = _get_required_field(json, 'name', 'OvsBond')
(use_dhcp, use_dhcpv6, addresses, routes, mtu, nic_mapping,
persist_mapping, defroute, dhclient_args,
- dns_servers) = _BaseOpts.base_opts_from_json(
+ dns_servers, nm_controlled) = _BaseOpts.base_opts_from_json(
json, include_primary=False)
ovs_options = json.get('ovs_options')
ovs_extra = json.get('ovs_extra', [])
@@ -883,7 +906,8 @@ class OvsBond(_BaseOpts):
members=members, ovs_options=ovs_options,
ovs_extra=ovs_extra, nic_mapping=nic_mapping,
persist_mapping=persist_mapping, defroute=defroute,
- dhclient_args=dhclient_args, dns_servers=dns_servers)
+ dhclient_args=dhclient_args, dns_servers=dns_servers,
+ nm_controlled=nm_controlled)
class OvsTunnel(_BaseOpts):
@@ -892,15 +916,16 @@ class OvsTunnel(_BaseOpts):
def __init__(self, name, use_dhcp=False, use_dhcpv6=False, addresses=None,
routes=None, mtu=None, primary=False, nic_mapping=None,
persist_mapping=False, defroute=True, dhclient_args=None,
- dns_servers=None, tunnel_type=None, ovs_options=None,
- ovs_extra=None):
+ dns_servers=None, nm_controlled=False, tunnel_type=None,
+ ovs_options=None, ovs_extra=None):
addresses = addresses or []
routes = routes or []
dns_servers = dns_servers or []
super(OvsTunnel, self).__init__(name, use_dhcp, use_dhcpv6, addresses,
routes, mtu, primary, nic_mapping,
persist_mapping, defroute,
- dhclient_args, dns_servers)
+ dhclient_args, dns_servers,
+ nm_controlled)
self.tunnel_type = tunnel_type
self.ovs_options = ovs_options or []
self.ovs_extra = format_ovs_extra(self, ovs_extra)
@@ -925,8 +950,8 @@ class OvsPatchPort(_BaseOpts):
def __init__(self, name, use_dhcp=False, use_dhcpv6=False, addresses=None,
routes=None, mtu=None, primary=False, nic_mapping=None,
persist_mapping=False, defroute=True, dhclient_args=None,
- dns_servers=None, bridge_name=None, peer=None,
- ovs_options=None, ovs_extra=None):
+ dns_servers=None, nm_controlled=False, bridge_name=None,
+ peer=None, ovs_options=None, ovs_extra=None):
addresses = addresses or []
routes = routes or []
dns_servers = dns_servers or []
@@ -934,7 +959,7 @@ class OvsPatchPort(_BaseOpts):
addresses, routes, mtu, primary,
nic_mapping, persist_mapping,
defroute, dhclient_args,
- dns_servers)
+ dns_servers, nm_controlled)
self.bridge_name = bridge_name
self.peer = peer
self.ovs_options = ovs_options or []
@@ -961,14 +986,15 @@ class IbInterface(_BaseOpts):
def __init__(self, name, use_dhcp=False, use_dhcpv6=False, addresses=None,
routes=None, mtu=None, primary=False, nic_mapping=None,
persist_mapping=False, defroute=True, dhclient_args=None,
- dns_servers=None, ethtool_opts=None):
+ dns_servers=None, nm_controlled=False, ethtool_opts=None):
addresses = addresses or []
routes = routes or []
dns_servers = dns_servers or []
super(IbInterface, self).__init__(name, use_dhcp, use_dhcpv6,
addresses, routes, mtu, primary,
nic_mapping, persist_mapping,
- defroute, dhclient_args, dns_servers)
+ defroute, dhclient_args, dns_servers,
+ nm_controlled)
self.ethtool_opts = ethtool_opts
@staticmethod
@@ -985,14 +1011,14 @@ class OvsDpdkPort(_BaseOpts):
def __init__(self, name, use_dhcp=False, use_dhcpv6=False, addresses=None,
routes=None, mtu=None, primary=False, nic_mapping=None,
persist_mapping=False, defroute=True, dhclient_args=None,
- dns_servers=None, members=None, driver='vfio-pci',
- ovs_options=None, ovs_extra=None):
+ dns_servers=None, nm_controlled=False, members=None,
+ driver='vfio-pci', ovs_options=None, ovs_extra=None):
super(OvsDpdkPort, self).__init__(name, use_dhcp, use_dhcpv6,
addresses, routes, mtu, primary,
nic_mapping, persist_mapping,
defroute, dhclient_args,
- dns_servers)
+ dns_servers, nm_controlled)
self.members = members or []
self.ovs_options = ovs_options or []
self.ovs_extra = format_ovs_extra(self, ovs_extra)
@@ -1047,11 +1073,12 @@ 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):
+ dns_servers=None, nm_controlled=False):
super(OvsDpdkBond, self).__init__(name, use_dhcp, use_dhcpv6,
addresses, routes, mtu, primary,
nic_mapping, persist_mapping,
- defroute, dhclient_args, dns_servers)
+ defroute, dhclient_args, dns_servers,
+ nm_controlled)
self.members = members or []
self.ovs_options = ovs_options
self.ovs_extra = format_ovs_extra(self, ovs_extra)
@@ -1075,7 +1102,7 @@ class OvsDpdkBond(_BaseOpts):
name = _get_required_field(json, 'name', 'OvsDpdkBond')
(use_dhcp, use_dhcpv6, addresses, routes, mtu, nic_mapping,
persist_mapping, defroute, dhclient_args,
- dns_servers) = _BaseOpts.base_opts_from_json(
+ dns_servers, nm_controlled) = _BaseOpts.base_opts_from_json(
json, include_primary=False)
ovs_options = json.get('ovs_options')
ovs_extra = json.get('ovs_extra', [])
@@ -1104,4 +1131,59 @@ class OvsDpdkBond(_BaseOpts):
ovs_extra=ovs_extra, nic_mapping=nic_mapping,
persist_mapping=persist_mapping,
defroute=defroute, dhclient_args=dhclient_args,
- dns_servers=dns_servers)
+ dns_servers=dns_servers,
+ nm_controlled=nm_controlled)
+
+
+class VppInterface(_BaseOpts):
+ """Base class for VPP Interface.
+
+ Vector Packet Processing (VPP) is a high performance packet processing
+ stack that runs in user space in Linux. VPP is used as an alternative to
+ kernel networking stack for accelerated network data path. VPP uses DPDK
+ poll-mode drivers to bind system interfaces rather than kernel drivers.
+ VPP bound interfaces are not visible to kernel networking stack, so we
+ must handle them separately.
+
+ The following parameters can be specified in addition to base Interface:
+ - uio_driver: DPDK poll-mode driver name. Defaults to 'vfio-pci', valid
+ values are 'uio_pci_generic' and 'vfio-pci'.
+ - options: Interface options such as vlan stripping and tx/rx transmit
+ queues specification. Defaults to None. Reference for those
+ configurations can be found at
+ https://wiki.fd.io/view/VPP/Command-line_Arguments
+ Example: 'vlan-strip-offload on num-rx-queues 3'
+
+ Note that 'name' attribute is used to indicate the kernel nic that should
+ be bound to VPP. Once VPP binds the interface, a mapping file will be
+ updated with the interface's information, and this file will be used in
+ subsequent runs of os-net-config.
+ """
+ def __init__(self, name, use_dhcp=False, use_dhcpv6=False, addresses=None,
+ routes=None, mtu=None, primary=False, nic_mapping=None,
+ persist_mapping=False, defroute=True, dhclient_args=None,
+ dns_servers=None, nm_controlled=False, uio_driver='vfio-pci',
+ options=None):
+ addresses = addresses or []
+
+ super(VppInterface, self).__init__(name, use_dhcp, use_dhcpv6,
+ addresses, routes, mtu, primary,
+ nic_mapping, persist_mapping,
+ defroute, dhclient_args,
+ dns_servers, nm_controlled)
+ self.uio_driver = uio_driver
+ self.options = options
+ # pci_dev contains pci address for the interface, it will be populated
+ # when interface is added to config object. It will be determined
+ # either through ethtool or by looking up the dpdk mapping file.
+ self.pci_dev = None
+
+ @staticmethod
+ def from_json(json):
+ name = _get_required_field(json, 'name', 'VppInterface')
+ uio_driver = json.get('uio_driver', 'vfio-pci')
+ options = json.get('options', '')
+
+ opts = _BaseOpts.base_opts_from_json(json)
+ return VppInterface(name, *opts, uio_driver=uio_driver,
+ options=options)