2 Base Switch Object Definition
3 Authors: james.luhrsen@hp.com
9 from xml.etree.ElementTree import *
11 class BaseSwitch(object):
29 initialization_type = ''
33 connection_configs = []
35 initialization_cmds = []
37 base_openflow_config = []
39 openflow_enable_config = []
41 openflow_enable_validations = []
43 openflow_disable_config = []
44 openflow_disable_validations = []
55 datapath_id_output_string = ''
56 datapath_id_output_command = ''
59 def set_connection_index(self, idx):
60 self.connection_index = idx
62 def set_controller_ip(self, ip):
63 self.of_controller_ip = ip
65 def set_mgmt_ip(self, ip):
68 def set_mgmt_user(self, user):
71 def set_ssh_key(self, key):
74 def update_datapath_id(self):
75 raise NotImplementedError("Please implement this method")
77 def create_flow_match_elements(self, flow_xml):
78 flow_tree = fromstring(flow_xml)
80 self.table_id = flow_tree.find('{urn:opendaylight:flow:inventory}table_id').text
82 instructions_element = flow_tree.find('{urn:opendaylight:flow:inventory}instructions')
83 instruction_element = instructions_element.find('{urn:opendaylight:flow:inventory}instruction')
84 apply_actions = instruction_element.find('{urn:opendaylight:flow:inventory}apply-actions')
85 action = apply_actions.find('{urn:opendaylight:flow:inventory}action')
86 output_action = action.find('{urn:opendaylight:flow:inventory}output-action')
87 output_node_connector = output_action.find('{urn:opendaylight:flow:inventory}output-node-connector')
88 self.action = output_node_connector.text
90 match_element = flow_tree.find('{urn:opendaylight:flow:inventory}match')
91 ethernet_match_element = match_element.find('{urn:opendaylight:flow:inventory}ethernet-match')
93 ethernet_source = ethernet_match_element.find('{urn:opendaylight:flow:inventory}ethernet-source')
94 ethernet_source_address = ethernet_source.find('{urn:opendaylight:flow:inventory}address')
95 self.src_mac = ethernet_source_address.text
97 ethernet_destination = ethernet_match_element.find('{urn:opendaylight:flow:inventory}ethernet-destination')
98 ethernet_destination_address = ethernet_destination.find('{urn:opendaylight:flow:inventory}address')
99 self.dst_mac = ethernet_destination_address.text
101 self.ip_src = match_element.find('{urn:opendaylight:flow:inventory}ipv4-source').text
102 self.ip_dst = match_element.find('{urn:opendaylight:flow:inventory}ipv4-destination').text
104 def convert_hex_to_decimal_as_string(self, hex_string):
105 ##TODO: need to add error checking in case the hex_string is
107 return str(int(hex_string, 16))
109 def get_switch(self, switch_type):
111 Generic method that will allow Robot Code to pass a string
112 to this "keyword - Get Switch" and create an object of that
113 type. (EX: Get Switch OVS)
116 ##TODO: what if the module "switch_type" does not exist. Need some
117 ##error checking for that.
118 module = importlib.import_module(switch_type)
119 return getattr(module, switch_type)()