""" Base Switch Object Definition Authors: james.luhrsen@hp.com Created: 2014-09-20 """ import importlib from xml.etree.ElementTree import * # noqa class BaseSwitch(object): ''' Switch Base Class ''' make = '' model = '' mgmt_protocol = '' ssh_key = '' mgmt_ip = '' mgmt_port = '' mgmt_user = '' mgmt_password = '' mgmt_prompt = '' connection_index = '' initialization_type = '' of_controller_ip = '' connection_configs = [] initialization_cmds = [] base_openflow_config = [] openflow_enable_config = [] openflow_enable_validations = [] openflow_disable_config = [] openflow_disable_validations = [] dump_all_flows = [] src_mac = '' dst_mac = '' ip_src = '' ip_dst = '' table_id = '' action = '' datapath_id_output_string = '' datapath_id_output_command = '' datapath_id = '' def set_connection_index(self, idx): self.connection_index = idx def set_controller_ip(self, ip): self.of_controller_ip = ip def set_mgmt_ip(self, ip): self.mgmt_ip = ip def set_mgmt_user(self, user): self.mgmt_user = user def set_mgmt_prompt(self, prompt): self.mgmt_prompt = prompt def set_ssh_key(self, key): self.ssh_key = key def update_datapath_id(self): raise NotImplementedError("Please implement this method") def create_flow_match_elements(self, flow_xml): flow_tree = fromstring(flow_xml) self.table_id = flow_tree.\ find('{urn:opendaylight:flow:inventory}table_id').text instructions_element = flow_tree.\ find('{urn:opendaylight:flow:inventory}instructions') instruction_element = instructions_element.\ find('{urn:opendaylight:flow:inventory}instruction') apply_actions = instruction_element.\ find('{urn:opendaylight:flow:inventory}apply-actions') action = apply_actions.\ find('{urn:opendaylight:flow:inventory}action') output_action = action.\ find('{urn:opendaylight:flow:inventory}output-action') output_node_connector = \ output_action.find('{urn:opendaylight:' 'flow:inventory}output-node-connector') self.action = output_node_connector.text match_element = flow_tree.\ find('{urn:opendaylight:flow:inventory}match') ethernet_match_element = match_element.\ find('{urn:opendaylight:flow:inventory}ethernet-match') ethernet_source = ethernet_match_element.\ find('{urn:opendaylight:flow:inventory}ethernet-source') ethernet_source_address = ethernet_source.\ find('{urn:opendaylight:flow:inventory}address') self.src_mac = ethernet_source_address.text ethernet_destination = ethernet_match_element.\ find('{urn:opendaylight:flow:inventory}ethernet-destination') ethernet_destination_address = ethernet_destination.\ find('{urn:opendaylight:flow:inventory}address') self.dst_mac = ethernet_destination_address.text self.ip_src = match_element.\ find('{urn:opendaylight:flow:inventory}ipv4-source').text self.ip_dst = match_element.\ find('{urn:opendaylight:flow:inventory}ipv4-destination').text def convert_hex_to_decimal_as_string(self, hex_string): # TODO: need to add error checking in case the hex_string is # not fully hex return str(int(hex_string, 16)) def get_switch(self, switch_type): """ Generic method that will allow Robot Code to pass a string to this "keyword - Get Switch" and create an object of that type. (EX: Get Switch OVS) """ # TODO: what if the module "switch_type" does not exist. Need some # error checking for that. module = importlib.import_module(switch_type) return getattr(module, switch_type)()