TEST(cps_api_key,key_create) { cps_api_key_t key; memset(&key,0,sizeof(key)); cps_api_key_set(&key,0,0); cps_api_key_set(&key,1,1); cps_api_key_set(&key,2,2); cps_api_key_set_len(&key,3); ASSERT_TRUE(cps_api_key_get_len(&key)==3); ASSERT_TRUE(cps_api_key_element_at(&key,0)==0); ASSERT_TRUE(cps_api_key_element_at(&key,1)==1); ASSERT_TRUE(cps_api_key_element_at(&key,2)==2); }
TEST(cps_api_key,key_insert) { cps_api_key_t key; memset(&key,0,sizeof(key)); cps_api_key_set(&key,0,0); cps_api_key_set(&key,1,1); cps_api_key_set(&key,2,2); cps_api_key_set_len(&key,3); cps_api_key_t new_key ; cps_api_key_copy(&new_key,&key); cps_api_key_remove_element(&new_key,0); ASSERT_TRUE(cps_api_key_element_at(&new_key,0)== 1); ASSERT_TRUE(cps_api_key_get_len(&new_key)==2); cps_api_key_insert_element(&new_key,0,5); ASSERT_TRUE(cps_api_key_element_at(&new_key,0)== 5); ASSERT_TRUE(cps_api_key_get_len(&new_key)==3); cps_api_key_insert_element(&new_key,3,5); ASSERT_TRUE(cps_api_key_element_at(&new_key,3)== 5); ASSERT_TRUE(cps_api_key_get_len(&new_key)==4); cps_api_key_insert_element(&new_key,2,5); ASSERT_TRUE(cps_api_key_element_at(&new_key,2)== 5); ASSERT_TRUE(cps_api_key_get_len(&new_key)==5); ASSERT_TRUE(cps_api_key_element_at(&new_key,0)== 5); ASSERT_TRUE(cps_api_key_element_at(&new_key,2)== 5); ASSERT_TRUE(cps_api_key_element_at(&new_key,4)== 5); }
//Assumption: The first field of the key is the qualifier const char * cps_class_qual_from_key(cps_api_key_t *key) { static const int QUAL_POS=0; cps_api_key_element_t qual = cps_api_key_element_at(key, QUAL_POS); auto it = _qual_to_string.find((cps_api_qualifier_t)qual); if (it!=_qual_to_string.end()) { return (it->second.c_str()); } return nullptr; }
cps_api_return_code_t ds_api_linux_interface_get_function (void * context, cps_api_get_params_t * param, size_t ix) { cps_api_return_code_t rc = cps_api_ret_code_OK; cps_api_key_t key; cps_api_int_if_key_create(&key,false,0,0); if (cps_api_key_matches(&(param->keys[ix]),&key,false)==0) { if (cps_api_key_get_len(¶m->keys[ix])<=CPS_OBJ_KEY_APP_INST_POS) { return get_all_interfaces(param->list); } else { uint32_t ifix = cps_api_key_element_at(¶m->keys[ix],CPS_API_INT_IF_OBJ_KEY_IFIX); char if_name[HAL_IF_NAME_SZ+1]; if (cps_api_interface_if_index_to_name(ifix,if_name, sizeof(if_name))==NULL) { return cps_api_ret_code_OK; } rc = get_interface(if_name,param,&ix); //toss rc on a query unless it fails due to some sw err } } return rc; }
static cps_api_return_code_t ds_set_interface (cps_api_object_list_t list, cps_api_object_t elem) { uint_t ifix = cps_api_key_element_at(cps_api_object_key(elem), CPS_API_INT_IF_OBJ_KEY_IFIX); char if_name[HAL_IF_NAME_SZ+1]; if (cps_api_interface_if_index_to_name(ifix,if_name, sizeof(if_name))==NULL) { return cps_api_ret_code_ERR; } cps_api_object_attr_t mtu = cps_api_object_attr_get(elem,cps_api_if_STRUCT_A_MTU); cps_api_object_attr_t astate = cps_api_object_attr_get(elem,cps_api_if_STRUCT_A_ADMIN_STATE); cps_api_object_attr_t ostate = cps_api_object_attr_get(elem,cps_api_if_STRUCT_A_OPER_STATE); cps_api_object_attr_t mac = cps_api_object_attr_get(elem,cps_api_if_STRUCT_A_IF_MACADDR); if (mtu!=CPS_API_ATTR_NULL) { if (nas_os_util_int_mtu_set(if_name,cps_api_object_attr_data_u32(mtu))!=STD_ERR_OK) return cps_api_ret_code_ERR; } if (astate!=CPS_API_ATTR_NULL && ostate!=CPS_API_ATTR_NULL) { if (nas_os_util_int_admin_state_set(if_name, cps_api_object_attr_data_u32(astate), cps_api_object_attr_data_u32(ostate))!=STD_ERR_OK) return cps_api_ret_code_ERR; } if (mac!=CPS_API_ATTR_NULL) { hal_mac_addr_t mac_addr; void * data = cps_api_object_attr_data_bin(mac); memcpy(mac_addr,data,sizeof(mac_addr)); if (nas_os_util_int_mac_addr_set(if_name, &mac_addr)!=STD_ERR_OK) return cps_api_ret_code_ERR; } return cps_api_ret_code_OK; }