Fixed: [clixon_netconf does not respond to hello #136](https://github.com/clicon/clixon/issues/136)
* The error showed only when CLICON_MODULE_LIBRARY_RFC7895 was disabled.
This commit is contained in:
parent
1ef3c0db7a
commit
5b5dce7e39
5 changed files with 29 additions and 13 deletions
|
|
@ -61,6 +61,8 @@ Developers may need to change their code
|
|||
|
||||
### Corrected Bugs
|
||||
|
||||
* Fixed: [clixon_netconf does not respond to hello #136](https://github.com/clicon/clixon/issues/136)
|
||||
* The error showed only when CLICON_MODULE_LIBRARY_RFC7895 was disabled.
|
||||
* Fixed: Do not check min/max constraints on state data in config validate code
|
||||
* Fixed: [min-elements attribute prevents from deleting list entries #133](https://github.com/clicon/clixon/issues/133)
|
||||
* Fixed: [xmldb_get0 returns invalid candidate on startup transaction callbacks #126](https://github.com/clicon/clixon/issues/126). Always clear candidate-db before db initialization.
|
||||
|
|
|
|||
|
|
@ -595,9 +595,14 @@ main(int argc,
|
|||
goto done;
|
||||
clicon_session_id_set(h, id);
|
||||
|
||||
/* Send hello to northbound client */
|
||||
if (!quiet)
|
||||
send_hello(h, 1, id);
|
||||
/* Send hello to northbound client
|
||||
* Note that this is a violation of RDFC 6241 Sec 8.1:
|
||||
* When the NETCONF session is opened, each peer(both client and server) MUST send a <hello..
|
||||
*/
|
||||
if (!quiet){
|
||||
if (send_hello(h, 1, id) < 0)
|
||||
goto done;
|
||||
}
|
||||
if (clixon_event_reg_fd(0, netconf_input_cb, h, "netconf socket") < 0)
|
||||
goto done;
|
||||
if (dbg)
|
||||
|
|
|
|||
|
|
@ -1500,7 +1500,7 @@ netconf_content_int2str(netconf_content nr)
|
|||
*
|
||||
* RFC6022 YANG Module for NETCONF Monitoring
|
||||
* MUST advertise the capability URI "urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring"
|
||||
* RFC7895 Yang module library defines how to announce module features (not hell capabilities)
|
||||
* RFC7895 Yang module library defines how to announce module features (not hello capabilities)
|
||||
* RFC7950 YANG 1.1 says (5.6.4);
|
||||
* MUST announce the modules it implements by implementing the YANG module
|
||||
* "ietf-yang-library" (RFC7895) and listing all implemented modules in the
|
||||
|
|
@ -1535,16 +1535,18 @@ netconf_hello_server(clicon_handle h,
|
|||
char *encstr = NULL;
|
||||
|
||||
module_set_id = clicon_option_str(h, "CLICON_MODULE_SET_ID");
|
||||
if ((ietf_yang_library_revision = yang_modules_revision(h)) == NULL)
|
||||
goto done;
|
||||
|
||||
cprintf(cb, "<hello xmlns=\"%s\">", NETCONF_BASE_NAMESPACE);
|
||||
cprintf(cb, "<capabilities>");
|
||||
cprintf(cb, "<capability>urn:ietf:params:netconf:base:1.0</capability>");
|
||||
if (xml_chardata_encode(&encstr, "urn:ietf:params:netconf:capability:yang-library:1.0?revision=%s&module-set-id=%s",
|
||||
ietf_yang_library_revision,
|
||||
module_set_id) < 0)
|
||||
goto done;
|
||||
cprintf(cb, "<capability>%s</capability>", encstr);
|
||||
cprintf(cb, "<capability>urn:ietf:params:netconf:base:1.0</capability>");
|
||||
/* Check if RFC7895 loaded and revision found */
|
||||
if ((ietf_yang_library_revision = yang_modules_revision(h)) != NULL){
|
||||
if (xml_chardata_encode(&encstr, "urn:ietf:params:netconf:capability:yang-library:1.0?revision=%s&module-set-id=%s",
|
||||
ietf_yang_library_revision,
|
||||
module_set_id) < 0)
|
||||
goto done;
|
||||
cprintf(cb, "<capability>%s</capability>", encstr);
|
||||
}
|
||||
cprintf(cb, "<capability>urn:ietf:params:netconf:capability:candidate:1.0</capability>");
|
||||
cprintf(cb, "<capability>urn:ietf:params:netconf:capability:validate:1.1</capability>");
|
||||
cprintf(cb, "<capability>urn:ietf:params:netconf:capability:startup:1.0</capability>");
|
||||
|
|
|
|||
|
|
@ -1061,11 +1061,14 @@ clicon_rpc_debug(clicon_handle h,
|
|||
return retval;
|
||||
}
|
||||
|
||||
/*! Send a debug request to backend server
|
||||
/*! Send a hello request to the backend server
|
||||
* @param[in] h CLICON handle
|
||||
* @param[in] level Debug level
|
||||
* @retval 0 OK
|
||||
* @retval -1 Error and logged to syslog
|
||||
* @note this is internal netconf to backend, not northbound to user client
|
||||
* @note this deviates from RFC6241 slightly in that it waits for a reply, the RFC does not
|
||||
* stipulate that.
|
||||
*/
|
||||
int
|
||||
clicon_hello_req(clicon_handle h,
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ cat <<EOF > $cfg
|
|||
<CLICON_SOCK>$dir/$APPNAME.sock</CLICON_SOCK>
|
||||
<CLICON_BACKEND_PIDFILE>/usr/local/var/$APPNAME/$APPNAME.pidfile</CLICON_BACKEND_PIDFILE>
|
||||
<CLICON_XMLDB_DIR>/usr/local/var/$APPNAME</CLICON_XMLDB_DIR>
|
||||
<CLICON_MODULE_LIBRARY_RFC7895>true</CLICON_MODULE_LIBRARY_RFC7895>
|
||||
</clixon-config>
|
||||
EOF
|
||||
|
||||
|
|
@ -51,6 +52,9 @@ fi
|
|||
new "netconf hello"
|
||||
expecteof "$clixon_netconf -f $cfg" 0 "<rpc $DEFAULTNS message-id=\"101\"><get-config><source><candidate/></source></get-config></rpc>]]>]]>" "^<hello $DEFAULTNS><capabilities><capability>urn:ietf:params:netconf:base:1.0</capability><capability>urn:ietf:params:netconf:capability:yang-library:1.0?revision=2016-06-21&module-set-id=42</capability><capability>urn:ietf:params:netconf:capability:candidate:1.0</capability><capability>urn:ietf:params:netconf:capability:validate:1.1</capability><capability>urn:ietf:params:netconf:capability:startup:1.0</capability><capability>urn:ietf:params:netconf:capability:xpath:1.0</capability><capability>urn:ietf:params:netconf:capability:notification:1.0</capability></capabilities><session-id>[0-9]*</session-id></hello>]]>]]><rpc-reply $DEFAULTNS message-id=\"101\"><data/></rpc-reply>]]>]]>$"
|
||||
|
||||
new "netconf hello, disable RFC7895/ietf-yang-library"
|
||||
expecteof "$clixon_netconf -f $cfg -o CLICON_MODULE_LIBRARY_RFC7895=0" 0 "<rpc $DEFAULTNS message-id=\"101\"><get-config><source><candidate/></source></get-config></rpc>]]>]]>" "^<hello $DEFAULTNS><capabilities><capability>urn:ietf:params:netconf:base:1.0</capability><capability>urn:ietf:params:netconf:capability:candidate:1.0</capability><capability>urn:ietf:params:netconf:capability:validate:1.1</capability><capability>urn:ietf:params:netconf:capability:startup:1.0</capability><capability>urn:ietf:params:netconf:capability:xpath:1.0</capability><capability>urn:ietf:params:netconf:capability:notification:1.0</capability></capabilities><session-id>[0-9]*</session-id></hello>]]>]]><rpc-reply $DEFAULTNS message-id=\"101\"><data/></rpc-reply>]]>]]>$"
|
||||
|
||||
new "netconf get-config double quotes"
|
||||
expecteof "$clixon_netconf -qf $cfg" 0 "<rpc $DEFAULTNS message-id=\"101\"><get-config><source><candidate/></source></get-config></rpc>]]>]]>" "^<rpc-reply $DEFAULTNS message-id=\"101\"><data/></rpc-reply>]]>]]>$"
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue