2 Base Switch Object Definition
3 Authors: james.luhrsen@hp.com
7 import xml.etree.ElementTree as ElementTree
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_mgmt_prompt(self, prompt):
71 self.mgmt_prompt = prompt
73 def set_ssh_key(self, key):
76 def update_datapath_id(self):
77 raise NotImplementedError("Please implement this method")
79 def create_flow_match_elements(self, flow_xml):
80 flow_tree = ElementTree.fromstring(flow_xml)
81 self.table_id = flow_tree.find("{urn:opendaylight:flow:inventory}table_id").text
82 instructions_element = flow_tree.find(
83 "{urn:opendaylight:flow:inventory}instructions"
85 instruction_element = instructions_element.find(
86 "{urn:opendaylight:flow:inventory}instruction"
88 apply_actions = instruction_element.find(
89 "{urn:opendaylight:flow:inventory}apply-actions"
91 action = apply_actions.find("{urn:opendaylight:flow:inventory}action")
92 output_action = action.find("{urn:opendaylight:flow:inventory}output-action")
93 output_node_connector = output_action.find(
94 "{urn:opendaylight:" "flow:inventory}output-node-connector"
96 self.action = output_node_connector.text
97 match_element = flow_tree.find("{urn:opendaylight:flow:inventory}match")
98 ethernet_match_element = match_element.find(
99 "{urn:opendaylight:flow:inventory}ethernet-match"
101 ethernet_source = ethernet_match_element.find(
102 "{urn:opendaylight:flow:inventory}ethernet-source"
104 ethernet_source_address = ethernet_source.find(
105 "{urn:opendaylight:flow:inventory}address"
107 self.src_mac = ethernet_source_address.text
108 ethernet_destination = ethernet_match_element.find(
109 "{urn:opendaylight:flow:inventory}ethernet-destination"
111 ethernet_destination_address = ethernet_destination.find(
112 "{urn:opendaylight:flow:inventory}address"
114 self.dst_mac = ethernet_destination_address.text
115 self.ip_src = match_element.find(
116 "{urn:opendaylight:flow:inventory}ipv4-source"
118 self.ip_dst = match_element.find(
119 "{urn:opendaylight:flow:inventory}ipv4-destination"
122 def convert_hex_to_decimal_as_string(self, hex_string):
123 # TODO: need to add error checking in case the hex_string is
125 return str(int(hex_string, 16))
127 def get_switch(self, switch_type):
129 Generic method that will allow Robot Code to pass a string
130 to this "keyword - Get Switch" and create an object of that
131 type. (EX: Get Switch OVS)
134 # TODO: what if the module "switch_type" does not exist. Need some
135 # error checking for that.
136 module = importlib.import_module(switch_type)
137 return getattr(module, switch_type)()