* New YANG generated auto-cli feature with syntax modes
* The existing autocli does not support modes, complete paths must be given, eg: `set a b c d 42`. * In the new auto-cli, automatic modes are present at each YANG syntax node level, eg the above can be given as: `edit a b c; set d 4; top` * The existing CLI API remains, the new API is as follows: `cli_auto_edit()`, `cli_auto_up()`, `cli_auto_top()`, `cli_auto_show()`, `cli_auto_set()`, `cli_auto_merge()`, `cli_auto_create()`, `cli_auto_del()`. * See `test/test_cli_auto.sh` for an example of the new API, and `apps/cli/cli_auto.c` for the source code of the new callback API. * Documentation will be appear and full integration with the main example. * Added inline state field to clixon-example.yang * Added new clicon_data_cvec_*() API for generic cvec structs
This commit is contained in:
parent
8d901e1fde
commit
2d56c9674a
11 changed files with 972 additions and 12 deletions
|
|
@ -134,6 +134,78 @@ clicon_data_del(clicon_handle h,
|
|||
return clicon_hash_del(cdat, (char*)name);
|
||||
}
|
||||
|
||||
/*! Get generic cligen varaibel vector (cvv) on the form <name>=<val> where <val> is cvv
|
||||
*
|
||||
* @param[in] h Clicon handle
|
||||
* @param[in] name Data name
|
||||
* @retval cvv Data value as cvv
|
||||
* @retval NULL Not found (or error)
|
||||
* @code
|
||||
* cvec *cvv = NULL;
|
||||
* if (clicon_data_cvec_get(h, "mycvv", &cvv) < 0)
|
||||
* err;
|
||||
* @endcode
|
||||
*/
|
||||
cvec *
|
||||
clicon_data_cvec_get(clicon_handle h,
|
||||
const char *name)
|
||||
{
|
||||
clicon_hash_t *cdat = clicon_data(h);
|
||||
size_t len = 0;
|
||||
void *p;
|
||||
|
||||
if ((p = clicon_hash_value(cdat, (char*)name, &len)) != NULL)
|
||||
return *(cvec **)p;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*! Set generic cligen varaibel vector (cvv) on the form <name>=<val> where <val> is cvv
|
||||
* @param[in] h Clicon handle
|
||||
* @param[in] name Name
|
||||
* @param[in] cvv CLIgen variable vector (cvv) (malloced)
|
||||
*/
|
||||
int
|
||||
clicon_data_cvec_set(clicon_handle h,
|
||||
const char *name,
|
||||
cvec *cvv)
|
||||
{
|
||||
clicon_hash_t *cdat = clicon_data(h);
|
||||
cvec *cvv0;
|
||||
|
||||
/* It is the pointer to cvec that should be copied by hash,
|
||||
so we send a ptr to the ptr to indicate what to copy.
|
||||
*/
|
||||
if ((cvv0 = clicon_data_cvec_get(h, name)) != NULL){
|
||||
fprintf(stderr, "%s free %p\n", __FUNCTION__, cvv0);
|
||||
cvec_free(cvv0);
|
||||
}
|
||||
fprintf(stderr, "%s set %p\n", __FUNCTION__, cvv);
|
||||
if (clicon_hash_add(cdat, (char*)name, &cvv, sizeof(cvv)) == NULL)
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*! Delete generic cligen varaibel vector (cvv)
|
||||
* @param[in] h Clicon handle
|
||||
* @param[in] name Name
|
||||
*/
|
||||
int
|
||||
clicon_data_cvec_del(clicon_handle h,
|
||||
const char *name)
|
||||
{
|
||||
clicon_hash_t *cdat = clicon_data(h);
|
||||
cvec *cvv0;
|
||||
|
||||
/* It is the pointer to cvec that should be copied by hash,
|
||||
so we send a ptr to the ptr to indicate what to copy.
|
||||
*/
|
||||
if ((cvv0 = clicon_data_cvec_get(h, name)) != NULL){
|
||||
fprintf(stderr, "%s free %p\n", __FUNCTION__, cvv0);
|
||||
cvec_free(cvv0);
|
||||
}
|
||||
return clicon_hash_del(cdat, (char*)name);
|
||||
}
|
||||
|
||||
/*!
|
||||
* @param[in] h Clicon handle
|
||||
* @retval yspec Yang spec
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue