If there is an object template of a YANG node, the complete object ID (yang path from top parent to the current object node) of the object can be fetched with the below functions:

  • obj_gen_object_id (const obj_template_t *obj, xmlChar  **buff)
  • obj_gen_object_id_prefix (const obj_template_t *obj, xmlChar  **buff)
  • obj_gen_object_id_xpath (const obj_template_t *obj, xmlChar  **buff)
  • obj_gen_object_id_oid (ncx_module_t *mod, const obj_template_t *obj, xmlChar  **buff)


/********************************************************************
* FUNCTION obj_gen_object_id
*
* Malloc and Generate the object ID for an object node
*
* INPUTS:
*   obj == the node to generate the instance ID for
*   buff == pointer to address of buffer to use
*
* RETURNS:
*   status
*********************************************************************/
status_t
    obj_gen_object_id (const obj_template_t *obj,
                       xmlChar  **buff)


/********************************************************************
* FUNCTION obj_gen_object_id_prefix
*
* Malloc and Generate the object ID for an object node
* Use the prefix in every node
*
* INPUTS:
*   obj == the node to generate the instance ID for
*   buff == pointer to address of buffer to use
*
* RETURNS:
*   status
*********************************************************************/
status_t
    obj_gen_object_id_prefix (const obj_template_t *obj,
                              xmlChar **buff)


/********************************************************************
* FUNCTION obj_gen_object_id_xpath
*
* Malloc and Generate the object ID for an object node
* Remove all conceptual OBJ_TYP_CHOICE and OBJ_TYP_CASE nodes
* so the resulting string will represent the structure of the
* value tree for XPath searching
*
* INPUTS:
*   obj == the node to generate the instance ID for
*   buff == pointer to address of buffer to use
*
* RETURNS:
*   status
*********************************************************************/
status_t
    obj_gen_object_id_xpath (const obj_template_t *obj,
                              xmlChar **buff)


/********************************************************************
* FUNCTION obj_gen_object_id_oid
*
* Malloc and Generate the object ID for an object node
* Used for canonical ID string comparison to generate OID number
*
* Uses the JSON/YANG module-name for prefix convention
* Only print module name when namespace changes
*
* INPUTS:
*   mod == the module containing the object
*   obj == the node to generate the instance ID for
*   buff == pointer to address of buffer to use
*
* RETURNS:
*   status
*********************************************************************/
status_t
    obj_gen_object_id_oid (ncx_module_t *mod,
                           const obj_template_t *obj,
                           xmlChar  **buff)


Below is an example of using one of the APIs above:


/********************************************************************
* FUNCTION dump_get2cb
*
* Print the interesting fields in a get2cb and msg
*
* INPUTS:
*   get2cb == get2 control block to use
*   msg == message header control block to use
*
*********************************************************************/
static void
    dump_get2cb (getcb_get2_t *get2cb,
                 xml_msg_hdr_t *msg)
{
    if (!get2cb || !msg) {
        SET_ERROR(ERR_INTERNAL_PTR);
        return;
    }

    log_info("\n\n------------------------");
    log_info("\nCallback information:");

    obj_template_t *obj = GETCB_GET2_OBJ(get2cb);

    if (obj) {
        log_info("\n  object: '%s:%s'",
                  obj_get_mod_name(obj),
                  obj_get_name(obj));
        xmlChar *buff = NULL;
        status_t res = obj_gen_object_id_prefix(obj, &buff);
        if (res == NO_ERR && buff) {
            log_info_append("\n  path: %s", buff);
        }
        if (buff) {
            m__free(buff);
        }
    } else {
        log_info("\n  object: NONE");
    }

    log_info("\n------------------------\n");

} /* dump_get2cb */