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 "-----------------------------------------------------"
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
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
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()
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
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
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
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()}])
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)
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)
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
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