2 Base Switch Object Definition
3 Authors: james.luhrsen@hp.com
7 from xml.etree.ElementTree import * # noqa
10 class BaseSwitch(object):
28 initialization_type = ''
32 connection_configs = []
34 initialization_cmds = []
36 base_openflow_config = []
38 openflow_enable_config = []
40 openflow_enable_validations = []
42 openflow_disable_config = []
43 openflow_disable_validations = []
54 datapath_id_output_string = ''
55 datapath_id_output_command = ''
58 def set_connection_index(self, idx):
59 self.connection_index = idx
61 def set_controller_ip(self, ip):
62 self.of_controller_ip = ip
64 def set_mgmt_ip(self, ip):
67 def set_mgmt_user(self, user):
70 def set_ssh_key(self, key):
73 def update_datapath_id(self):
74 raise NotImplementedError("Please implement this method")
76 def create_flow_match_elements(self, flow_xml):
77 flow_tree = fromstring(flow_xml)
79 self.table_id = flow_tree.find('{urn:opendaylight:flow:inventory}table_id').text
81 instructions_element = flow_tree.find('{urn:opendaylight:flow:inventory}instructions')
82 instruction_element = instructions_element.find('{urn:opendaylight:flow:inventory}instruction')
83 apply_actions = instruction_element.find('{urn:opendaylight:flow:inventory}apply-actions')
84 action = apply_actions.find('{urn:opendaylight:flow:inventory}action')
85 output_action = action.find('{urn:opendaylight:flow:inventory}output-action')
86 output_node_connector = output_action.find('{urn:opendaylight:flow:inventory}output-node-connector')
87 self.action = output_node_connector.text
89 match_element = flow_tree.find('{urn:opendaylight:flow:inventory}match')
90 ethernet_match_element = match_element.find('{urn:opendaylight:flow:inventory}ethernet-match')
92 ethernet_source = ethernet_match_element.find('{urn:opendaylight:flow:inventory}ethernet-source')
93 ethernet_source_address = ethernet_source.find('{urn:opendaylight:flow:inventory}address')
94 self.src_mac = ethernet_source_address.text
96 ethernet_destination = ethernet_match_element.find('{urn:opendaylight:flow:inventory}ethernet-destination')
97 ethernet_destination_address = ethernet_destination.find('{urn:opendaylight:flow:inventory}address')
98 self.dst_mac = ethernet_destination_address.text
100 self.ip_src = match_element.find('{urn:opendaylight:flow:inventory}ipv4-source').text
101 self.ip_dst = match_element.find('{urn:opendaylight:flow:inventory}ipv4-destination').text
103 def convert_hex_to_decimal_as_string(self, hex_string):
104 # TODO: need to add error checking in case the hex_string is
106 return str(int(hex_string, 16))
108 def get_switch(self, switch_type):
110 Generic method that will allow Robot Code to pass a string
111 to this "keyword - Get Switch" and create an object of that
112 type. (EX: Get Switch OVS)
115 # TODO: what if the module "switch_type" does not exist. Need some
116 # error checking for that.
117 module = importlib.import_module(switch_type)
118 return getattr(module, switch_type)()