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;
}
예제 #4
0
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(&param->keys[ix])<=CPS_OBJ_KEY_APP_INST_POS) {
            return get_all_interfaces(param->list);
        } else {
            uint32_t ifix = cps_api_key_element_at(&param->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;
}
예제 #5
0
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;
}