summaryrefslogtreecommitdiffstats
path: root/src/ovs/ofctl.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/ovs/ofctl.py')
-rw-r--r--src/ovs/ofctl.py50
1 files changed, 47 insertions, 3 deletions
diff --git a/src/ovs/ofctl.py b/src/ovs/ofctl.py
index 9d16ef76..43151d3a 100644
--- a/src/ovs/ofctl.py
+++ b/src/ovs/ofctl.py
@@ -1,4 +1,4 @@
-# Copyright 2015 Intel Corporation.
+# Copyright 2015-2016 Intel Corporation.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -31,6 +31,8 @@ _OVS_VSCTL_BIN = os.path.join(settings.getValue('OVS_DIR'), 'utilities',
'ovs-vsctl')
_OVS_OFCTL_BIN = os.path.join(settings.getValue('OVS_DIR'), 'utilities',
'ovs-ofctl')
+_OVS_APPCTL_BIN = os.path.join(settings.getValue('OVS_DIR'), 'utilities',
+ 'ovs-appctl')
_OVS_BRIDGE_NAME = settings.getValue('VSWITCH_BRIDGE_NAME')
@@ -63,6 +65,22 @@ class OFBase(object):
return tasks.run_task(
cmd, self.logger, 'Running ovs-vsctl...', check_error)
+
+ def run_appctl(self, args, check_error=False):
+ """Run ``ovs-appctl`` with supplied arguments.
+
+ :param args: Arguments to pass to ``ovs-appctl``
+ :param check_error: Throw exception on error
+
+ :return: None
+ """
+ cmd = ['sudo', _OVS_APPCTL_BIN,
+ '--timeout',
+ str(self.timeout)] + args
+ return tasks.run_task(
+ cmd, self.logger, 'Running ovs-appctl...', check_error)
+
+
# datapath management
def add_br(self, br_name=_OVS_BRIDGE_NAME, params=None):
@@ -90,6 +108,32 @@ class OFBase(object):
self.logger.debug('delete bridge')
self.run_vsctl(['del-br', br_name])
+ # Route and ARP functions
+
+ def add_route(self, network, destination):
+ """Add route to tunneling routing table.
+
+ :param network: Network
+ :param destination: Gateway
+
+ :return: None
+ """
+ self.logger.debug('add ovs/route')
+ self.run_appctl(['ovs/route/add', network, destination])
+
+
+ def set_tunnel_arp(self, ip_addr, mac_addr, br_name=_OVS_BRIDGE_NAME):
+ """Add OVS arp entry for tunneling
+
+ :param ip: IP of bridge
+ :param mac_addr: MAC address of the bridge
+ :param br_name: Name of the bridge
+
+ :return: None
+ """
+ self.logger.debug('tnl/arp/set')
+ self.run_appctl(['tnl/arp/set', br_name, ip_addr, mac_addr])
+
class OFBridge(OFBase):
"""Control a bridge instance using ``ovs-vsctl`` and ``ovs-ofctl``.
@@ -330,10 +374,10 @@ def flow_key(flow):
field_params.append('%(field)s=%(value)s' %
{'field': key, 'value': default})
- field_params = ','.join(field_params)
+ field_params_str = ','.join(field_params)
_flow_key_param = {
- 'fields': field_params,
+ 'fields': field_params_str,
}
# no actions == delete key