restconf get working alpha

This commit is contained in:
Olof hagsand 2016-08-21 19:12:10 +02:00
parent ef3c98518a
commit 9552aeebbb
6 changed files with 131 additions and 998 deletions

View file

@ -381,7 +381,7 @@ main(int argc, char **argv)
argc -= optind; argc -= optind;
argv += optind; argv += optind;
/* Parse db spec file */ /* Parse yang database spec file */
if (yang_spec_main(h, stdout, 0) < 0) if (yang_spec_main(h, stdout, 0) < 0)
goto done; goto done;

View file

@ -61,7 +61,7 @@
</rpc> </rpc>
*/ */
/* get-config help function /*! get-config help function
* xfilter is a filter expression starting with <filter> * xfilter is a filter expression starting with <filter>
* only <filter type="xpath"/> supported * only <filter type="xpath"/> supported
* needs refactoring: move the lower part (after xfilter) up to get-config or * needs refactoring: move the lower part (after xfilter) up to get-config or
@ -88,7 +88,7 @@
<rpc><get-config><source><candidate/></source><filter/></get-config></rpc>]]>]]> <rpc><get-config><source><candidate/></source><filter/></get-config></rpc>]]>]]>
* filter xpath + select all: * filter xpath + select all:
<rpc><get-config><source><candidate/></source><filter type="xpath" select="/"/></get-config></rpc>]]>]]> <rpc><get-config><source><candidate/></source><filter type="xpath" select="/"/></get-config></rpc>]]>]]>
* filter subnet + config: * filter subtree + config:
<rpc><get-config><source><candidate/></source><filter type="subtree"><configuration><interfaces><interface><ipv4/></interface></interfaces></configuration></filter></get-config></rpc>]]>]]> <rpc><get-config><source><candidate/></source><filter type="subtree"><configuration><interfaces><interface><ipv4/></interface></interfaces></configuration></filter></get-config></rpc>]]>]]>
* filter xpath + select: * filter xpath + select:
<rpc><get-config><source><candidate/></source><filter type="xpath" select="/interfaces/interface/ipv4"/></get-config></rpc>]]>]]> <rpc><get-config><source><candidate/></source><filter type="xpath" select="/interfaces/interface/ipv4"/></get-config></rpc>]]>]]>
@ -158,7 +158,7 @@ netconf_filter_xmldb(clicon_handle h,
"protocol", "protocol",
"error", "error",
NULL, NULL,
"<bad-attribute>select</bad-attribute>"); "<bad-attribute>select</bad-attribute>");
goto done; goto done;
} }
if (xmldb_get(h, source, selector, 0, &xdb, NULL, NULL) < 0){ if (xmldb_get(h, source, selector, 0, &xdb, NULL, NULL) < 0){

View file

@ -1,4 +1,5 @@
Work-in-progress restconf server Work-in-progress restconf server
================================
See draft-ietf-netconf-restconf-13.txt See draft-ietf-netconf-restconf-13.txt
@ -26,7 +27,19 @@ server {
# pass the REST API to FastCGI server # pass the REST API to FastCGI server
location /restconf { location /restconf {
root /usr/share/nginx/html/restconf; root /usr/share/nginx/html/restconf;
fastcgi_pass unix:/www-data/fastcgi_api.sock; fastcgi_pass unix:/www-data/clicon_restconf.sock;
include fastcgi_params; include fastcgi_params;
} }
} }
Debugging
---------
Start the fastcgi programs with debug flag:
sudo su -c "/www-data/clixon_restconf -D" -s /bin/sh www-data
Look at syslog:
tail -f /var/log/syslog | grep clixon_restconf
Send command:
curl -G http://127.0.0.1/restconf/data/foo

File diff suppressed because it is too large Load diff

View file

@ -120,6 +120,6 @@ CLICON_XMLDB_DIR localstatedir/APPNAME
# FastCGI unix socket. Should be specified in webserver # FastCGI unix socket. Should be specified in webserver
# Eg in nginx: fastcgi_pass unix:/www-data/clicon_restconf.sock; # Eg in nginx: fastcgi_pass unix:/www-data/clicon_restconf.sock;
CLICON_RESTCONF_PATH "/www-data/clicon_restconf.sock" CLICON_RESTCONF_PATH /www-data/fastcgi_restconf.sock

View file

@ -957,7 +957,10 @@ xmldb_get_local(clicon_handle h,
clicon_err(OE_XML, 0, "dbname NULL"); clicon_err(OE_XML, 0, "dbname NULL");
goto done; goto done;
} }
yspec = clicon_dbspec_yang(h); if ((yspec = clicon_dbspec_yang(h)) == NULL){
clicon_err(OE_YANG, ENOENT, "No yang spec");
goto done;
}
if (vector){ if (vector){
if (xmldb_get_vec(dbname, xpath, yspec, xtop, xvec, xlen) < 0) if (xmldb_get_vec(dbname, xpath, yspec, xtop, xvec, xlen) < 0)
goto done; goto done;
@ -989,7 +992,7 @@ xmldb_get_local(clicon_handle h,
* cxobj *xt; * cxobj *xt;
* cxobj **xvec; * cxobj **xvec;
* size_t xlen; * size_t xlen;
* yang_spec *yspec = clicon_dbspec_yang(h); *
* if (xmldb_get("running", "/interfaces/interface[name="eth"]", * if (xmldb_get("running", "/interfaces/interface[name="eth"]",
* 1, &xt, &xvec, &xlen) < 0) * 1, &xt, &xvec, &xlen) < 0)
* err; * err;
@ -1011,11 +1014,13 @@ xmldb_get(clicon_handle h,
cxobj ***xvec, cxobj ***xvec,
size_t *xlen) size_t *xlen)
{ {
assert(xpath); int retval = -1;
if (clicon_xmldb_rpc(h)) if (clicon_xmldb_rpc(h))
return xmldb_get_rpc(h, db, xpath, vector, xtop, xvec, xlen); retval = xmldb_get_rpc(h, db, xpath, vector, xtop, xvec, xlen);
else else
return xmldb_get_local(h, db, xpath, vector, xtop, xvec, xlen); retval = xmldb_get_local(h, db, xpath, vector, xtop, xvec, xlen);
return retval;
} }
/*! Get value of the "operation" attribute and change op if given /*! Get value of the "operation" attribute and change op if given