Use the appropriate YumaPro SDK tool to create your SIL or SIL-SA code from the YANG module you require (details can be found in Section "Development Environment" of the YumaPro Developer Manual). It is best to keep your development in a separate directory, such as "~/modules", so as not to mix your development work in with the standard or Yuma module directories.
For example to generate the IETF Interfaces module SIL code:
user@system ~/modules$ make_sil_dir_pro --split ietf-interfaces
The --split option creates separate user (u_) and system (y_) files, which is the suggested option. You won't need to touch the y_ files.
An ietf-interfaces sub-directory will be created with all the generated files including the .c & .h files you need to add instrumentation to in the src sub-directory. In this example edit the u_ietf-interfaces.h & u_ietf-interfaces.c files as needed. (See the section of the u_ietf-interfaces.c below for examples of the locations where you need to add instrumentation). Below is the listing of the generated src sub-direectory.
user@system ~/modules/ietf-interfaces$ ls src/ Makefile u_ietf-interfaces.h y_ietf-interfaces.h u_ietf-interfaces.c y_ietf-interfaces.c
Once you've added your instrumentation you can build and install the code with:
user@system ~/modules/ietf-interfaces$ make user@system ~/modules/ietf-interfaces$ sudo make install
Section of the u_ietf-interfaces.c generated file:
Instrumentation is added in the "validation/manipulation/instrumentation done here" comment sections:
/********************************************************************
* FUNCTION u_ietf_interfaces_interfaces_interface_type_edit
*
* Edit database object callback
* Path: /interfaces/interface/type
* Add object instrumentation in COMMIT phase.
*
* INPUTS:
* see agt/agt_cb.h for details
* k_ parameters are ancestor list key values.
*
* RETURNS:
* error status
********************************************************************/
status_t u_ietf_interfaces_interfaces_interface_type_edit (
ses_cb_t *scb,
rpc_msg_t *msg,
agt_cbtyp_t cbtyp,
op_editop_t editop,
val_value_t *newval,
val_value_t *curval,
const xmlChar *k_interfaces_interface_name)
{
status_t res = NO_ERR;
const val_idref_t *newval_val = (newval) ? VAL_IDREF(newval) : 0;
const val_idref_t *curval_val = (curval) ? VAL_IDREF(curval) : 0;
if (LOGDEBUG) {
log_debug("\nEnter u_ietf_interfaces_interfaces_interface_type_edit callback for %s phase",
agt_cbtype_name(cbtyp));
}
switch (cbtyp) {
case AGT_CB_VALIDATE:
/* description-stmt validation here */
break;
case AGT_CB_APPLY:
/* database manipulation done here */
break;
case AGT_CB_COMMIT:
/* device instrumentation done here */
switch (editop) {
case OP_EDITOP_LOAD:
break;
case OP_EDITOP_MERGE:
break;
case OP_EDITOP_REPLACE:
break;
case OP_EDITOP_CREATE:
break;
case OP_EDITOP_DELETE:
break;
default:
res = SET_ERROR(ERR_INTERNAL_VAL);
}
break;
case AGT_CB_ROLLBACK:
/* undo device instrumentation here */
break;
default:
res = SET_ERROR(ERR_INTERNAL_VAL);
}
return res;
} /* u_ietf_interfaces_interfaces_interface_type_edit */