From 9baf343e0c941bf778a90d00515c5f0f2e601b72 Mon Sep 17 00:00:00 2001 From: Guba Sándor <guba.sandor@cloud.bme.hu> Date: Mon, 11 Nov 2013 17:02:50 +0100 Subject: [PATCH] netdriver: fixing pep issues and adding docstring --- netdriver.py | 117 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------- 1 file changed, 72 insertions(+), 45 deletions(-) diff --git a/netdriver.py b/netdriver.py index 3350262..83da2e9 100644 --- a/netdriver.py +++ b/netdriver.py @@ -1,3 +1,4 @@ +""" CIRCLE driver for Open vSwitch. """ import subprocess import logging @@ -10,30 +11,33 @@ driver = getenv("HYPERVISOR_TYPE", "test") @celery.task def create(network): - port_create(VMNetwork.deserialize(network)) + """ Create a network port. """ + port_create(VMNetwork.deserialize(network)) @celery.task def delete(network): - port_delete(VMNetwork.deserialize(network)) + """ Delete a network port. """ + port_delete(VMNetwork.deserialize(network)) def add_tuntap_interface(if_name): - '''For testing purpose only adding tuntap interface. - ''' + """ For testing purpose only adding tuntap interface. """ subprocess.call(['sudo', 'ip', 'tuntap', 'add', 'mode', 'tap', if_name]) def del_tuntap_interface(if_name): - '''For testing purpose only deleting tuntap interface. - ''' + """ For testing purpose only deleting tuntap interface. """ subprocess.call(['sudo', 'ip', 'tuntap', 'del', 'mode', 'tap', if_name]) def ovs_command_execute(command): - '''Execute OpenVSwitch commands + """ Execute OpenVSwitch commands. + command - List of strings - ''' + return - Command output + + """ command = ['sudo', 'ovs-vsctl'] + command return_val = subprocess.call(command) logging.info('OVS command: %s executed.', command) @@ -41,9 +45,12 @@ def ovs_command_execute(command): def ofctl_command_execute(command): - '''Execute OpenVSwitch flow commands + """ Execute OpenVSwitch flow commands. + command - List of strings - ''' + return - Command output + + """ command = ['sudo', 'ovs-ofctl'] + command return_val = subprocess.call(command) logging.info('OVS flow command: %s executed.', command) @@ -59,7 +66,9 @@ def build_flow_rule( tp_dst=None, priority=None, actions=None): - ''' + """ + Generate flow rule from the parameters. + in_port - Interface flow-port number dl_src - Source mac addsress (virtual interface) protocol - Protocol for the rule like ip,ipv6,arp,udp,tcp @@ -68,7 +77,10 @@ def build_flow_rule( tp_dst - Destination port priority - Rule priority actions - Action for the matching rule - ''' + + return - Open vSwitch compatible flow rule. + + """ flow_rule = "" if in_port is None: raise AttributeError("Parameter in_port is mandantory") @@ -85,29 +97,31 @@ def build_flow_rule( # Generate rule string with comas, except the last item for i in rule[:-1]: flow_rule += i + "," - else: - flow_rule += rule[-1] + flow_rule += rule[-1] return flow_rule def set_port_vlan(network_name, vlan): - ''' Setting vlan for interface named net_name - ''' + """ Setting vlan for interface named net_name. """ + cmd_list = ['set', 'Port', network_name, 'tag=' + str(vlan)] ovs_command_execute(cmd_list) def add_port_to_bridge(network_name, bridge): + """ Add bridge to network_name. """ cmd_list = ['add-port', bridge, network_name] ovs_command_execute(cmd_list) def del_port_from_bridge(network_name): + """ Delete network_name port. """ ovs_command_execute(['del-port', network_name]) -def mac_filter(network, port_number, delete=False): - if not delete: +def mac_filter(network, port_number, remove=False): + """ Apply/Remove mac filtering rule for network. """ + if not remove: flow_cmd = build_flow_rule(in_port=port_number, dl_src=network.mac, priority="40000", actions="normal") ofctl_command_execute(["add-flow", network.bridge, flow_cmd]) @@ -116,8 +130,9 @@ def mac_filter(network, port_number, delete=False): ofctl_command_execute(["del-flows", network.bridge, flow_cmd]) -def ban_dhcp_server(network, port_number, delete=False): - if not delete: +def ban_dhcp_server(network, port_number, remove=False): + """ Apply/Remove dhcp-server ban rule to network. """ + if not remove: flow_cmd = build_flow_rule(in_port=port_number, dl_src=network.mac, protocol="udp", tp_dst="68", priority="43000", actions="drop") @@ -128,8 +143,9 @@ def ban_dhcp_server(network, port_number, delete=False): ofctl_command_execute(["del-flows", network.bridge, flow_cmd]) -def ipv4_filter(network, port_number, delete=False): - if not delete: +def ipv4_filter(network, port_number, remove=False): + """ Apply/Remove ipv4 filter rule to network. """ + if not remove: flow_cmd = build_flow_rule(in_port=port_number, dl_src=network.mac, protocol="ip", nw_src=network.ipv4, priority=42000, actions="normal") @@ -140,8 +156,9 @@ def ipv4_filter(network, port_number, delete=False): ofctl_command_execute(["del-flows", network.bridge, flow_cmd]) -def ipv6_filter(network, port_number, delete=False): - if not delete: +def ipv6_filter(network, port_number, remove=False): + """ Apply/Remove ipv6 filter rule to network. """ + if not remove: flow_cmd = build_flow_rule(in_port=port_number, dl_src=network.mac, protocol="ipv6", ipv6_src=network.ipv6, priority=42000, actions="normal") @@ -152,8 +169,9 @@ def ipv6_filter(network, port_number, delete=False): ofctl_command_execute(["del-flows", network.bridge, flow_cmd]) -def arp_filter(network, port_number, delete=False): - if not delete: +def arp_filter(network, port_number, remove=False): + """ Apply/Remove arp filter rule to network. """ + if not remove: flow_cmd = build_flow_rule(in_port=port_number, dl_src=network.mac, protocol="arp", nw_src=network.ipv4, priority=41000, actions="normal") @@ -164,8 +182,9 @@ def arp_filter(network, port_number, delete=False): ofctl_command_execute(["del-flows", network.bridge, flow_cmd]) -def enable_dhcp_client(network, port_number, delete=False): - if not delete: +def enable_dhcp_client(network, port_number, remove=False): + """ Apply/Remove allow dhcp-client rule to network. """ + if not remove: flow_cmd = build_flow_rule(in_port=port_number, dl_src=network.mac, protocol="udp", tp_dst="67", priority="40000", actions="normal") @@ -176,8 +195,9 @@ def enable_dhcp_client(network, port_number, delete=False): ofctl_command_execute(["del-flows", network.bridge, flow_cmd]) -def disable_all_not_allowed_trafic(network, port_number, delete=False): - if not delete: +def disable_all_not_allowed_trafic(network, port_number, remove=False): + """ Apply/Remove explicit deny all not allowed network. """ + if not remove: flow_cmd = build_flow_rule(in_port=port_number, priority="30000", actions="drop") ofctl_command_execute(["add-flow", network.bridge, flow_cmd]) @@ -187,8 +207,7 @@ def disable_all_not_allowed_trafic(network, port_number, delete=False): def port_create(network): - ''' Adding port to bridge apply rules and pull up interface. - ''' + """ Adding port to bridge apply rules and pull up interface. """ # For testing purpose create tuntap iface if driver == "test": add_tuntap_interface(network.name) @@ -218,22 +237,21 @@ def port_create(network): def port_delete(network): - ''' - ''' + """ Remove port from bridge and remove rules from flow database. """ # Getting network FlowPortNumber port_number = get_fport_for_network(network) # Clear network rules if network.managed: - ban_dhcp_server(network, port_number, delete=True) - ipv4_filter(network, port_number, delete=True) - ipv6_filter(network, port_number, delete=True) - arp_filter(network, port_number, delete=True) - enable_dhcp_client(network, port_number, delete=True) + ban_dhcp_server(network, port_number, remove=True) + ipv4_filter(network, port_number, remove=True) + ipv6_filter(network, port_number, remove=True) + arp_filter(network, port_number, remove=True) + enable_dhcp_client(network, port_number, remove=True) else: - mac_filter(network, port_number, delete=True) + mac_filter(network, port_number, remove=True) # Explicit deny all other traffic - disable_all_not_allowed_trafic(network, port_number, delete=True) + disable_all_not_allowed_trafic(network, port_number, remove=True) # Delete port del_port_from_bridge(network.name) @@ -244,6 +262,11 @@ def port_delete(network): def pull_up_interface(network): + """ Pull up interface named network. + + return command output + + """ command = ['sudo', 'ip', 'link', 'set', 'up', network.name] return_val = subprocess.call(command) logging.info('IP command: %s executed.', command) @@ -251,9 +274,13 @@ def pull_up_interface(network): def get_fport_for_network(network): - '''Returns the OpenFlow port number for a given network - cmd: ovs-vsctl get Interface vm-88 ofport - ''' + """ Return the OpenFlow port number for a given network. + + Example: ovs-vsctl get Interface vm-88 ofport + + return stripped output string + + """ output = subprocess.check_output( ['sudo', 'ovs-vsctl', 'get', 'Interface', network.name, 'ofport']) - return output.strip() + return str(output).strip() -- libgit2 0.26.0