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.\
82 find('{urn:opendaylight:flow:inventory}table_id').text
83 instructions_element = flow_tree.\
84 find('{urn:opendaylight:flow:inventory}instructions')
85 instruction_element = instructions_element.\
86 find('{urn:opendaylight:flow:inventory}instruction')
87 apply_actions = instruction_element.\
88 find('{urn:opendaylight:flow:inventory}apply-actions')
89 action = apply_actions.\
90 find('{urn:opendaylight:flow:inventory}action')
91 output_action = action.\
92 find('{urn:opendaylight:flow:inventory}output-action')
93 output_node_connector = \
94 output_action.find('{urn:opendaylight:'
95 'flow:inventory}output-node-connector')
96 self.action = output_node_connector.text
97 match_element = flow_tree.\
98 find('{urn:opendaylight:flow:inventory}match')
99 ethernet_match_element = match_element.\
100 find('{urn:opendaylight:flow:inventory}ethernet-match')
101 ethernet_source = ethernet_match_element.\
102 find('{urn:opendaylight:flow:inventory}ethernet-source')
103 ethernet_source_address = ethernet_source.\
104 find('{urn:opendaylight:flow:inventory}address')
105 self.src_mac = ethernet_source_address.text
106 ethernet_destination = ethernet_match_element.\
107 find('{urn:opendaylight:flow:inventory}ethernet-destination')
108 ethernet_destination_address = ethernet_destination.\
109 find('{urn:opendaylight:flow:inventory}address')
110 self.dst_mac = ethernet_destination_address.text
111 self.ip_src = match_element.\
112 find('{urn:opendaylight:flow:inventory}ipv4-source').text
113 self.ip_dst = match_element.\
114 find('{urn:opendaylight:flow:inventory}ipv4-destination').text
116 def convert_hex_to_decimal_as_string(self, hex_string):
117 # TODO: need to add error checking in case the hex_string is
119 return str(int(hex_string, 16))
121 def get_switch(self, switch_type):
123 Generic method that will allow Robot Code to pass a string
124 to this "keyword - Get Switch" and create an object of that
125 type. (EX: Get Switch OVS)
128 # TODO: what if the module "switch_type" does not exist. Need some
129 # error checking for that.
130 module = importlib.import_module(switch_type)
131 return getattr(module, switch_type)()