diff --git a/apps/restconf/restconf_main_native.c b/apps/restconf/restconf_main_native.c index 1fb4207c..271ed560 100644 --- a/apps/restconf/restconf_main_native.c +++ b/apps/restconf/restconf_main_native.c @@ -681,15 +681,12 @@ restconf_clixon_backend(clixon_handle h, * But not if one does uses clixon-restdonf in which case the namespace is * the local (top-level). */ - if ((nsc = xml_nsctx_init(NULL, - CLIXON_RESTCONF_NS - )) == NULL) + if ((nsc = xml_nsctx_init(NULL, CLIXON_RESTCONF_NS)) == NULL) goto done; if ((pw = getpwuid(getuid())) == NULL){ clixon_err(OE_UNIX, errno, "getpwuid"); goto done; } - /* XXX xconfig leaked */ if (clicon_rpc_get_config(h, pw->pw_name, "running", "/restconf", nsc, NULL, &xconfig) < 0) goto done; if ((xerr = xpath_first(xconfig, NULL, "/rpc-error")) != NULL){ diff --git a/test/config.sh.in b/test/config.sh.in index 68eb6acd..6d024012 100755 --- a/test/config.sh.in +++ b/test/config.sh.in @@ -75,7 +75,7 @@ DATASTORE_TOP="config" CLIXON_AUTOCLI_REV="2024-08-01" CLIXON_LIB_REV="2024-11-01" CLIXON_CONFIG_REV="2024-11-01" -CLIXON_RESTCONF_REV="2022-08-01" +CLIXON_RESTCONF_REV="2025-02-01" CLIXON_EXAMPLE_REV="2022-11-01" CLIXON_VERSION="@CLIXON_VERSION@" diff --git a/test/test_restconf_internal_usecases.sh b/test/test_restconf_internal_usecases.sh index 23c0c4f6..262d8e7e 100755 --- a/test/test_restconf_internal_usecases.sh +++ b/test/test_restconf_internal_usecases.sh @@ -367,7 +367,7 @@ if [ $pid1 -eq 0 ]; then err "Pid" 0; fi sleep $DEMSLEEP new "Get restconf config 1" -expectpart "$(curl $CURLOPTS -X GET -H 'Accept: application/yang-data+xml' $RCPROTO://localhost/restconf/data/clixon-restconf:restconf?with-defaults=report-all)" 0 "HTTP/$HVER 200" "truenone$RESTCONFDBG$LOGDSTfalsefalsedefault
0.0.0.0
80false
" +expectpart "$(curl $CURLOPTS -X GET -H 'Accept: application/yang-data+xml' $RCPROTO://localhost/restconf/data/clixon-restconf:restconf?with-defaults=report-all)" 0 "HTTP/$HVER 200" "truenone$RESTCONFDBG$LOGDSTfalsefalse0default
0.0.0.0
80false
" # remove it new "Delete server" @@ -464,7 +464,7 @@ if [ $pid1 -eq 0 ]; then err "Pid" 0; fi sleep $DEMSLEEP new "Get restconf config" -expectpart "$(curl $CURLOPTS -X GET -H 'Accept: application/yang-data+xml' $RCPROTO://localhost/restconf/data/clixon-restconf:restconf?with-defaults=report-all)" 0 "HTTP/$HVER 200" "truenone$RESTCONFDBG$LOGDSTfalsefalsedefault
0.0.0.0
80false
default
$INVALIDADDR
8080false
" +expectpart "$(curl $CURLOPTS -X GET -H 'Accept: application/yang-data+xml' $RCPROTO://localhost/restconf/data/clixon-restconf:restconf?with-defaults=report-all)" 0 "HTTP/$HVER 200" "truenone$RESTCONFDBG$LOGDSTfalsefalse0default
0.0.0.0
80false
default
$INVALIDADDR
8080false
" if [ $BE -ne 0 ]; then new "Kill backend" diff --git a/yang/clixon/clixon-restconf@2022-08-01.yang b/yang/clixon/clixon-restconf@2022-08-01.yang index 3800f0e8..cfaf0e17 100644 --- a/yang/clixon/clixon-restconf@2022-08-01.yang +++ b/yang/clixon/clixon-restconf@2022-08-01.yang @@ -232,9 +232,6 @@ module clixon-restconf { On platforms where namespaces are not suppported, 'default' Default value can be changed by RESTCONF_NETNS_DEFAULT"; } - leaf description{ - type string; - } leaf address { type inet:ip-address; description "IP address to bind to"; @@ -243,6 +240,9 @@ module clixon-restconf { type inet:port-number; description "TCP port to bind to"; } + leaf description{ + type string; + } leaf ssl { type boolean; default true; diff --git a/yang/clixon/clixon-restconf@2025-02-01.yang b/yang/clixon/clixon-restconf@2025-02-01.yang index 6b9a4d3f..89e5231c 100644 --- a/yang/clixon/clixon-restconf@2025-02-01.yang +++ b/yang/clixon/clixon-restconf@2025-02-01.yang @@ -25,39 +25,18 @@ module clixon-restconf { 3. Related to (2), options that should not be settable in a datastore should be in clixon-config - ***** BEGIN LICENSE BLOCK ***** - Copyright (C) 2020-2022 Olof Hagsand and Rubicon Communications, LLC(Netgate) - - This file is part of CLIXON - - Licensed under the Apache License, Version 2.0 (the \"License\"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an \"AS IS\" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Alternatively, the contents of this file may be used under the terms of - the GNU General Public License Version 3 or later (the \"GPL\"), - in which case the provisions of the GPL are applicable instead - of those above. If you wish to allow use of your version of this file only - under the terms of the GPL, and not to allow others to - use your version of this file under the terms of Apache License version 2, - indicate your decision by deleting the provisions above and replace them with - the notice and other provisions required by the GPL. If you do not delete - the provisions above, a recipient may use your version of this file under - the terms of any one of the Apache License version 2 or the GPL. - - ***** END LICENSE BLOCK *****"; - + Some of this spec if in-lined from ietf-restconf-server@2022-05-24.yang + "; revision 2025-02-01 { description "Added timeout parameter Released in Clixon 7.4"; } + revision 2022-08-01 { + description + "Added socket/call-home container + Released in Clixon 5.9"; + } revision 2022-03-21 { description "Added feature: @@ -85,7 +64,6 @@ module clixon-restconf { description "Initial release"; } - feature fcgi { description "This feature indicates that the restconf server supports the fast-cgi reverse @@ -113,7 +91,6 @@ module clixon-restconf { 6. Authentication as restconf 7. HTTP/1+2, TLS as restconf"; } - typedef http-auth-type { type enumeration { enum none { @@ -277,11 +254,77 @@ module clixon-restconf { type inet:port-number; description "TCP port to bind to"; } + leaf description{ + type string; + } leaf ssl { type boolean; default true; description "Enable for HTTPS otherwise HTTP protocol"; } + /* Some of this in-lined from ietf-restconf-server@2022-05-24.yang */ + container call-home { + presence + "Identifies that the server has been configured to initiate + call home connections. + If set, address/port refers to destination."; + description + "See RFC 8071 NETCONF Call Home and RESTCONF Call Home"; + container connection-type { + description + "Indicates the RESTCONF server's preference for how the + RESTCONF connection is maintained."; + choice connection-type { + mandatory true; + description + "Selects between available connection types."; + case persistent-connection { + container persistent { + presence + "Indicates that a persistent connection is to be + maintained."; + } + } + case periodic-connection { + container periodic { + presence + "Indicates periodic connects"; + leaf period { + type uint32; /* XXX: note uit16 in std */ + units "seconds"; /* XXX: note minutes in draft */ + default "3600"; /* XXX: same: 60min in draft */ + description + "Duration of time between periodic connections."; + } + leaf idle-timeout { + type uint16; + units "seconds"; + default "120"; // two minutes + description + "Specifies the maximum number of seconds that + the underlying TCP session may remain idle. + A TCP session will be dropped if it is idle + for an interval longer than this number of + seconds. If set to zero, then the server + will never drop a session because it is idle."; + } + } + } + } + } + container reconnect-strategy { + leaf max-attempts { + type uint8 { + range "1..max"; + } + default "3"; + description + "Specifies the number times the RESTCONF server tries + to connect to a specific endpoint before moving on to + the next endpoint in the list (round robin)."; + } + } + } } } container restconf {