diff options
Diffstat (limited to 'src/ovs/ofctl.py')
-rw-r--r-- | src/ovs/ofctl.py | 50 |
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 |