""" Provision 3800 Object Definition Authors: james.luhrsen@hp.com Created: 2014-10-02 """ import re from BaseSwitch import BaseSwitch class ProVision(BaseSwitch): """ ProVision Super Class """ make = "provision" model = "" mgmt_protocol = "telnet" mgmt_ip = "" mgmt_port = "" mgmt_prompt = model + ".*#" initialization_type = "reboot" of_instance_id = "21" @property def connection_configs(self): return [ "\rend \ \rconfig \ \rconsole local-terminal none \ \rno page \ \rend\r" ] @property def initialization_cmds(self): return [ "\rend\rboot system flash primary config odl_test_startup_config\r", "y", "n", ] @property def cleanup_cmds(self): return ["end", "config", "no openflow\r", "y"] @property def base_openflow_config(self): return ( "end", "config", "openflow", "controller-id " + self.of_instance_id + " ip " + self.of_controller_ip + " controller-interface oobm", "instance " + self.of_instance_id, "member vlan 10", "controller-id " + self.of_instance_id + " ", "version 1.3", "enable", "openflow enable", "end", ) @property def openflow_enable_config(self): return ["end", "config", "openflow enable", "end"] @property def openflow_validation_cmd(self): return "show openflow" @property def openflow_enable_validations(self): return ["OpenFlow +: Enabled", self.of_instance_id + " +Up +2 +1 +1.3"] @property def openflow_disable_config(self): return ["end", "config", "openflow disable", "end"] @property def openflow_disable_validations(self): return ["OpenFlow +: Disabled", self.of_instance_id + " +Down +0 +0 +1.3"] @property def dump_all_flows(self): return "show openflow instance " + self.of_instance_id + " flows" @property def flow_validations(self): return [ "(?ms)Flow Table ID : 0.*Flow Table ID : 100.*" + "Source Protocol Address : " + self.ip_src + ".*" + "Target Protocol Address : " + self.ip_dst + ".*" + "Flow Table ID : " + self.table_id + ".*" + self.action, "Source MAC : " + self.src_mac, "Destination MAC : " + self.dst_mac, ] def create_flow_match_elements(self, flow_xml): super(ProVision, self).create_flow_match_elements(flow_xml) self.src_mac = self.format_mac_with_no_hyphens_and_one_colon(self.src_mac) self.dst_mac = self.format_mac_with_no_hyphens_and_one_colon(self.dst_mac) self.action = self.convert_action_to_provision_format(self.action) def format_mac_with_no_hyphens_and_one_colon(self, mac): mac_no_colons = re.sub(":", "", mac) mac_with_hyphen = mac_no_colons[:6] + "-" + mac_no_colons[6:] return mac_with_hyphen def convert_action_to_provision_format(self, action): if action == "INPORT": return "Ingress Port" if action == "TABLE": return "Table" if action == "NORMAL": return "Normal" if action == "FLOOD": return "Flood" if action == "ALL": return "All" if action == "CONTROLLER": return "Controller Port" if action == "LOCAL": return "Local" return "UNKNOWN" @property def datapath_id_output_command(self): return "show openflow instance " + self.of_instance_id + " | include Datapath" connection_index = "" def set_connection_index(self, idx): self.connection_index = idx datapath_id_output_string = "" datapath_id = "" def update_datapath_id(self): if not self.datapath_id_output_string: self.datapath_id = "unknown" else: # Datapath ID : 000af0921c22bac0 # |-----------------(0)---------------------| # |-----------(1)----------| |------(2)-----| matches = re.search(r"(.*: )(\w+)", self.datapath_id_output_string) datapath_id_hex = matches.group(2) self.datapath_id = self.convert_hex_to_decimal_as_string(datapath_id_hex)