* Fixed: [uses oc-if:interface-ref error with openconfig #233](https://github.com/clicon/clixon/issues/233)
This commit is contained in:
parent
85e2945ec9
commit
89f843f919
5 changed files with 24 additions and 17 deletions
|
|
@ -1,6 +1,6 @@
|
||||||
# Clixon Changelog
|
# Clixon Changelog
|
||||||
|
|
||||||
* [5.2.0](#520) Expected: June 2021
|
* [5.2.0](#520) Expected: July 2021
|
||||||
* [5.1.0](#510) 15 April 2021
|
* [5.1.0](#510) 15 April 2021
|
||||||
* [5.0.0](#500) 27 February 2021
|
* [5.0.0](#500) 27 February 2021
|
||||||
* [5.0.1](#501) 10 March 2021
|
* [5.0.1](#501) 10 March 2021
|
||||||
|
|
@ -30,7 +30,7 @@
|
||||||
* [3.3.1](#331) June 7 2017
|
* [3.3.1](#331) June 7 2017
|
||||||
|
|
||||||
## 5.2.0
|
## 5.2.0
|
||||||
Expected: June 2021
|
Expected: July 2021
|
||||||
|
|
||||||
### New features
|
### New features
|
||||||
|
|
||||||
|
|
@ -116,6 +116,7 @@ Developers may need to change their code
|
||||||
|
|
||||||
### Corrected Bugs
|
### Corrected Bugs
|
||||||
|
|
||||||
|
* Fixed: [uses oc-if:interface-ref error with openconfig #233](https://github.com/clicon/clixon/issues/233)
|
||||||
* Fixed: [need make sure message-id exist in rpc validate #240](https://github.com/clicon/clixon/issues/240)
|
* Fixed: [need make sure message-id exist in rpc validate #240](https://github.com/clicon/clixon/issues/240)
|
||||||
* Netconf message-id attribute changed from optional to mandatory (see API changes)
|
* Netconf message-id attribute changed from optional to mandatory (see API changes)
|
||||||
* Fixed: [restconf patch method unable to chage value to empty string #229](https://github.com/clicon/clixon/issues/229)
|
* Fixed: [restconf patch method unable to chage value to empty string #229](https://github.com/clicon/clixon/issues/229)
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ Clixon is a YANG-based configuration manager, with interactive CLI,
|
||||||
NETCONF and RESTCONF interfaces, an embedded database and transaction
|
NETCONF and RESTCONF interfaces, an embedded database and transaction
|
||||||
mechanism.
|
mechanism.
|
||||||
|
|
||||||
See [documentation](https://clixon-docs.readthedocs.io), [project page](https://www.clicon.org) and [examples](https://github.com/clicon/clixon-examples), [Travis-CI](https://travis-ci.org/clicon/clixon)
|
See [documentation](https://clixon-docs.readthedocs.io), [project page](https://www.clicon.org) and [examples](https://github.com/clicon/clixon-examples), [Github actions CI](https://github.com/clicon/clixon/actions/workflows/ci.yml)
|
||||||
|
|
||||||
Clixon is open-source and dual licensed. Either Apache License, Version 2.0 or GNU
|
Clixon is open-source and dual licensed. Either Apache License, Version 2.0 or GNU
|
||||||
General Public License Version 2; you choose, see [LICENSE.md](LICENSE.md).
|
General Public License Version 2; you choose, see [LICENSE.md](LICENSE.md).
|
||||||
|
|
@ -17,6 +17,6 @@ Latest release is 5.1.0. See [CHANGELOG.md](CHANGELOG.md) release history.
|
||||||
|
|
||||||
Clixon interaction is best done posting issues, pull requests, or joining the
|
Clixon interaction is best done posting issues, pull requests, or joining the
|
||||||
[slack channel](https://clixondev.slack.com).
|
[slack channel](https://clixondev.slack.com).
|
||||||
[Slack invite](https://join.slack.com/t/clixondev/shared_invite/zt-qk66zp47-ahdOlEHKEPmb~5ciVJilPQ) (updated 24/5 2021)
|
[Slack invite](https://join.slack.com/t/clixondev/shared_invite/zt-seopvltv-hs~BS7UrMjRdKoDRlCK97w) (updated 30/6 2021)
|
||||||
|
|
||||||
Clixon is sponsored by [Rubicon Communications LLC(Netgate)](https://www.netgate.com/)
|
Clixon is sponsored by [Rubicon Communications LLC(Netgate)](https://www.netgate.com/)
|
||||||
|
|
|
||||||
|
|
@ -105,7 +105,6 @@ validate_leafref(cxobj *xt,
|
||||||
{
|
{
|
||||||
int retval = -1;
|
int retval = -1;
|
||||||
yang_stmt *ypath;
|
yang_stmt *ypath;
|
||||||
yang_stmt *yp;
|
|
||||||
cxobj **xvec = NULL;
|
cxobj **xvec = NULL;
|
||||||
cxobj *x;
|
cxobj *x;
|
||||||
int i;
|
int i;
|
||||||
|
|
@ -124,14 +123,8 @@ validate_leafref(cxobj *xt,
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
/* See comment^: If path is defined in typedef or not */
|
/* See comment^: If path is defined in typedef or not */
|
||||||
if ((yp = yang_parent_get(ytype)) != NULL &&
|
if (xml_nsctx_node(xt, &nsc) < 0)
|
||||||
yang_keyword_get(yp) == Y_TYPEDEF){
|
goto done;
|
||||||
if (xml_nsctx_yang(ys, &nsc) < 0)
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
if (xml_nsctx_yang(ytype, &nsc) < 0)
|
|
||||||
goto done;
|
|
||||||
path = yang_argument_get(ypath);
|
path = yang_argument_get(ypath);
|
||||||
if (xpath_vec(xt, nsc, "%s", &xvec, &xlen, path) < 0)
|
if (xpath_vec(xt, nsc, "%s", &xvec, &xlen, path) < 0)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
|
||||||
|
|
@ -239,7 +239,6 @@ xpath_tree_print(FILE *f,
|
||||||
* @param[in] xs XPATH tree
|
* @param[in] xs XPATH tree
|
||||||
* @param[out] xpath XPath string as CLIgen buf
|
* @param[out] xpath XPath string as CLIgen buf
|
||||||
* @see xpath_tree_print
|
* @see xpath_tree_print
|
||||||
* @note XXX Not complete
|
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
xpath_tree2cbuf(xpath_tree *xs,
|
xpath_tree2cbuf(xpath_tree *xs,
|
||||||
|
|
@ -247,6 +246,7 @@ xpath_tree2cbuf(xpath_tree *xs,
|
||||||
{
|
{
|
||||||
int retval = -1;
|
int retval = -1;
|
||||||
|
|
||||||
|
/* 1. Before first child */
|
||||||
switch (xs->xs_type){
|
switch (xs->xs_type){
|
||||||
case XP_ABSPATH:
|
case XP_ABSPATH:
|
||||||
if (xs->xs_int == A_DESCENDANT_OR_SELF)
|
if (xs->xs_int == A_DESCENDANT_OR_SELF)
|
||||||
|
|
@ -283,8 +283,10 @@ xpath_tree2cbuf(xpath_tree *xs,
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
/* 2. First child */
|
||||||
if (xs->xs_c0 && xpath_tree2cbuf(xs->xs_c0, xcb) < 0)
|
if (xs->xs_c0 && xpath_tree2cbuf(xs->xs_c0, xcb) < 0)
|
||||||
goto done;
|
goto done;
|
||||||
|
/* 3. Between first and second child */
|
||||||
switch (xs->xs_type){
|
switch (xs->xs_type){
|
||||||
case XP_AND: /* and or */
|
case XP_AND: /* and or */
|
||||||
case XP_ADD: /* div mod + * - */
|
case XP_ADD: /* div mod + * - */
|
||||||
|
|
@ -293,6 +295,13 @@ xpath_tree2cbuf(xpath_tree *xs,
|
||||||
if (xs->xs_c1)
|
if (xs->xs_c1)
|
||||||
cprintf(xcb, " %s ", clicon_int2str(xpopmap, xs->xs_int));
|
cprintf(xcb, " %s ", clicon_int2str(xpopmap, xs->xs_int));
|
||||||
break;
|
break;
|
||||||
|
case XP_PATHEXPR:
|
||||||
|
/* [19] PathExpr ::= | FilterExpr '/' RelativeLocationPath
|
||||||
|
| FilterExpr '//' RelativeLocationPath
|
||||||
|
*/
|
||||||
|
if (xs->xs_s0)
|
||||||
|
cprintf(xcb, "%s", xs->xs_s0);
|
||||||
|
break;
|
||||||
case XP_RELLOCPATH:
|
case XP_RELLOCPATH:
|
||||||
if (xs->xs_c1){
|
if (xs->xs_c1){
|
||||||
if (xs->xs_int == A_DESCENDANT_OR_SELF)
|
if (xs->xs_int == A_DESCENDANT_OR_SELF)
|
||||||
|
|
@ -311,8 +320,10 @@ xpath_tree2cbuf(xpath_tree *xs,
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
/* 4. Second child */
|
||||||
if (xs->xs_c1 && xpath_tree2cbuf(xs->xs_c1, xcb) < 0)
|
if (xs->xs_c1 && xpath_tree2cbuf(xs->xs_c1, xcb) < 0)
|
||||||
goto done;
|
goto done;
|
||||||
|
/* 5. After second child */
|
||||||
switch (xs->xs_type){
|
switch (xs->xs_type){
|
||||||
case XP_PRED:
|
case XP_PRED:
|
||||||
if (xs->xs_c1)
|
if (xs->xs_c1)
|
||||||
|
|
@ -915,6 +926,8 @@ xpath_vec_bool(cxobj *xcur,
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
*/
|
||||||
static int
|
static int
|
||||||
traverse_canonical(xpath_tree *xs,
|
traverse_canonical(xpath_tree *xs,
|
||||||
yang_stmt *yspec,
|
yang_stmt *yspec,
|
||||||
|
|
|
||||||
|
|
@ -163,7 +163,7 @@ xpath_parse_exit(clixon_xpath_yacc *xpy)
|
||||||
* @param[in] type XPATH tree node type
|
* @param[in] type XPATH tree node type
|
||||||
* @param[in] i0 step-> axis_type
|
* @param[in] i0 step-> axis_type
|
||||||
* @param[in] numstr original string xs_double: numeric value
|
* @param[in] numstr original string xs_double: numeric value
|
||||||
* @param[in] s0 String 0 set if XP_PRIME_STR, XP_PRIME_FN, XP_NODE[_FN] prefix
|
* @param[in] s0 String 0 set if XP_PRIME_STR, XP_PRIME_FN, XP_NODE[_FN] PATHEXPRE prefix
|
||||||
* @param[in] s1 String 1 set if XP_NODE NAME
|
* @param[in] s1 String 1 set if XP_NODE NAME
|
||||||
* @param[in] c0 Child 0
|
* @param[in] c0 Child 0
|
||||||
* @param[in] c1 Child 1
|
* @param[in] c1 Child 1
|
||||||
|
|
@ -393,8 +393,8 @@ unionexpr : unionexpr '|' pathexpr { $$=xp_new(XP_UNION,XO_UNION,NULL,NULL,NUL
|
||||||
|
|
||||||
pathexpr : locationpath { $$=xp_new(XP_PATHEXPR,A_NAN,NULL,NULL,NULL,$1, NULL);clicon_debug(3,"pathexpr-> locationpath"); }
|
pathexpr : locationpath { $$=xp_new(XP_PATHEXPR,A_NAN,NULL,NULL,NULL,$1, NULL);clicon_debug(3,"pathexpr-> locationpath"); }
|
||||||
| filterexpr { $$=xp_new(XP_PATHEXPR,A_NAN,NULL,NULL,NULL,$1, NULL);clicon_debug(3,"pathexpr-> filterexpr"); }
|
| filterexpr { $$=xp_new(XP_PATHEXPR,A_NAN,NULL,NULL,NULL,$1, NULL);clicon_debug(3,"pathexpr-> filterexpr"); }
|
||||||
| filterexpr '/' rellocpath { $$=xp_new(XP_PATHEXPR,A_NAN,NULL,NULL,NULL,$1, $3);clicon_debug(3,"pathexpr-> filterexpr / rellocpath"); }
|
| filterexpr '/' rellocpath { $$=xp_new(XP_PATHEXPR,A_NAN,NULL,strdup("/"),NULL,$1, $3);clicon_debug(3,"pathexpr-> filterexpr / rellocpath"); }
|
||||||
/* Filterexpr // relativelocationpath */
|
| filterexpr DOUBLESLASH rellocpath { $$=xp_new(XP_PATHEXPR,A_NAN,NULL,strdup("//"),NULL,$1, $3);clicon_debug(3,"pathexpr-> filterexpr // rellocpath"); }
|
||||||
;
|
;
|
||||||
|
|
||||||
filterexpr : primaryexpr { $$=xp_new(XP_FILTEREXPR,A_NAN,NULL,NULL,NULL,$1, NULL);clicon_debug(3,"filterexpr-> primaryexpr"); }
|
filterexpr : primaryexpr { $$=xp_new(XP_FILTEREXPR,A_NAN,NULL,NULL,NULL,$1, NULL);clicon_debug(3,"filterexpr-> primaryexpr"); }
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue