Exemple #1
0
def set_media_type_on_port_create(phy_obj):
    hwport = phy_obj.get_attr_data('hardware-port-id')
    if hwport <= 0:
        return
    npu = phy_obj.get_attr_data('npu-id')
    port_id = phy_obj.get_attr_data('port-id')
    fp_port_details = fp.find_port_by_hwport(npu, hwport)
    if fp_port_details is None:
        return
    # Fetch media info from PAS
    pas_media_list = media.get_media_info(fp_port_details.media_id)
    pas_media_obj = cps_object.CPSObject(obj=pas_media_list[0])
    media.nas_set_media_type_by_phy_port(npu, port_id,
                                         pas_media_obj.get_attr_data('type'))
def test_get_all_lag_intf():
    cps_obj = cps_object.CPSObject(
        module="dell-base-if-cmn/if/interfaces/interface", qual="target")
    ret_list = []
    cps_obj.add_attr("if/interfaces/interface/type", "ianaift:ieee8023adLag")
    print "Input object: ", cps_obj.get()

    if cps.get([cps_obj.get()], ret_list):
        if ret_list:
            for ret_obj in ret_list:
                print "-----------------------------------------------------"
                cps_utils.printable(ret_obj)
                print ret_obj
                print "-----------------------------------------------------"
Exemple #3
0
    def getChassisMac():

        list = []
        # Obtain a list with objects from dell-base-if-cmn/if/interfaces/interface
        cps.get([cps.key_from_name('target', 'base-pas/chassis')], list)

        # Ignore the first entry
        for entry in list:
            # Construct a new object for each entry
            get_obj = cps_object.CPSObject(obj=entry)

            phys_address = get_obj.get_attr_data("base_mac_addresses")
            Utils.cliLogger("Chassis MAC: " + phys_address, 1)
            return phys_address
def _get_node_group_objs():
    # Get all cps/node-group objects
    obj = cps_object.CPSObject(qual="target", module="cps/node-group")
    node_grp_objs = []
    cps.db_get(obj.get(), node_grp_objs)

    node_group_objs = []
    for r in node_grp_objs:
        grp = {}
        _embedded_obj_hack(r)
        grp = cps_convert_attr_data(r)
        node_group_objs.append(grp)

    return node_group_objs
Exemple #5
0
def monitor_phy_media():
    media.init_nas_media_info()
    handle = cps.event_connect()
    cps.event_register(handle, _media_key)
    while True:
        o = cps.event_wait(handle)
        obj = cps_object.CPSObject(obj=o)
        nas_if.log_info("media event received")
        try:
            # configure NPU for the media-type change event
            media.if_media_type_set(obj)
        except:
            # the event could be unrelated to media-type
            continue
Exemple #6
0
def media_led_set(slot, media_id, channel, speed):
    media_channel = cps_object.CPSObject(module='base-pas/media-channel',
                                         qual='target',
                                         data={
                                             'slot': slot,
                                             'port': media_id,
                                             'channel': channel,
                                             'speed': speed
                                         })
    cps_utils.print_obj(media_channel.get())
    ch = {'operation': 'set', 'change': media_channel.get()}
    print "set speed for media Id : %d channel %d speed %d " % (media_id,
                                                                channel, speed)
    cps.transaction([ch])
def create_sflow_session(interface, direction, rate):
    """create a new sflow session
    @interface - interface on which sflow is to be enabled
    @direction - direction in which packet sampling is to be done
    @rate - sampling packet rate
    @return true if sflow session is created othersie false
    """
    data_dict = {
        "ifindex": nu.if_nametoindex(str(interface)),
        "direction": direction_map[str(direction)],
        "sampling-rate": str(rate)
    }
    obj = cps_object.CPSObject(module="base-sflow/entry", data=data_dict)
    return do_transaction(obj, "create")
def _fill_connection_obj(node_info):
    cur_obj = cps_object.CPSObject(qual="observed",
                                   module="cps/connection-object")

    if 'ip' in node_info:
        cur_obj.add_attr('addr', node_info['ip'])
    if 'name' in node_info:
        cur_obj.add_attr('name', node_info['name'])
    if 'tunnel' in node_info:
        cur_obj.add_attr('tunnel', node_info['tunnel'])

    cur_obj.add_attr('timestamp',
                     '{:%Y-%b-%d %H:%M:%S:%f}'.format(datetime.datetime.now()))
    return cur_obj.get()
def create_mirror_session(src, dst, direction):
    """create a new mirror session
    @src - source mirror interface
    @dst - destiantion mirrorr interface
    @direction - direction in which packets needs to be mirrored
    @return true if mirror session was created successfully otherwise false
    """
    data_dict = {"dst-intf": nu.if_nametoindex(str(dst)), "type": 1}
    obj = cps_object.CPSObject(module="base-mirror/entry", data=data_dict)
    src_intf_list = ["intf", "0", "src"]
    obj.add_embed_attr(src_intf_list, nu.if_nametoindex(str(src)))
    src_intf_list[2] = "direction"
    obj.add_embed_attr(src_intf_list, direction_map[str(direction)])
    return do_transaction(obj, "create")
def handle_addr_event():
    _intf_addr_evt_handle = cps.event_connect()
    cps.event_register(_intf_addr_evt_handle, _linux_intf_addr_key)
    global _addr_mutex
    global _dad_timer
    _addr_mutex = Lock()

    while True:
        intf_evt = cps.event_wait(_intf_addr_evt_handle)
        obj = cps_object.CPSObject(obj=intf_evt)
        if obj is None:
            continue

        if not 'operation' in intf_evt.keys():
            continue
        op = intf_evt['operation']

        vrf_name = None
        intf_name = None
        intf_addr = None
        intf_prefix_len = 0
        dad_failed = 0

        try:
            dad_failed = obj.get_attr_data('base-ip/ipv6/dad-failed')
            # if DAD is not failed for the IPv6 address, ignore this event.
            if dad_failed == 0:
                continue
            vrf_name = obj.get_attr_data('base-ip/ipv6/vrf-name')
            intf_name = obj.get_attr_data('base-ip/ipv6/name')
            intf_addr = obj.get_attr_data('base-ip/ipv6/address/ip')
            intf_addr = binascii.unhexlify(intf_addr)
            intf_addr = socket.inet_ntop(socket.AF_INET6, intf_addr)
            intf_prefix_len = obj.get_attr_data('base-ip/ipv6/address/prefix-length')
        except ValueError as e:
            continue

        key = '*'+str(vrf_name)+'*'+str(intf_name)+'*'+str(intf_addr)+'/'+str(intf_prefix_len)+'*'
        _addr_mutex.acquire()
        val = _intf_addr_dad_failed_list.get(key, None)
        if op == 'create' or op == 'set':
            if val is None:
                _intf_addr_dad_failed_list[key] = 1
                if len(_intf_addr_dad_failed_list) == 1:
                    _dad_timer = Timer(_dad_failure_handle_intvl, handle_dad_failure_timer)
                    _dad_timer.start()
        elif op == 'delete':
            if val is not None:
                _intf_addr_dad_failed_list.pop(key, None)
        _addr_mutex.release()
Exemple #11
0
def nas_set_media_type_by_media_id(slot, media_id, media_type):
    l = []
    o = cps_object.CPSObject(module='base-if-phy/front-panel-port',
                             data={'media-id': media_id})
    cps.get([o.get()], l)

    if len(l) == 0:
        print "No such port found... for medial %d" % media_id
        return

    port_list = nas_if.physical_ports_for_front_panel_port(
        cps_object.CPSObject(obj=l[0]))
    if len(port_list) == 0:
        print "There are no physical ports for front panel port "
        print l[0]
        return

    for port in port_list:
        print " port id : %d.. media type: %d " % (
            port.get_attr_data('port-id'), media_type)
        port.add_attr('phy-media', media_type)
        ch = {'operation': 'set', 'change': port.get()}
        cps.transaction([ch])
def test_get_exact_intf():
    cps_obj = cps_object.CPSObject(
        module="dell-base-if-cmn/if/interfaces/interface", qual="target")
    ret_list = []
    cps_obj.add_attr("dell-base-if-cmn/if/interfaces/interface/if-index", 10)
    print "Input object: ", cps_obj.get()

    if cps.get([cps_obj.get()], ret_list):
        if ret_list:
            for ret_obj in ret_list:
                print "-----------------------------------------------------"
                cps_utils.printable(ret_obj)
                print ret_obj
                print "-----------------------------------------------------"
 def __init__(self):
     IfComponentCache.__init__(self)
     l = nas_os_if_list()
     for i in l:
         try:
             obj = cps_object.CPSObject(obj=i)
             self.m[obj.get_attr_data('if/interfaces/interface/name')] = obj
             self.m[self.get_phy_port_cache_keys(
                 obj.get_attr_data(
                     'base-if-phy/if/interfaces/interface/npu-id'),
                 obj.get_attr_data(
                     'base-if-phy/if/interfaces/interface/port-id'))] = obj
         except:
             continue
def identification_led_set(name, state):
    config = if_config.if_config_get(name)
    port = config.get_fp_port()
    led_name = "Port " + str(port) + " Beacon"
    fp_beacon_led_obj = cps_object.CPSObject(module='base-pas/led',
                                             qual='target',
                                             data={
                                                 'slot': 1,
                                                 'entity-type': 3,
                                                 'name': led_name,
                                                 'on': state
                                             })
    ch = {'operation': 'set', 'change': fp_beacon_led_obj.get()}
    return cps.transaction([ch])
    def __init__(self):
        IfComponentCache.__init__(self)
        self.l = self._list(get_physical_key())
        self.m = {}

        for i in self.l:
            ph = cps_object.CPSObject(obj=i)
            self.m[
                self.get_phy_port_cache_hw_keys(
                    ph.get_attr_data('npu-id'),
                    ph.get_attr_data('hardware-port-id'))
            ] = ph
            self.m[self.get_phy_port_cache_keys(ph.get_attr_data('npu-id'),
                                                ph.get_attr_data('port-id'))] = ph
def monitor_media_events():
    handle = cps.event_connect()
    cps.event_register(handle, nas_comm.yang.get_value('media_key', 'keys_id'))
    while True:
        o = cps.event_wait(handle)
        obj = cps_object.CPSObject(obj=o)
        nas_if.log_info("Media event received")
        global mutex
        mutex.acquire()
        try:
            set_intf_request(obj)
        except:
            logging.exception('logical interface media event failed')
        mutex.release()
def init_fp_ports(xnode_fp, lookup_map, lookup_sched_prof, lookup_buf_prof):
    # Be backward compatible
    if 'port' not in map(lambda x: x.tag, xnode_fp.getchildren()):
        init_all_ports_of_type('ianaift:ethernetCsmacd', xnode_fp, lookup_map,
                               lookup_sched_prof, lookup_buf_prof)
        return
    ifs = nas_os_if_utils.nas_os_if_list()
    ifnames = map(
        lambda x: cps_object.CPSObject(obj=x).get_attr_data(
            'if/interfaces/interface/name'), ifs)
    d = {}
    for pr in enumerate(ifnames):
        d[pr[1]] = pr[0]
    ifnames.sort()
    for xnode_port in xnode_fp:
        if xnode_port.tag != 'port':
            continue
        if 'port' in xnode_port.attrib:
            # Single port
            ifname = xnode_port.attrib['port']
            if ifname not in ifnames:
                continue
            init_fp_port(cps_object.CPSObject(obj=ifs[d[ifname]]), lookup_map,
                         lookup_sched_prof, lookup_buf_prof)
            continue
        if 'from' in xnode_port.attrib and 'to' in xnode_port.attrib:
            # Range of ports
            _from = xnode_port.attrib['from']
            _to = xnode_port.attrib['to']
            if _from not in ifnames or _to not in ifnames:
                continue
            i = ifnames.index(_from)
            j = ifnames.index(_to)
            while i <= j:
                init_fp_port(cps_object.CPSObject(obj=ifs[d[ifnames[i]]]),
                             lookup_map, lookup_sched_prof, lookup_buf_prof)
                i = i + 1
Exemple #18
0
def get_igmp_snooping_int(resp, module_name, ip_type, iplink_get_state,
                          vlan_id):
    vlan_map = get_vlan_mapping(vlan_id)
    if vlan_map is None:
        log_err('Failed to get VLAN ID to name mapping')
        return False

    if vlan_id is not None:
        log_info('Get IGMP information for VLAN %d' % vlan_id)
        if not vlan_id in vlan_map:
            log_err('VLAN ID %d is not in map' % vlan_id)
            return False
        route_list = get_igmp_snooping_route(ip_type, vlan_map[vlan_id])
    else:
        route_list = get_igmp_snooping_route(ip_type)
    if route_list is None:
        log_err('Failed to read IGMP route info')
        return False

    for vid, if_name in vlan_map.items():
        elem = cps_object.CPSObject(module=module_name, data={'vlan-id': vid})

        snoop_state = get_igmp_snooping_state(ip_type, vlan_map[vid],
                                              iplink_get_state)
        if snoop_state is None:
            log_err('Failed to get IGMP snooping state of VLAN %d' % vid)
            return False
        for key, val in snoop_state.items():
            if '/' in key:
                key = elem.root_path + key
            log_info('Add attribute: NAME %s VALUE %s' % (key, val))
            elem.add_attr(key, val)

        if if_name in route_list:
            attr_list = route_list[if_name]
            for key, val in attr_list.items():
                if isinstance(val, types.DictType):
                    embed_attrs = [key, '', '']
                    for idx, dict_val in val.items():
                        embed_attrs[1] = str(idx)
                        for sub_key, sub_val in dict_val.items():
                            embed_attrs[2] = sub_key
                            elem.add_embed_attr(embed_attrs, sub_val, 3)
                else:
                    elem.add_attr(key, val)

        resp.append(elem.get())

    return True
Exemple #19
0
def set_vrf_intf_ip_cb_int(methods, params):
    obj = cps_object.CPSObject(obj=params['change'])

    if params['operation'] != 'rpc':
        log_err('oper is not RPC')
        return False

    operation = 1
    vrf_name = None
    af = None
    ip = None

    try:
        operation = obj.get_attr_data('vrf-mgmt/src-ip-config/input/operation')
        vrf_name = obj.get_attr_data('vrf-mgmt/src-ip-config/input/ni-name')
        af = obj.get_attr_data('vrf-mgmt/src-ip-config/input/af')
        ip = obj.get_attr_data('vrf-mgmt/src-ip-config/input/src-ip')
    except ValueError as e:
        log_msg = 'Missing mandatory attribute ' + e.args[0]
        log_err(log_msg)
        return False

    # Operation types
    #BASE_CMN_OPERATION_TYPE_CREATE=1
    #BASE_CMN_OPERATION_TYPE_DELETE=2
    #BASE_CMN_OPERATION_TYPE_UPDATE=3
    is_add = True
    if operation == 3:
        log_msg = 'Update operation is not supported!'
        log_err(log_msg)
        return False
    elif operation == 2:
        is_add = False

    if af != socket.AF_INET and af != socket.AF_INET6:
        log_msg = 'Invalid address family' + str(af)
        log_err(log_msg)
        return False

    ip = binascii.unhexlify(ip)
    ip = socket.inet_ntop(af, ip)
    family = 'ipv4'
    if af == socket.AF_INET6:
        family = 'ipv6'

    if dn_base_vrf_tool.process_src_ip_config(vrf_name, is_add, family, ip):
        return True

    return False
Exemple #20
0
def remove_remote_endpoint(name, remote_endpoints):
    cps_obj = cps_object.CPSObject(module='dell-base-if-cmn/set-interface', data={})
    cps_obj.add_attr('dell-base-if-cmn/set-interface/input/operation', _update)
    cps_obj.add_attr("if/interfaces/interface/name", name)
    cps_obj.add_attr('if/interfaces/interface/type', "base-if:vxlan")

    cps_obj.add_attr('dell-base-if-cmn/set-interface/input/member-op', _remove)
    idx = 0
    for re in remote_endpoints:
        cps_utils.cps_attr_types_map.add_type(cps_obj.generate_path(['dell-if/if/interfaces/interface/remote-endpoint', str(idx), 'addr']), re.addr_family)
        cps_obj.add_embed_attr(['dell-if/if/interfaces/interface/remote-endpoint', str(idx), 'addr'], re.ip, 4)
        cps_obj.add_embed_attr(['dell-if/if/interfaces/interface/remote-endpoint', str(idx), 'addr-family'], INET_TO_STR_MAP[re.addr_family], 4)
        cps_obj.add_embed_attr(['dell-if/if/interfaces/interface/remote-endpoint', str(idx), 'flooding-enabled'], re.flooding_enabled, 4)
        idx += 1
    return cps.transaction([{'operation': 'rpc', 'change': cps_obj.get()}])
Exemple #21
0
def nas_set_interface_attribute(if_index, speed, duplex, autoneg):
    if if_index == None:
        print 'not a valid interface index'
        return
    _data = {'if-index': if_index}
    if speed != None:
        _data['dell-if/if/interfaces/interface/speed'] = speed
    if duplex != None:
        _data['dell-if/if/interfaces/interface/duplex'] = duplex
    if autoneg != None:
        _data['dell-if/if/interfaces/interface/auto-negotiation'] = autoneg
    # TODO try this make_if_obj(d={}):
    intf = cps_object.CPSObject(module=get_if_key(), data=_data)
    ch = {'operation': 'set', 'change': intf.get()}
    cps.transaction([ch])
def get_port_breakoutCap_currentMode_mode(fp_port):
    fp_list = nas_os_fp_list(d={'front-panel-port':fp_port})
    if fp_list == None or len(fp_list) == 0:
        log_err('failed to get object of front panel port %d' % fp_port)
        return None
    fp_port_obj = cps_object.CPSObject(obj=fp_list[0])

    br_cap_list = fp_port_obj.get_attr_data('br-cap')
    breakout_cap = []
    for cap_key,cap_item in br_cap_list.items():
        br_mode = cap_item['breakout-mode']
        if br_mode not in breakout_cap:
            breakout_cap.append(br_mode)
    current_mode = fp_port_obj.get_attr_data('breakout-mode')
    return (breakout_cap,current_mode)
def get_cb(methods, params):
    obj = cps_object.CPSObject(obj=params['filter'])
    resp = params['list']

    try:
        if obj.get_key() == nas_comm.yang.get_tbl('keys_id')['fp_key']:
            gen_fp_port_list(obj, resp)
        elif obj.get_key() == nas_comm.yang.get_tbl('keys_id')['npu_lane_key']:
            _gen_npu_lanes(obj, resp)
        else:
            return False
    except:
        logging.exception('Front Panel Port Get Error: ')

    return True
def _check_hg_profile(hybrid_group_name, profile_name):
    #Get Hybrid Group Object
    resp = hg_utils.get_hg(str(hybrid_group_name))
    assert len(resp) == 1
    for o in resp:
        assert o is not None
    obj = cps_object.CPSObject(obj=o)

    #Check if name is correct
    hg_name = nas_if.get_cps_attr(obj, hg_utils.hg_attr('id'))
    assert hg_name == str(hybrid_group_name)

    #Check profile Type
    hg_profile = nas_if.get_cps_attr(obj, hg_utils.hg_attr('profile'))
    assert hg_profile == str(profile_name)
def gen_fp_port_list(obj, resp):

    for npu in fp.get_npu_list():

        for p in npu.ports:

            port = npu.ports[p]

            if not obj.key_compare({_fp_attr('front-panel-port'): port.id}):
                continue

            media_id = port.media_id

            if not obj.key_compare({_fp_attr('media-id'): media_id}):
                continue

            elem = cps_object.CPSObject(module='base-if-phy/front-panel-port',
                                        data={
                                            'npu-id':
                                            npu.id,
                                            'front-panel-port':
                                            port.id,
                                            'control-port':
                                            port.control_port(),
                                            'port':
                                            port.hwports,
                                            'default-name':
                                            port.name,
                                            'media-id':
                                            media_id,
                                            'mac-offset':
                                            port.mac_offset,
                                            'port-speed':
                                            port.get_port_speed(),
                                            'default-phy-mode':
                                            port.get_def_phy_mode(),
                                            'default-breakout-mode':
                                            port.get_def_breakout(),
                                            'default-port-speed':
                                            port.get_default_phy_port_speed()
                                        })
            if port.is_pg_member() == False:
                breakout_mode = port.get_breakout_mode()
                elem.add_attr('breakout-mode', breakout_mode)
                add_fp_caps_to_fp_obj(port, elem)
            resp.append(elem.get())
            if port.is_pg_member() == False:
                create_and_add_fp_caps(port, resp)
Exemple #26
0
def _get_vlan_info(vlan_id = None, br_name = None):
    result = []

    obj = cps_object.CPSObject(qual="target", module="dell-base-if-cmn/if/interfaces/interface")
    obj.add_attr("if/interfaces/interface/type", "ianaift:l2vlan")
    if vlan_id is not None:
        obj.add_attr("base-if-vlan/if/interfaces/interface/id", vlan_id)
    elif br_name is not None:
        obj.add_attr("if/interfaces/interface/name", br_name)
    cps.get([obj.get()], result)
    vlan_info = []
    for d in result:
        vlan_info.append( cps_convert_attr_data(d))

    log_debug("Vlan Info received: %s" %(str(vlan_info)))
    return vlan_info
def set_fp_rpc_cb_int(params):
    nas_if.log_info('received set breakout config command')

    obj = cps_object.CPSObject(obj=params['change'])

    fr_port = obj.get_attr_data(_breakout_i_attr('front-panel-port'))
    br_mode = nas_if.get_cps_attr(obj, _breakout_i_attr('breakout-mode'))
    phy_port_speed = nas_if.get_cps_attr(obj, _breakout_i_attr('port-speed'))
    if br_mode == None:
        nas_if.log_err('No breakout mode given in input')
        return False
    if phy_port_speed == None:
        nas_if.log_err('phy port speed not received in cps')
        return False
    # set the breakout mode
    return set_fp_port_config(fr_port, br_mode, phy_port_speed, None)
Exemple #28
0
    def getIfIndexFromName(name):

        list = []
        # Obtain a list with objects from dell-base-if-cmn/if/interfaces/interface
        cps.get([
            cps.key_from_name('target',
                              'dell-base-if-cmn/if/interfaces/interface')
        ], list)

        # Ignore the first entry
        for entry in list[1:]:
            # Construct a new object for each entry
            get_obj = cps_object.CPSObject(obj=entry)
            if (get_obj.get_attr_data("if/interfaces/interface/name") == name):
                return get_obj.get_attr_data(
                    "dell-base-if-cmn/if/interfaces/interface/if-index")
def handle_interface_event_for_lla_cfg():
    _intf_evt_handle = cps.event_connect()
    cps.event_register(_intf_evt_handle, _linux_intf_key)

    while True:
        intf_evt = cps.event_wait(_intf_evt_handle)
        obj = cps_object.CPSObject(obj=intf_evt)
        if obj is None:
            continue

        if not 'operation' in intf_evt.keys():
            continue
        if ((intf_evt['operation'] != 'create')
                and (intf_evt['operation'] != 'set')):
            continue

        vrf_name = None
        intf_name = None
        intf_mac = None
        intf_admin_status = 0

        try:
            vrf_name = obj.get_attr_data(
                'ni/if/interfaces/interface/bind-ni-name')
            intf_name = obj.get_attr_data('if/interfaces/interface/name')
            intf_mac = obj.get_attr_data(
                'dell-if/if/interfaces/interface/phys-address')
            intf_admin_status = obj.get_attr_data(
                'if/interfaces/interface/enabled')
            # if admin status is not enabled, ignore the interface event
            if intf_admin_status != 1:
                continue
        except ValueError as e:
            continue

        mac_list = intf_mac.split(':')
        # Create the LLA
        lla_addr = 'fe80::'+hex(int(mac_list[0],16)^2)[2:]+mac_list[1]+':'+mac_list[2]+\
                   'ff:fe'+mac_list[3]+':'+mac_list[4]+mac_list[5]
        lla_addr_with_prefix_len = lla_addr + '/64'
        # Configuring the LLA on the L2 intf will lead to error, pass the exception
        try:
            add_ip_addr(lla_addr_with_prefix_len, intf_name, "ipv6", vrf_name,
                        False)
        except:
            pass
Exemple #30
0
def get_default_media_setting(_media_type, def_param):
    base_media_info_list = get_base_media_info(_media_type)
    if len(base_media_info_list) == 0:
        return None
    for j in base_media_info_list:
        obj = cps_object.CPSObject(obj=j)
        if def_param == 'speed':
            _def_attr = nas_if.get_cps_attr(obj, 'speed')
        elif def_param == 'duplex':
            _def_attr = nas_if.get_cps_attr(obj, 'duplex')
        elif def_param == 'autoneg':
            _def_attr = nas_if.get_cps_attr(obj, 'autoneg')
        elif def_param == 'supported-phy-mode':
            _def_attr = nas_if.get_cps_attr(obj, 'supported-phy-mode')
        elif def_param == 'hw-profile':
            _def_attr = nas_if.get_cps_attr(obj, 'hw-profile')
    return _def_attr