The NV-Save callback function is a user callback that is invoked when the running configuration needs to be saved to non-volatile storage. A configuration filespec is passed to this callback that contains the configuration that needs to be saved to non-volatile storage.
The following function template definition is used for NV-Save callback functions:
/* Typedef of the callback */ typedef status_t (*agt_nvsave_fn_t) (ncx_display_mode_t encoding, const xmlChar *filespec);
The agt_register_local_nv_handler function is used to declare the NV-Save callback. The registration can be done during the Initialization Phase 2, after the running configuration has been loaded from the startup file.
Initialization function with the NV- Save callback registration may look as follows:
#define EXAMPLECONFIG_SPEC (const xmlChar *)"/tmp/example-config.xml" /******************************************************************** * FUNCTION interfaces_init2 * * initialize the server instrumentation library. * Initialization Phase 2 * *********************************************************************/ static status_t interfaces_init2 (void) { ... /* register NV-storage handler to load/save config * uncomment following to enable */ res = agt_register_local_nv_handler(nvload_callback, nvsave_callback); if (res != NO_ERR) { return res; } ... }
There is no cleanup function for this callback. The cleanup will be done automatically by the server.
The following example code illustrates how the NV-Save callback may look like.
/******************************************************************** * FUNCTION nvsave_callback * * this callback is invoked when some config needs to be saved * to non-volatile storage * * INPUTS: * encoding == encoding format for the config (xml only allowed value) * filespec == filespec containing the config to save * RETURNS: * status; error indicates NV-save failed somehow * *********************************************************************/ static status_t example_nvsave (ncx_display_mode_t encoding, const xmlChar *filespec) { status_t res = NO_ERR; if (filespec == NULL || *filespec == 0) { res = ERR_NCX_INVALID_VALUE; } else if (encoding != NCX_DISPLAY_MODE_XML) { res = ERR_NCX_INVALID_VALUE; } else { res = ncxmod_copy_text_file(filespec, EXAMPLE_CONFIG_SPEC); } return res; } /* nvsave_callback */
Now, when some configuration needs to be saved to Non-Volatile storage this callback function will try to save specified configuration into specific Non-Volatile storage.