TEST(cps_api_db,db_node_list) { cps_api_object_t obj = cps_api_object_create(); cps_api_object_guard og(obj); ASSERT_TRUE(og.get()!=nullptr); cps_api_node_ident ids[2] = { {"NODE1", "10.11.56.37:6379"}, {"NODE2","127.0.0.1:6379"} }; cps_api_node_group_t _g; _g.id = "A"; _g.addrs = ids; _g.addr_len = 2; _g.data_type = cps_api_node_data_1_PLUS_1_REDUNDENCY; ASSERT_EQ(cps_api_set_node_group(&_g),cps_api_ret_code_OK); ASSERT_EQ(cps_api_set_master_node("A","NODE1"),cps_api_ret_code_OK); cps_api_key_from_attr_with_qual(cps_api_object_key(obj),BASE_IP_IPV6,cps_api_qualifier_TARGET); cps_api_object_attr_add_u32(obj,BASE_IP_IPV6_VRF_ID,0); cps_api_object_attr_add_u32(obj,BASE_IP_IPV6_IFINDEX,1); cps_api_object_attr_add(obj,BASE_IP_IPV6_NAME,"Clifford",9); cps_api_key_set_group(obj,"A"); ASSERT_TRUE(cps_api_commit_one(cps_api_oper_CREATE, obj, 0, 200)==cps_api_ret_code_OK); ASSERT_EQ(cps_api_delete_node_group("A"),cps_api_ret_code_OK); }
TEST(std_nas_route_test, nas_neighbor_set) { cps_api_object_t obj = cps_api_object_create(); //cps_api_key_init(cps_api_object_key(obj),cps_api_qualifier_TARGET, // cps_api_obj_CAT_BASE_ROUTE, BASE_ROUTE_OBJ_OBJ,0 ); cps_api_key_from_attr_with_qual(cps_api_object_key(obj), BASE_ROUTE_OBJ_OBJ,cps_api_qualifier_TARGET); cps_api_object_attr_add_u32(obj,BASE_ROUTE_OBJ_NBR_AF,AF_INET); uint32_t ip; struct in_addr a; inet_aton("6.6.6.6",&a); ip=a.s_addr; cps_api_object_attr_add(obj,BASE_ROUTE_OBJ_NBR_ADDRESS,&ip,sizeof(ip)); int port_index = if_nametoindex("e101-001-0"); cps_api_object_attr_add_u32(obj,BASE_ROUTE_OBJ_NBR_IFINDEX, port_index); hal_mac_addr_t mac_addr = {0x00, 0x00, 0x00, 0xaa, 0xbb, 0xcc}; cps_api_object_attr_add(obj, BASE_ROUTE_OBJ_NBR_MAC_ADDR, &mac_addr, HAL_MAC_ADDR_LEN); /* * CPS transaction */ cps_api_transaction_params_t tr; ASSERT_TRUE(cps_api_transaction_init(&tr)==cps_api_ret_code_OK); cps_api_set(&tr,obj); ASSERT_TRUE(cps_api_commit(&tr)==cps_api_ret_code_OK); cps_api_transaction_close(&tr); }
TEST(std_nas_route_test, nas_route_mp_delete) { cps_api_object_t obj = cps_api_object_create(); //cps_api_key_init(cps_api_object_key(obj),cps_api_qualifier_TARGET, // cps_api_obj_CAT_BASE_ROUTE, BASE_ROUTE_OBJ_OBJ,0 ); cps_api_key_from_attr_with_qual(cps_api_object_key(obj), BASE_ROUTE_OBJ_OBJ,cps_api_qualifier_TARGET); cps_api_object_attr_add_u32(obj,BASE_ROUTE_OBJ_ENTRY_AF,AF_INET); cps_api_object_attr_add_u32(obj,BASE_ROUTE_OBJ_ENTRY_PREFIX_LEN,32); cps_api_object_attr_add_u32(obj,BASE_ROUTE_OBJ_ENTRY_VRF_ID,0); uint32_t ip; struct in_addr a; inet_aton("6.6.6.6",&a); ip=a.s_addr; cps_api_object_attr_add(obj,BASE_ROUTE_OBJ_ENTRY_ROUTE_PREFIX,&ip,sizeof(ip)); /* * CPS transaction */ cps_api_transaction_params_t tr; ASSERT_TRUE(cps_api_transaction_init(&tr)==cps_api_ret_code_OK); cps_api_delete(&tr,obj); ASSERT_TRUE(cps_api_commit(&tr)==cps_api_ret_code_OK); cps_api_transaction_close(&tr); printf("___________________________________________\n"); system("ip route show 6.6.6.6"); printf("___________________________________________\n"); }
static void init_phy_port_obj(npu_id_t npu, port_t port, cps_api_object_t obj) { cps_api_key_from_attr_with_qual(cps_api_object_key(obj), BASE_IF_PHY_PHYSICAL_OBJ,cps_api_qualifier_TARGET); cps_api_object_attr_add_u32(obj,BASE_IF_PHY_PHYSICAL_NPU_ID,npu); cps_api_object_attr_add_u32(obj,BASE_IF_PHY_PHYSICAL_PORT_ID,port); }
t_std_error nas_mac_publish_entry(nas_mac_entry_t *entry,bool is_static,bool flush_all, cps_api_operation_types_t op){ if(entry == nullptr){ NAS_MAC_LOG(ERR,0,"Null MAC entry pointer passed to convert it to cps object"); return STD_ERR(MAC,PARAM,0); } cps_api_object_t obj = cps_api_object_create(); if(obj == nullptr){ NAS_MAC_LOG(ERR,0,"Failed to allocate memory to cps object"); return STD_ERR(MAC,NOMEM,0); } cps_api_key_t key; cps_api_key_from_attr_with_qual(&key, BASE_MAC_TABLE_OBJ, cps_api_qualifier_OBSERVED); cps_api_object_set_type_operation(&key,op); cps_api_object_set_key(obj,&key); if(!flush_all){ cps_api_object_attr_add_u32(obj,BASE_MAC_TABLE_IFINDEX,entry->ifindex); cps_api_object_attr_add_u32(obj,BASE_MAC_TABLE_ACTIONS,entry->pkt_action); cps_api_object_attr_add_u16(obj,BASE_MAC_TABLE_VLAN,entry->entry_key.vlan_id); cps_api_object_attr_add(obj,BASE_MAC_TABLE_MAC_ADDRESS,(void*)entry->entry_key.mac_addr, sizeof(entry->entry_key.mac_addr)); cps_api_object_attr_add_u32(obj,BASE_MAC_TABLE_STATIC,is_static); } NAS_MAC_LOG(INFO,3,"Publishing an event with operation %d",op); return nas_mac_event_publish(obj); }
static t_std_error dn_nas_get_phy_media_default_setting(PLATFORM_MEDIA_TYPE_t media_type, cps_api_object_t obj) { cps_api_get_params_t gp; cps_api_get_request_init(&gp); cps_api_get_request_guard rg(&gp); cps_api_object_t media_obj = cps_api_object_list_create_obj_and_append(gp.filters); t_std_error rc = STD_ERR_MK(e_std_err_INTERFACE, e_std_err_code_FAIL, 0); do { if (!cps_api_key_from_attr_with_qual(cps_api_object_key(media_obj), BASE_MEDIA_MEDIA_INFO_OBJ, cps_api_qualifier_OBSERVED)) { break; } cps_api_set_key_data_uint(media_obj, BASE_MEDIA_MEDIA_INFO_MEDIA_TYPE, &media_type, sizeof(media_type)); cps_api_object_attr_add_u32(media_obj, BASE_MEDIA_MEDIA_INFO_MEDIA_TYPE, media_type); if (cps_api_get(&gp) != cps_api_ret_code_OK) break; if (0 == cps_api_object_list_size(gp.list)) break; media_obj = cps_api_object_list_get(gp.list,0); if (!cps_api_object_clone(obj, media_obj)) { break; } rc = STD_ERR_OK; } while(0); return rc; }
bool cps_api_nodes::load_aliases() { cps_db::connection_request b(cps_db::ProcessDBCache(),DEFAULT_REDIS_ADDR); if (!b.valid()) { return false; } alias_map_t _cpy; cps_api_object_guard og(cps_api_object_create()); if (!cps_api_key_from_attr_with_qual(cps_api_object_key(og.get()),CPS_NODE_DETAILS, cps_api_qualifier_TARGET)) { return false; } cps_api_object_list_guard lg(cps_api_object_list_create()); if (!cps_db::get_objects(b.get(),og.get(),lg.get())) return false; for ( size_t ix = 0, mx = cps_api_object_list_size(lg.get()); ix < mx ; ++ix ) { cps_api_object_t o = cps_api_object_list_get(lg.get(),ix); const char *name = (const char*) cps_api_object_get_data(o,CPS_NODE_DETAILS_NAME); const char *alias = (const char*) cps_api_object_get_data(o,CPS_NODE_DETAILS_ALIAS); _cpy[name] = alias; } std::swap(_cpy,_alias_map); return true; }
static bool cps_api_clean_db_instance(const char *group) { cps_api_transaction_params_t tr; if (cps_api_transaction_init(&tr)!=cps_api_ret_code_OK) { return false; } cps_api_transaction_guard tg(&tr); cps_api_object_t db_obj = cps_api_object_create(); if(db_obj == nullptr ) return false; cps_api_key_from_attr_with_qual(cps_api_object_key(db_obj),CPS_DB_INSTANCE_OBJ, cps_api_qualifier_TARGET); cps_api_object_attr_add(db_obj,CPS_DB_INSTANCE_GROUP,group,strlen(group)+1); if(cps_api_delete(&tr,db_obj) != cps_api_ret_code_OK ) { return false; } if(cps_api_commit(&tr) != cps_api_ret_code_OK ) { EV_LOGGING(DSAPI,ERR,"CPS-DB","Failed to delete db instance for group %s",group); return false; } return true; }
bool cps_api_nodes::get_port_info(const char *group, _db_node_data *nd) { cps_api_object_guard og(cps_api_object_create()); if (!cps_api_key_from_attr_with_qual(cps_api_object_key(og.get()),CPS_DB_INSTANCE_OBJ, cps_api_qualifier_TARGET)) { EV_LOGGING(DSAPI,ERR,"CPS-CLS-MAP","Meta data for cluster set is not loaded."); return false; } cps_db::connection_request b(cps_db::ProcessDBCache(),DEFAULT_REDIS_ADDR); if (!b.valid()) { return false; } cps_api_set_key_data(og.get(),CPS_DB_INSTANCE_GROUP,cps_api_object_ATTR_T_BIN,group,strlen(group)+1); cps_api_set_key_data(og.get(),CPS_DB_INSTANCE_NODE_ID,cps_api_object_ATTR_T_BIN,nd->_name.c_str(),strlen(nd->_name.c_str())+1); if (cps_db::get_object(b.get(),og.get())) { const char *port = (const char*) cps_api_object_get_data(og.get(),CPS_DB_INSTANCE_PORT); if(port == nullptr) { return false; } nd->_addr = port; return true; } return false; }
t_std_error nas_get_lag_if_index (uint64_t ndi_port, hal_ifindex_t *lag_if_index) { cps_api_get_params_t gp; cps_api_get_request_init(&gp); cps_api_get_request_guard rg(&gp); EV_LOG_TRACE(ev_log_t_INTERFACE, 2, "INTF-C", "querying for ifindex of ndi lag id 0x%x ", ndi_port); cps_api_object_t obj = cps_api_object_list_create_obj_and_append(gp.filters); cps_api_key_from_attr_with_qual(cps_api_object_key(obj), DELL_BASE_IF_CMN_IF_INTERFACES_INTERFACE_OBJ, cps_api_qualifier_TARGET); cps_api_object_attr_add_u64(obj,BASE_IF_LAG_IF_INTERFACES_INTERFACE_LAG_OPAQUE_DATA, ndi_port); cps_api_object_attr_add(obj,IF_INTERFACES_INTERFACE_TYPE, (const char *)IF_INTERFACE_TYPE_IANAIFT_IANA_INTERFACE_TYPE_IANAIFT_IEEE8023ADLAG, sizeof(IF_INTERFACE_TYPE_IANAIFT_IANA_INTERFACE_TYPE_IANAIFT_IEEE8023ADLAG)); if (cps_api_get(&gp)==cps_api_ret_code_OK) { size_t mx = cps_api_object_list_size(gp.list); for (size_t ix = 0 ; ix < mx ; ++ix ) { cps_api_object_t obj = cps_api_object_list_get(gp.list,ix); cps_api_object_it_t it; cps_api_object_it_begin(obj,&it); cps_api_object_attr_t attr = cps_api_object_it_find(&it, DELL_BASE_IF_CMN_IF_INTERFACES_INTERFACE_IF_INDEX); if (!attr) { return STD_ERR(INTERFACE, FAIL, 0); } *lag_if_index = cps_api_object_attr_data_u32(attr); } } return(STD_ERR_OK); }
TEST(std_nas_route_test, nas_route_arp_get) { cps_api_get_params_t gp; cps_api_get_request_init(&gp); cps_api_object_t obj = cps_api_object_list_create_obj_and_append(gp.filters); cps_api_key_from_attr_with_qual(cps_api_object_key(obj),BASE_ROUTE_OBJ_NBR, cps_api_qualifier_TARGET); unsigned short af = 2; cps_api_set_key_data(obj,BASE_ROUTE_OBJ_NBR_AF,cps_api_object_ATTR_T_U16, &af,sizeof(af)); if (cps_api_get(&gp)==cps_api_ret_code_OK) { size_t mx = cps_api_object_list_size(gp.list); for ( size_t ix = 0 ; ix < mx ; ++ix ) { obj = cps_api_object_list_get(gp.list,ix); std::cout<<"ARP ENTRY "<<std::endl; std::cout<<"================================="<<std::endl; nas_route_dump_arp_object_content(obj); std::cout<<std::endl; } } cps_api_get_request_close(&gp); }
bool cps_delete_mac(){ // Create and initialize the transaction object cps_api_transaction_params_t tran; if (cps_api_transaction_init(&tran) != cps_api_ret_code_OK ){ return false; } // Create and initialize the key cps_api_key_t key; cps_api_key_from_attr_with_qual(&key, BASE_MAC_TABLE_OBJ, cps_api_qualifier_TARGET); // Create the object cps_api_object_t obj = cps_api_object_create(); if(obj == NULL ){ cps_api_transaction_close(&tran); return false; } // Set the key for the object cps_api_object_set_key(obj,&key); // Add attributes mandatory to create MAC address entry uint8_t mac_addr[6] = {0x0,0xa,0xb,0xc,0xd,0xe}; uint16_t vlan_id = 131; cps_api_object_attr_add(obj,BASE_MAC_TABLE_MAC_ADDRESS, mac_addr, sizeof(hal_mac_addr_t)); cps_api_object_attr_add_u32(obj,BASE_MAC_TABLE_IFINDEX,if_nametoindex("e101-001-0") ); cps_api_object_attr_add_u16(obj,BASE_MAC_TABLE_VLAN,vlan_id); // Add the object along with the operation to transaction if(cps_api_delete(&tran,obj) != cps_api_ret_code_OK ){ cps_api_delete_object(obj); return false; }
TEST(std_nas_route_test, nas_neighbor_delete_static) { cps_api_object_t obj = cps_api_object_create(); //cps_api_key_init(cps_api_object_key(obj),cps_api_qualifier_TARGET, // cps_api_obj_CAT_BASE_ROUTE, BASE_ROUTE_OBJ_OBJ,0 ); cps_api_key_from_attr_with_qual(cps_api_object_key(obj), BASE_ROUTE_OBJ_OBJ,cps_api_qualifier_TARGET); cps_api_object_attr_add_u32(obj,BASE_ROUTE_OBJ_NBR_AF,AF_INET); cps_api_object_attr_add_u32(obj,BASE_ROUTE_OBJ_NBR_TYPE,BASE_ROUTE_RT_TYPE_STATIC); uint32_t ip; struct in_addr a; inet_aton("6.6.6.7",&a); ip=a.s_addr; cps_api_object_attr_add(obj,BASE_ROUTE_OBJ_NBR_ADDRESS,&ip,sizeof(ip)); int port_index = if_nametoindex("e101-001-0"); cps_api_object_attr_add_u32(obj,BASE_ROUTE_OBJ_NBR_IFINDEX, port_index); /* * CPS transaction */ cps_api_transaction_params_t tr; ASSERT_TRUE(cps_api_transaction_init(&tr)==cps_api_ret_code_OK); cps_api_delete(&tr,obj); ASSERT_TRUE(cps_api_commit(&tr)==cps_api_ret_code_OK); cps_api_transaction_close(&tr); }
t_std_error nas_int_cps_init(cps_api_operation_handle_t handle) { cps_api_registration_functions_t f; char buff[CPS_API_KEY_STR_MAX]; memset(&f,0,sizeof(f)); if (!cps_api_key_from_attr_with_qual(&f.key,BASE_IF_PHY_PHYSICAL_OBJ,cps_api_qualifier_TARGET)) { EV_LOG(ERR,INTERFACE,0,"NAS-IF-REG","Could not translate %d to key %s", (int)(DELL_BASE_IF_CMN_IF_INTERFACES_INTERFACE_OBJ), cps_api_key_print(&f.key,buff,sizeof(buff)-1)); return STD_ERR(INTERFACE,FAIL,0); } EV_LOG(INFO,INTERFACE,0,"NAS-IF-REG","Registering for %s", cps_api_key_print(&f.key,buff,sizeof(buff)-1)); f.handle = handle; f._read_function = _phy_int_get; f._write_function = _phy_int_set; if (cps_api_register(&f)!=cps_api_ret_code_OK) { return STD_ERR(INTERFACE,FAIL,0); } t_std_error rc = STD_ERR_OK; npu_id_t npu = 0; npu_id_t npu_max = (npu_id_t)nas_switch_get_max_npus(); for ( ; npu < npu_max ; ++npu ) { rc = ndi_port_event_cb_register(npu,_ndi_port_event_update_); if (rc!=STD_ERR_OK) return rc; } if ((rc=nas_int_breakout_init(handle))!=STD_ERR_OK) return rc; return nas_int_logical_init(handle); }
extern "C" cps_api_object_t cps_api_obj_tool_create(cps_api_qualifier_t qual,cps_api_attr_id_t id, bool add_defaults) { cps_api_object_guard og(cps_api_object_create()); if (!og.valid()) return nullptr; if (!cps_api_key_from_attr_with_qual(cps_api_object_key(og.get()),id,qual)) { return nullptr; } return og.release(); }
cps_api_return_code_t cps_api_delete_node_group(const char *grp) { cps_api_db_del_node_group(grp); cps_api_object_guard og(cps_api_object_create()); cps_api_key_from_attr_with_qual(cps_api_object_key(og.get()),CPS_NODE_GROUP, cps_api_qualifier_TARGET); cps_api_object_attr_add(og.get(),CPS_NODE_GROUP_NAME,grp,strlen(grp)+1); cps_db::connection_request b(cps_db::ProcessDBCache(),DEFAULT_REDIS_ADDR); cps_db::delete_object(b.get(),og.get()); return cps_api_ret_code_OK; }
TEST(std_nas_route_test, nas_route_add) { cps_api_object_t obj = cps_api_object_create(); cps_api_key_from_attr_with_qual(cps_api_object_key(obj), BASE_ROUTE_OBJ_OBJ,cps_api_qualifier_TARGET); //cps_api_key_init(cps_api_object_key(obj),cps_api_qualifier_TARGET, // cps_api_obj_CAT_BASE_ROUTE, BASE_ROUTE_OBJ_OBJ,0 ); /* * Check mandatory route attributes * BASE_ROUTE_OBJ_ENTRY_AF, BASE_ROUTE_OBJ_ENTRY_VRF_ID); * BASE_ROUTE_OBJ_ENTRY_ROUTE_PREFIX, BASE_ROUTE_OBJ_ENTRY_PREFIX_LEN; */ cps_api_object_attr_add_u32(obj,BASE_ROUTE_OBJ_ENTRY_AF,AF_INET); cps_api_object_attr_add_u32(obj,BASE_ROUTE_OBJ_ENTRY_VRF_ID,0); cps_api_object_attr_add_u32(obj,BASE_ROUTE_OBJ_ENTRY_PREFIX_LEN,32); uint32_t ip; struct in_addr a; inet_aton("6.6.6.6",&a); ip=a.s_addr; cps_api_object_attr_add(obj,BASE_ROUTE_OBJ_ENTRY_ROUTE_PREFIX,&ip,sizeof(ip)); cps_api_object_attr_add_u32(obj,BASE_ROUTE_OBJ_ENTRY_PREFIX_LEN,32); cps_api_attr_id_t ids[3]; const int ids_len = sizeof(ids)/sizeof(*ids); ids[0] = BASE_ROUTE_OBJ_ENTRY_NH_LIST; ids[1] = 0; ids[2] = BASE_ROUTE_OBJ_ENTRY_NH_LIST_NH_ADDR; /* * Set Loopback0 NH */ inet_aton("127.0.0.1",&a); ip=a.s_addr; cps_api_object_e_add(obj,ids,ids_len,cps_api_object_ATTR_T_BIN, &ip,sizeof(ip)); cps_api_object_attr_add_u32(obj,BASE_ROUTE_OBJ_ENTRY_NH_COUNT,1); /* * CPS transaction */ cps_api_transaction_params_t tr; ASSERT_TRUE(cps_api_transaction_init(&tr)==cps_api_ret_code_OK); cps_api_create(&tr,obj); ASSERT_TRUE(cps_api_commit(&tr)==cps_api_ret_code_OK); cps_api_transaction_close(&tr); }
static void nas_sflow_fill_object(cps_api_object_t obj,nas_sflow_map_it it){ cps_api_key_from_attr_with_qual(cps_api_object_key(obj),BASE_SFLOW_ENTRY_OBJ, cps_api_qualifier_TARGET); cps_api_set_key_data(obj,BASE_SFLOW_ENTRY_ID,cps_api_object_ATTR_T_U32, &it->second.nas_sflow_id,sizeof(it->second.nas_sflow_id)); cps_api_object_attr_add_u32(obj,BASE_SFLOW_ENTRY_ID,it->second.nas_sflow_id); cps_api_object_attr_add_u32(obj,BASE_SFLOW_ENTRY_IFINDEX,it->second.ifindex); cps_api_object_attr_add_u32(obj,BASE_SFLOW_ENTRY_DIRECTION, it->second.ndi_sflow_entry.sflow_direction); cps_api_object_attr_add_u32(obj,BASE_SFLOW_ENTRY_SAMPLING_RATE, it->second.ndi_sflow_entry.sampling_rate); }
bool cps_api_db_del_node_group(const char *group) { std::lock_guard<std::recursive_mutex> lg(_mutex); cps_api_node_data_type_t type; if(!_nodes->get_group_type(std::string(group),type)) { EV_LOGGING(DSAPI,ERR,"DEL-MASTER","Failed to get group type for %s",group); return false; } if(type != cps_api_node_data_1_PLUS_1_REDUNDENCY) { return true; } auto it = _nodes->_db_node_map.find(group); if( it == _nodes->_db_node_map.end()) { EV_LOGGING(DSAPI,ERR,"CPS-DB","No group named %s found",group); return false; } for ( auto node_it : it->second) { cps_db::connection_request b(cps_db::ProcessDBCache(),DEFAULT_REDIS_ADDR); if (!b.valid()) { return false; } cps_api_object_guard og(cps_api_object_create()); if (!cps_api_key_from_attr_with_qual(cps_api_object_key(og.get()),CPS_DB_INSTANCE_OBJ, cps_api_qualifier_TARGET)) { EV_LOGGING(DSAPI,ERR,"CPS-CLS-MAP","Meta data for cluster set is not loaded."); return false; } cps_api_set_key_data(og.get(),CPS_DB_INSTANCE_GROUP,cps_api_object_ATTR_T_BIN,group,strlen(group)+1); cps_api_set_key_data(og.get(),CPS_DB_INSTANCE_NODE_ID,cps_api_object_ATTR_T_BIN,node_it._name.c_str(), strlen(node_it._name.c_str())+1); cps_db::delete_object(b.get(),og.get()); } _nodes->_master.erase(std::string(group)); _nodes->_db_node_map.erase(std::string(group)); _nodes->remove_master_set(std::string(group)); return cps_api_clean_db_instance(group); }
cps_api_return_code_t cps_api_set_node_group(cps_api_node_group_t *group) { cps_api_object_guard og(cps_api_object_create()); cps_api_key_from_attr_with_qual(cps_api_object_key(og.get()),CPS_NODE_GROUP, cps_api_qualifier_TARGET); cps_api_object_attr_add(og.get(),CPS_NODE_GROUP_NAME,group->id,strlen(group->id)+1); for ( size_t ix = 0; ix < group->addr_len; ++ix ) { cps_api_attr_id_t _ip[]= {CPS_NODE_GROUP_NODE,ix,CPS_NODE_GROUP_NODE_IP}; cps_api_object_e_add(og.get(),_ip,sizeof(_ip)/sizeof(*_ip),cps_api_object_ATTR_T_BIN, group->addrs[ix].addr,strlen(group->addrs[ix].addr)+1); cps_api_attr_id_t _alias[]= {CPS_NODE_GROUP_NODE,ix,CPS_NODE_GROUP_NODE_NAME}; cps_api_object_e_add(og.get(),_alias,sizeof(_alias)/sizeof(*_alias),cps_api_object_ATTR_T_BIN, group->addrs[ix].node_name,strlen(group->addrs[ix].node_name)+1); } cps_api_object_attr_add(og.get(),CPS_NODE_GROUP_TYPE,&group->data_type,sizeof(group->data_type)); cps_db::connection_request b(cps_db::ProcessDBCache(),DEFAULT_REDIS_ADDR); if (!b.valid()) { return cps_api_ret_code_ERR; } cps_api_object_guard tmp(cps_api_object_create()); if (!cps_api_object_clone(tmp.get(),og.get())) { return cps_api_ret_code_ERR; } bool changed = false; if (cps_db::get_object(b.get(),tmp.get())) { changed = true; } (void)changed; if (!cps_db::store_object(b.get(),og.get())) { return cps_api_ret_code_ERR; } if(group->data_type == cps_api_node_data_1_PLUS_1_REDUNDENCY) { return cps_api_create_global_instance(group); } ///TODO send out changed... return cps_api_ret_code_OK; }
t_std_error dn_nas_lag_get_ndi_ids (hal_ifindex_t if_index, nas_ndi_obj_id_table_handle_t ndi_id_data) { if(ndi_id_data == NULL) { EV_LOG_ERR(ev_log_t_INTERFACE, 2, "INTF-C","Input ndi_data is NULL"); return(STD_ERR(INTERFACE, PARAM, 0)); } cps_api_get_params_t gp; cps_api_get_request_init(&gp); cps_api_object_t obj = cps_api_object_list_create_obj_and_append(gp.filters); t_std_error rc = STD_ERR(INTERFACE, FAIL, 0); do { if (!cps_api_key_from_attr_with_qual(cps_api_object_key(obj), DELL_BASE_IF_CMN_IF_INTERFACES_INTERFACE_OBJ, cps_api_qualifier_TARGET)) { break; } cps_api_object_attr_add_u32(obj,DELL_BASE_IF_CMN_IF_INTERFACES_INTERFACE_IF_INDEX, if_index); cps_api_object_attr_add(obj,IF_INTERFACES_INTERFACE_TYPE, (const char *)IF_INTERFACE_TYPE_IANAIFT_IANA_INTERFACE_TYPE_IANAIFT_IEEE8023ADLAG, sizeof(IF_INTERFACE_TYPE_IANAIFT_IANA_INTERFACE_TYPE_IANAIFT_IEEE8023ADLAG)); if (cps_api_get(&gp) != cps_api_ret_code_OK) break; if (0 == cps_api_object_list_size(gp.list)) break; obj = cps_api_object_list_get(gp.list,0); cps_api_attr_id_t attr_list[] = {BASE_IF_LAG_IF_INTERFACES_INTERFACE_LAG_OPAQUE_DATA}; if (!nas_ndi_obj_id_table_cps_unserialize (ndi_id_data, obj, attr_list, sizeof (attr_list)/sizeof (cps_api_attr_id_t))) { EV_LOG_ERR(ev_log_t_INTERFACE, 2, "INTF-C","Failed to get LAG opaque data"); break; } rc = STD_ERR_OK; } while (0); cps_api_get_request_close(&gp); return rc; }
extern "C" t_std_error dn_hal_get_interface_mac(hal_ifindex_t if_index, hal_mac_addr_t mac_addr) { if(mac_addr == NULL) { EV_LOG_TRACE(ev_log_t_INTERFACE, 2, "INTF-C","mac_addr_ptr NULL"); return(STD_ERR_MK(e_std_err_INTERFACE, e_std_err_code_PARAM, 0)); } cps_api_get_params_t gp; cps_api_get_request_init(&gp); cps_api_object_t obj = cps_api_object_list_create_obj_and_append(gp.filters); t_std_error rc = STD_ERR_MK(e_std_err_INTERFACE, e_std_err_code_FAIL, 0); do { if (!cps_api_key_from_attr_with_qual(cps_api_object_key(obj), DELL_BASE_IF_CMN_IF_INTERFACES_INTERFACE_OBJ, cps_api_qualifier_TARGET)) { break; } cps_api_object_attr_add_u32(obj,DELL_BASE_IF_CMN_IF_INTERFACES_INTERFACE_IF_INDEX, if_index); if (cps_api_get(&gp) != cps_api_ret_code_OK) break; if (0 == cps_api_object_list_size(gp.list)) break; obj = cps_api_object_list_get(gp.list,0); cps_api_object_attr_t attr = cps_api_object_attr_get(obj,DELL_IF_IF_INTERFACES_INTERFACE_PHYS_ADDRESS); if (attr != NULL) { void *_mac_str = cps_api_object_attr_data_bin(attr); size_t addr_len = strlen(static_cast<char *>(_mac_str)); EV_LOG_TRACE(ev_log_t_INTERFACE, 2, "INTF-C","mac_addr %s, len %d", _mac_str, addr_len); if (std_string_to_mac((hal_mac_addr_t *)mac_addr, static_cast<const char *>(_mac_str), addr_len)) { rc = STD_ERR_OK; } } } while (0); cps_api_get_request_close(&gp); return rc; }
static cps_api_return_code_t nas_qos_store_prev_attr(cps_api_object_t obj, const nas::attr_set_t attr_set, const nas_qos_scheduler_group &scheduler_group) { // filling in the keys uint32_t switch_id = scheduler_group.switch_id(); nas_obj_id_t sg_id = scheduler_group.get_scheduler_group_id(); cps_api_key_from_attr_with_qual(cps_api_object_key(obj),BASE_QOS_SCHEDULER_GROUP_OBJ, cps_api_qualifier_TARGET); cps_api_set_key_data(obj, BASE_QOS_SCHEDULER_GROUP_SWITCH_ID, cps_api_object_ATTR_T_U32, &switch_id, sizeof(uint32_t)); cps_api_set_key_data(obj, BASE_QOS_SCHEDULER_GROUP_ID, cps_api_object_ATTR_T_U64, &sg_id, sizeof(uint64_t)); for (auto attr_id: attr_set) { switch (attr_id) { case BASE_QOS_SCHEDULER_GROUP_ID: /* key */ break; case BASE_QOS_SCHEDULER_GROUP_CHILD_COUNT: case BASE_QOS_SCHEDULER_GROUP_CHILD_LIST: /* Read only attributes, no need to save */ break; case BASE_QOS_SCHEDULER_GROUP_PORT_ID: cps_api_object_attr_add_u32(obj, attr_id, scheduler_group.get_level()); break; case BASE_QOS_SCHEDULER_GROUP_SCHEDULER_PROFILE_ID: cps_api_object_attr_add_u64(obj, attr_id, scheduler_group.get_scheduler_profile_id()); break; default: break; } } return cps_api_ret_code_OK; }
TEST(std_nas_route_test, nas_route_delete_scale) { char ip_addr[256]; int i=1, j=1; uint32_t ip; struct in_addr a; for(i=1; i<65; i++) { for (j=1; j<251; j++) { cps_api_object_t obj = cps_api_object_create(); //cps_api_key_init(cps_api_object_key(obj),cps_api_qualifier_TARGET, // cps_api_obj_CAT_BASE_ROUTE, BASE_ROUTE_OBJ_OBJ,0 ); cps_api_key_from_attr_with_qual(cps_api_object_key(obj), BASE_ROUTE_OBJ_OBJ,cps_api_qualifier_TARGET); cps_api_object_attr_add_u32(obj,BASE_ROUTE_OBJ_ENTRY_AF,AF_INET); cps_api_object_attr_add_u32(obj,BASE_ROUTE_OBJ_ENTRY_PREFIX_LEN,32); cps_api_object_attr_add_u32(obj,BASE_ROUTE_OBJ_ENTRY_VRF_ID,0); snprintf(ip_addr,256, "11.10.%d.%d",i,j); //printf ("Delete Route:%s \n", ip_addr); inet_aton(ip_addr,&a); //inet_aton("6.6.6.6",&a); ip=a.s_addr; cps_api_object_attr_add(obj,BASE_ROUTE_OBJ_ENTRY_ROUTE_PREFIX,&ip,sizeof(ip)); /* * CPS transaction */ cps_api_transaction_params_t tr; ASSERT_TRUE(cps_api_transaction_init(&tr)==cps_api_ret_code_OK); cps_api_delete(&tr,obj); ASSERT_TRUE(cps_api_commit(&tr)==cps_api_ret_code_OK); cps_api_transaction_close(&tr); } } }
static void nas_mirror_fill_object(cps_api_object_t obj, nas_mirror_table_it it){ nas_mirror_entry & entry = it->second; cps_api_key_from_attr_with_qual(cps_api_object_key(obj),BASE_MIRROR_ENTRY_OBJ, cps_api_qualifier_TARGET); nas_mirror_id_t id = entry.get_id(); cps_api_set_key_data(obj,BASE_MIRROR_ENTRY_ID,cps_api_object_ATTR_T_U32, &id,sizeof(id)); cps_api_object_attr_add_u32(obj,BASE_MIRROR_ENTRY_ID,id); nas::ndi_obj_id_table_t mirror_opaque_data_table; mirror_opaque_data_table[entry.get_npu_id()] = entry.get_ndi_id(); cps_api_attr_id_t attr_id_list[] = {BASE_MIRROR_ENTRY_OPAQUE_DATA}; nas::ndi_obj_id_table_cps_serialize (mirror_opaque_data_table, obj, attr_id_list, sizeof(attr_id_list)/sizeof(attr_id_list[0])); cps_api_object_attr_add_u32(obj,BASE_MIRROR_ENTRY_DST_INTF,entry.get_dst_intf()); cps_api_attr_id_t ids[3] = {BASE_MIRROR_ENTRY_INTF,0,BASE_MIRROR_ENTRY_INTF_SRC }; const int ids_len = sizeof(ids)/sizeof(ids[0]); for(auto src_it = entry.get_src_intf_map()->begin() ; src_it != entry.get_src_intf_map()->end() ; ++src_it){ cps_api_object_e_add(obj,ids,ids_len,cps_api_object_ATTR_T_U32,&(src_it->first),sizeof(src_it->first)); ids[2]=BASE_MIRROR_ENTRY_INTF_DIRECTION; cps_api_object_e_add(obj,ids,ids_len,cps_api_object_ATTR_T_U32,&(src_it->second),sizeof(src_it->second)); ids[2]=BASE_MIRROR_ENTRY_INTF_SRC; ++ids[1]; } cps_api_object_attr_add_u32(obj,BASE_MIRROR_ENTRY_FLOW_ENABLED,entry.get_flow()); cps_api_object_attr_add_u32(obj,BASE_MIRROR_ENTRY_TYPE,entry.get_mode()); if(entry.get_mode() == BASE_MIRROR_MODE_RSPAN){ cps_api_object_attr_add_u32(obj,BASE_MIRROR_ENTRY_VLAN,entry.get_vlan_id()); } if(entry.get_mode() == BASE_MIRROR_MODE_ERSPAN){ cps_api_object_attr_add_u32(obj,BASE_MIRROR_ENTRY_SOURCE_IP,entry.get_dst_ip()->u.v4_addr); cps_api_object_attr_add_u32(obj,BASE_MIRROR_ENTRY_DESTINATION_IP,entry.get_src_ip()->u.v4_addr); cps_api_object_attr_add(obj,BASE_MIRROR_ENTRY_SOURCE_MAC,(void *)entry.get_src_mac(),sizeof(hal_mac_addr_t)); cps_api_object_attr_add(obj,BASE_MIRROR_ENTRY_DEST_MAC,(void *)entry.get_dst_mac(),sizeof(hal_mac_addr_t)); cps_api_object_attr_add_u32(obj,BASE_MIRROR_ENTRY_ERSPAN_VLAN_ID,entry.get_vlan_id()); } }
static cps_api_return_code_t nas_qos_store_prev_attr(cps_api_object_t obj, const nas::attr_set_t attr_set, const nas_qos_map_entry &entry) { // fill in keys nas_qos_map_entry_key_t key = entry.get_key(); nas_obj_id_t map_id = entry.get_map_id(); nas_qos_map_type_t map_type = entry.get_type(); nas_attr_id_t obj_id = qos_map_entry_obj_id(map_type); cps_api_key_from_attr_with_qual(cps_api_object_key(obj), obj_id, cps_api_qualifier_TARGET); obj_id = qos_map_map_id_obj_id(map_type); cps_api_set_key_data(obj, obj_id, cps_api_object_ATTR_T_U64, &map_id, sizeof(uint64_t)); _fill_entry_key_data(obj, key, map_type); nas_qos_map_entry_value_t value = entry.get_value(); for (auto attr_id: attr_set) { uint_t val; cps_api_object_ATTR_TYPE_t attr_type; if (attr_id == qos_map_entry_attr_1_obj_id(map_type)) { val = qos_map_entry_attr_1_get_fn(map_type)(value); attr_type = qos_map_get_attr_1_type(map_type); if (qos_map_add_int_by_type(obj, attr_id, val, attr_type) != true) return cps_api_ret_code_ERR; } if (attr_id == qos_map_entry_attr_2_obj_id(map_type)) { val = qos_map_entry_attr_2_get_fn(map_type)(value); attr_type = qos_map_get_attr_2_type(map_type); if (qos_map_add_int_by_type(obj, attr_id, val, attr_type) != true) return cps_api_ret_code_ERR; } } return cps_api_ret_code_OK; }
t_std_error nas_switch_log_init(cps_api_operation_handle_t handle) { cps_api_return_code_t rc; cps_api_registration_functions_t f; memset(&f,0,sizeof(f)); f.handle = handle; f._write_function = cps_nas_switch_log_set_function; char buff[CPS_API_KEY_STR_MAX]; if (!cps_api_key_from_attr_with_qual(&f.key,BASE_SWITCH_SET_LOG_OBJ,cps_api_qualifier_TARGET)) { EV_LOG(ERR,SYSTEM,0,"NAS-DIAG","Could not translate %d to key %s", (int)(BASE_SWITCH_SET_LOG_OBJ),cps_api_key_print(&f.key,buff,sizeof(buff)-1)); return STD_ERR(DIAG,FAIL,0); } if ((rc = cps_api_register(&f)) != cps_api_ret_code_OK) return STD_ERR(DIAG,FAIL,rc); return STD_ERR_OK; }
t_std_error nas_switch_get_sys_mac_base(hal_mac_addr_t *mac_base) { if(mac_base == NULL) { EV_LOG(ERR,NAS_L2,0,"NAS-L2-SWITCH","invalid parameter"); return(STD_ERR_MK(e_std_err_BOARD, e_std_err_code_PARAM, 0)); } cps_api_get_params_t gp; cps_api_get_request_init(&gp); cps_api_object_t obj = cps_api_object_list_create_obj_and_append(gp.filters); t_std_error rc = STD_ERR_MK(e_std_err_BOARD, e_std_err_code_FAIL, 0); do { if (!cps_api_key_from_attr_with_qual(cps_api_object_key(obj), BASE_SWITCH_SWITCHING_ENTITIES_SWITCHING_ENTITY, cps_api_qualifier_TARGET)) { break; } uint32_t switch_id = 0; /* default switch ID. @TODO add switch id */ cps_api_set_key_data_uint(obj, BASE_SWITCH_SWITCHING_ENTITIES_SWITCHING_ENTITY_SWITCH_ID, &switch_id, sizeof(switch_id)); if (cps_api_get(&gp) != cps_api_ret_code_OK) break; if (0 == cps_api_object_list_size(gp.list)) break; obj = cps_api_object_list_get(gp.list,0); cps_api_object_attr_t attr = cps_api_object_attr_get(obj, BASE_SWITCH_SWITCHING_ENTITIES_SWITCHING_ENTITY_DEFAULT_MAC_ADDRESS); if (attr != NULL) { memcpy(*mac_base,cps_api_object_attr_data_bin(attr),sizeof(*mac_base)); rc = STD_ERR_OK; } } while (0); cps_api_get_request_close(&gp); return rc; }
cps_api_return_code_t cps_api_set_identity(const char *name, const char **alias, size_t len) { cps_db::connection_request b(cps_db::ProcessDBCache(),DEFAULT_REDIS_ADDR); if (!b.valid()) { return cps_api_ret_code_ERR; } cps_api_object_guard og(cps_api_object_create()); cps_api_key_from_attr_with_qual(cps_api_object_key(og.get()),CPS_NODE_DETAILS, cps_api_qualifier_TARGET); cps_api_object_attr_add(og.get(),CPS_NODE_DETAILS_ALIAS,name,strlen(name)+1); size_t ix = 0; for (; ix < len ; ++ix ) { cps_api_object_attr_add(og.get(),CPS_NODE_DETAILS_NAME,alias[ix],strlen(alias[ix])+1); if (!cps_db::store_object(b.get(),og.get())) { EV_LOG(ERR,DSAPI,0,"SET-IDENT","Failed to update identity setting for local node"); } cps_api_object_attr_delete(og.get(),CPS_NODE_DETAILS_NAME); } return cps_api_ret_code_OK; }
TEST(std_nas_route_test, nas_peer_routing_config_set) { cps_api_object_t obj = cps_api_object_create(); cps_api_key_from_attr_with_qual(cps_api_object_key(obj), BASE_ROUTE_PEER_ROUTING_CONFIG_OBJ,cps_api_qualifier_TARGET); cps_api_object_attr_add_u32(obj,BASE_ROUTE_PEER_ROUTING_CONFIG_VRF_ID,0); hal_mac_addr_t mac_addr = {0x01, 0x22, 0x23, 0x24, 0x25, 0x26}; cps_api_object_attr_add(obj, BASE_ROUTE_PEER_ROUTING_CONFIG_PEER_MAC_ADDR, &mac_addr, HAL_MAC_ADDR_LEN); /* * CPS transaction */ cps_api_transaction_params_t tr; ASSERT_TRUE(cps_api_transaction_init(&tr)==cps_api_ret_code_OK); cps_api_set(&tr,obj); ASSERT_TRUE(cps_api_commit(&tr)==cps_api_ret_code_OK); cps_api_transaction_close(&tr); }