def set_fp_port_config(fr_port, br_mode, phy_port_speed, phy_mode): nas_if.log_info( 'Front-panel-port %d config request: br_mode %s speed %s phy_mode %s' % (fr_port, br_mode, phy_port_speed, phy_mode)) fp_port_obj = fp.find_front_panel_port(fr_port) if fp_port_obj is None: nas_if.log_err('Front-panel-port %d not found' % fr_port) return False npu = fp_port_obj.npu if phy_mode == None: phy_mode = nas_comm.yang.get_value('ether', 'yang-phy-mode') #Check if breakout mode is same as current breakout mode if (br_mode == fp_port_obj.get_breakout_mode() and fp_port_obj.get_phy_mode() == phy_mode and fp_port_obj.get_port_speed() == phy_port_speed): nas_if.log_info('FP config is same as current config') return True #check if breakout mode is supported by the FP port ( not now) # TODO port_list = port_utils.get_phy_port_list() #convert FP port to Hwport list ( control port) hwports = fp_port_obj.hwports[:] deleted_phy_ports = {} for hwport in hwports: phy_port_obj = port_utils.get_phy_port_by_hw_port( port_list, npu, hwport) if phy_port_obj == None: continue if port_utils.cps_del_nas_port(phy_port_obj): port_utils.del_phy_port(port_list, phy_port_obj) deleted_phy_ports[hwport] = phy_port_obj else: nas_if.log_err('Failed to delete physical port') return False # Create new phy ports based on the new breakout mode created_phy_ports = {} if port_utils.create_nas_ports(npu, hwports, br_mode, phy_port_speed, phy_mode, fr_port, created_phy_ports) == True: for port in created_phy_ports: port_utils.add_phy_port(port_list, created_phy_ports[port]) else: nas_if.log_err( 'Failed to create physical port, rollback to previous status') port_utils.rollback_port_add_del(port_list, created_phy_ports, deleted_phy_ports, fp_port_obj.get_port_speed(), fp_port_obj.get_phy_mode()) return False #set new breakout mode and new port speed fp_port_obj.set_breakout_mode(br_mode) fp_port_obj.set_port_speed(phy_port_speed) send_fp_event(fp_port_obj) return True
def set_fp_to_hwp_mapping(fr_port, br_mode, port_speed, phy_mode, hwports): # If hwports is empty then delete all phy ports under the FP and set the hwport list to NOne port_detail = fp.find_front_panel_port(fr_port) if port_detail == None: return False hwp_list = port_detail.get_hwports() port_list = port_utils.get_phy_port_list() if len(hwports) == 0: npu = port_detail.npu if hwp_list != None: for hwp in hwp_list: phy_obj = port_utils.get_phy_port_by_hw_port( port_list, npu, hwp) if phy_obj != None: # delete the physical port ret = port_utils.cps_del_nas_port(phy_obj) if ret == False: nas_if.log_err(' failed to delete Phy port') return False # Delete hwp to phy port mapping port_utils.del_phy_port(port_list, phy_obj) hwports += hwp_list # set the hw port list to None port_detail.set_hwports(None) # set breakout mode to None port_detail.set_breakout_mode(None) return True else: # hwports is not empty. It means add the hwport to the fp port # create phy port corresponding to the hwport # check if hwport list is empty if hwp_list != None and len(hwp_list) > 0: # hw port list is not empty, return False print 'port list is not empty' return False port_detail.set_hwports(hwports) # Now create phy ports base on the new hw port list. ret = set_fp_port_config(fr_port, br_mode, port_speed, phy_mode) if not ret: # Rollback port_detail.set_hwports(None) return ret return True