def add_pg_caps_to_pg_obj(pg, phy_mode, cap_list, cap_index=0): if phy_mode == nas_comm.yang.get_value('fc', 'yang-phy-mode'): fc_caps = pg.get_fc_caps() if fc_caps is not None and len(fc_caps) != 0: return _append_fc_br_caps_to_pg_obj(pg, phy_mode, cap_list, cap_index) br_modes = pg.get_breakout_caps() hwp_speeds = pg.get_hwport_speed_caps() hwp_count = len(pg.get_hw_ports()) fp_count = len(pg.get_fp_ports()) for mode in br_modes: skip_ports = nas_comm.yang.get_tbl('breakout-to-skip-port')[mode] for hw_speed in hwp_speeds: phy_npu_speed = fp.get_phy_npu_port_speed( mode, (hw_speed * hwp_count) / fp_count) if fp.verify_npu_supported_speed(phy_npu_speed) == False: # don't add this entry of spped or beakout continue phy_speed = phy_npu_speed if phy_mode == nas_comm.yang.get_value('fc', 'yang-phy-mode'): phy_speed = fp.get_fc_speed_frm_npu_speed(phy_npu_speed) if phy_speed == 0: continue cap_list[str(cap_index)] = { 'phy-mode': phy_mode, 'breakout-mode': mode, 'port-speed': phy_speed, 'skip-ports': skip_ports } cap_index += 1 return cap_index
def add_fc_br_cap_objs(pg, fc_caps, resp): phy_mode = nas_comm.yang.get_value('fc', 'yang-phy-mode') hwp_count = len(pg.get_hw_ports()) fp_count = len(pg.get_fp_ports()) for cap in fc_caps: mode = cap['breakout'] skip_ports = nas_comm.yang.get_value(mode, 'breakout-to-skip-port') hw_speed = cap['hwp_speed'] phy_npu_speed = fp.get_phy_npu_port_speed( mode, (hw_speed * hwp_count) / fp_count) if fp.verify_npu_supported_speed(phy_npu_speed) == False: # don't add this entry of speed or breakout continue phy_fc_speed = cap['phy_fc_speed'] phy_speed = nas_comm.yang.get_value(phy_fc_speed, 'mbps-to-yang-speed') cps_obj = cps_object.CPSObject( module='base-pg/dell-pg/port-groups-state/port-group-state/br-cap', qual='observed', data={ pg_state_attr('br-cap/phy-mode'): phy_mode, pg_state_attr('br-cap/breakout-mode'): mode, pg_state_attr('br-cap/port-speed'): phy_speed, pg_state_attr('br-cap/skip-ports'): skip_ports, pg_state_attr('id'): pg.name }) resp.append(cps_obj.get()) cps_obj = None
def add_fp_caps_to_fp_obj(fp_port, fp_obj): br_modes = fp_port.get_breakout_caps() hw_speeds = fp_port.get_hwport_speed_caps() hwp_count = len(fp_port.get_hwports()) phy_mode = nas_comm.yang.get_value( 'ether', 'yang-phy-mode' ) # FP port does not support FC capability directly. it is on the port group cap_index = 0 cap_list = {} for mode in br_modes: skip_ports = nas_comm.yang.get_tbl('breakout-to-skip-port')[mode] for speed in hw_speeds: phy_speed = fp.get_phy_npu_port_speed(mode, speed * hwp_count) if fp.verify_npu_supported_speed(phy_speed) == False: nas_if.log_info( "create_and_add_fp_caps: fp port %s doesn't support yang speed %s " % (str(fp_port.id), str(phy_speed))) # breakout mode and this speed is excluded from cps show continue cap_list[str(cap_index)] = { 'phy-mode': phy_mode, 'breakout-mode': mode, 'port-speed': phy_speed, 'skip-ports': skip_ports } cap_index += 1 fp_obj.add_attr('br-cap', cap_list)
def create_and_add_fp_caps(fp_port, resp): br_modes = fp_port.get_breakout_caps() hw_speeds = fp_port.get_hwport_speed_caps() hwp_count = len(fp_port.get_hwports()) phy_mode = nas_comm.yang.get_value( 'ether', 'yang-phy-mode' ) # FP port does not support FC capability directly. it is on the port group for mode in br_modes: skip_ports = nas_comm.yang.get_tbl('breakout-to-skip-port')[mode] for speed in hw_speeds: phy_speed = fp.get_phy_npu_port_speed(mode, speed * hwp_count) if fp.verify_npu_supported_speed(phy_speed) == False: nas_if.log_info( "create_and_add_fp_caps: fp port %s doesn't support yang speed %s " % (str(fp_port.id), str(phy_speed))) # breakout mode and this speed is excluded from cps show continue cps_obj = cps_object.CPSObject( module='base-if-phy/front-panel-port/br-cap', qual='target', data={ _fp_attr('br-cap/phy-mode'): phy_mode, _fp_attr('br-cap/breakout-mode'): mode, _fp_attr('br-cap/port-speed'): phy_speed, _fp_attr('br-cap/skip-ports'): skip_ports, _fp_attr('front-panel-port'): fp_port.id }) resp.append(cps_obj.get()) cps_obj = None
def _verify_intf_supported_speed(config, speed): # if it is ethernet type then check if the speed is supported globally intf_phy_mode = nas_comm.get_value(nas_comm.ietf_type_2_phy_mode, config.get_ietf_intf_type()) if intf_phy_mode == nas_comm.get_value(nas_comm.yang_phy_mode, 'ether'): if fp.verify_npu_supported_speed(speed) == False: nas_if.log_err('Configured speed not supported %s' % str(speed)) return False return True
def verify_intf_supported_speed(config, speed): ''' Method to verify if speed is supported by the interface ''' # if it is ethernet type then check if the speed is supported globally intf_phy_mode = nas_comm.yang.get_value(config.get_ietf_intf_type(), 'ietf-type-2-phy-mode') if intf_phy_mode == nas_comm.yang.get_value('ether', 'yang-phy-mode'): if fp.verify_npu_supported_speed(speed) == False: nas_if.log_err('Configured speed not supported %s' % str(speed)) return False return True
def create_and_add_pg_caps(pg, phy_mode, resp): if phy_mode == nas_comm.yang.get_value('fc', 'yang-phy-mode'): fc_caps = pg.get_fc_caps() if fc_caps is not None and len(fc_caps) != 0: add_fc_br_cap_objs(pg, fc_caps, resp) return br_modes = pg.get_breakout_caps() hwp_speeds = pg.get_hwport_speed_caps() hwp_count = len(pg.get_hw_ports()) fp_count = len(pg.get_fp_ports()) for mode in br_modes: skip_ports = nas_comm.yang.get_value(mode, 'breakout-to-skip-port') for hw_speed in hwp_speeds: phy_npu_speed = fp.get_phy_npu_port_speed( mode, (hw_speed * hwp_count) / fp_count) if fp.verify_npu_supported_speed(phy_npu_speed) == False: # don't add this entry of speed or breakout continue phy_speed = phy_npu_speed if phy_mode == nas_comm.yang.get_value('fc', 'yang-phy-mode'): phy_speed = fp.get_fc_speed_frm_npu_speed(phy_npu_speed) if phy_speed == 0: continue cps_obj = cps_object.CPSObject( module= 'base-pg/dell-pg/port-groups-state/port-group-state/br-cap', qual='observed', data={ pg_state_attr('br-cap/phy-mode'): phy_mode, pg_state_attr('br-cap/breakout-mode'): mode, pg_state_attr('br-cap/port-speed'): phy_speed, pg_state_attr('br-cap/skip-ports'): skip_ports, pg_state_attr('id'): pg.name }) resp.append(cps_obj.get()) cps_obj = None
def _append_fc_br_caps_to_pg_obj(pg, phy_mode, cap_list, cap_index): hwp_count = len(pg.get_hw_ports()) fp_count = len(pg.get_fp_ports()) fc_caps = pg.get_fc_caps() for cap in fc_caps: mode = cap['breakout'] skip_ports = nas_comm.yang.get_tbl('breakout-to-skip-port')[mode] hw_speed = cap['hwp_speed'] phy_npu_speed = fp.get_phy_npu_port_speed( mode, (hw_speed * hwp_count) / fp_count) if fp.verify_npu_supported_speed(phy_npu_speed) == False: # don't add this entry of speed or breakout continue phy_fc_speed = cap['phy_fc_speed'] phy_speed = nas_comm.yang.get_value(phy_fc_speed, 'mbps-to-yang-speed') cap_list[str(cap_index)] = { 'phy-mode': phy_mode, 'breakout-mode': mode, 'port-speed': phy_speed, 'skip-ports': skip_ports } cap_index += 1 return cap_index
def create_hg_state_cps_obj(hg_obj): '''Helper Method to generate Hybrid Group State''' if hg_obj is None: nas_if.log_err("Hybrid Group is None") return None obj = cps_object.CPSObject( module='base-pg/dell-pg/port-groups-state/hybrid-group-state', qual='observed', data={ hg_utils.hg_state_attr('id'): hg_obj.name, hg_utils.hg_state_attr('default-profile'): hg_obj.get_hybrid_group_default_profile_mode(), hg_utils.base_hg_state_attr('front-panel-port'): hg_obj.get_fp_ports(), hg_utils.base_hg_state_attr('hwport-list'): hg_obj.get_hw_ports() }) # Add description field for each Hybrid Group. for profile_mode_idx, profile_mode in enumerate( hg_obj.get_supported_hybrid_group_profile_modes()): profile_description = str(profile_mode) for fpp_idx, fpp_num in enumerate(hg_obj.get_fp_ports()): port = fp.find_front_panel_port(fpp_num) hybrid_profile = port.get_hybrid_profile() port_profile_name = str( hybrid_profile.get_port_profile(profile_mode)) port_profile = fp.get_port_profile(port_profile_name) desc = (("; Port %d - %s ") % (fpp_num, port_profile.description)) profile_description += desc obj.add_embed_attr([ hg_utils.hg_state_attr('supported-profiles'), str(profile_mode_idx), 'profile-name' ], str(profile_mode), 6) obj.add_embed_attr([ hg_utils.hg_state_attr('supported-profiles'), str(profile_mode_idx), 'profile-description' ], str(profile_description), 6) for fpp_idx, fpp_num in enumerate(hg_obj.get_fp_ports()): port = fp.find_front_panel_port(fpp_num) prev_port_profile_name = port.get_profile_type() hybrid_profile = port.get_hybrid_profile() for profile_mode_idx, profile_mode in enumerate( hybrid_profile.profile_modes): cur_port_profile_name = str( hybrid_profile.get_port_profile(profile_mode)) port.apply_port_profile(fp.get_port_profile(cur_port_profile_name)) obj.add_embed_attr( [hg_utils.hg_state_attr('port'), str(fpp_idx), 'port-id'], str(fpp_num), 6) obj.add_embed_attr([ hg_utils.hg_state_attr('port'), str(fpp_idx), 'profile', str(profile_mode_idx), 'name' ], str(profile_mode), 8) obj.add_embed_attr([ hg_utils.hg_state_attr('port'), str(fpp_idx), 'profile', str(profile_mode_idx), 'default-phy-mode' ], str(port.get_def_phy_mode()), 8) obj.add_embed_attr([ hg_utils.hg_state_attr('port'), str(fpp_idx), 'profile', str(profile_mode_idx), 'default-breakout-mode' ], str(port.get_def_breakout()), 8) obj.add_embed_attr([ hg_utils.hg_state_attr('port'), str(fpp_idx), 'profile', str(profile_mode_idx), 'default-port-speed' ], str(port.get_default_phy_port_speed()), 8) cap_idx = 0 for mode in port.get_breakout_caps(): for hw_speed in port.get_hwport_speed_caps(): phy_npu_speed = fp.get_phy_npu_port_speed( mode, (hw_speed * len(hg_obj.get_hw_ports())) / len(hg_obj.get_fp_ports())) if False is fp.verify_npu_supported_speed(phy_npu_speed): continue obj.add_embed_attr([ hg_utils.hg_state_attr('port'), str(fpp_idx), 'profile', str(profile_mode_idx), 'br-cap', str(cap_idx), 'phy-mode' ], str(nas_comm.yang.get_value('ether', 'yang-phy-mode')), 10) obj.add_embed_attr([ hg_utils.hg_state_attr('port'), str(fpp_idx), 'profile', str(profile_mode_idx), 'br-cap', str(cap_idx), 'breakout-mode' ], str(mode), 10) obj.add_embed_attr([ hg_utils.hg_state_attr('port'), str(fpp_idx), 'profile', str(profile_mode_idx), 'br-cap', str(cap_idx), 'port-speed' ], str(phy_npu_speed), 10) obj.add_embed_attr([ hg_utils.hg_state_attr('port'), str(fpp_idx), 'profile', str(profile_mode_idx), 'br-cap', str(cap_idx), 'skip-ports' ], str( nas_comm.yang.get_tbl('breakout-to-skip-port')[mode]), 10) cap_idx += 1 port.apply_port_profile(fp.get_port_profile(prev_port_profile_name)) return obj