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
Пример #5
0
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