#!/bin/bash # Restconf basic functionality # Assume http server setup, such as nginx described in apps/restconf/README.md APPNAME=example # include err() and new() functions and creates $dir . ./lib.sh cfg=$dir/conf.xml fyang=$dir/restconf.yang xml=$dir/xml.xml # example cat < $cfg $cfg /usr/local/share/clixon $fyang false /usr/local/var/$APPNAME/$APPNAME.sock $dir/restconf.pidfile /usr/local/var/$APPNAME /usr/local/lib/xmldb/text.so /usr/local/lib/$APPNAME/clispec /usr/local/lib/$APPNAME/cli $APPNAME EOF # RFC5277 NETCONF Event Notifications cat < $fyang module example { namespace "http://example.com/event/1.0"; prefix ex; organization "Example, Inc."; contact "support at example.com"; description "Example Notification Data Model Module."; revision "2016-07-07" { description "Initial version."; reference "example.com document 2-9976."; } notification event { description "Example notification event."; leaf event-class { type string; description "Event class identifier."; } container reporting-entity { description "Event specific information."; leaf card { type string; description "Line card identifier."; } } leaf severity { type string; description "Event severity description."; } } } EOF # kill old backend (if any) new "kill old backend" sudo clixon_backend -zf $cfg if [ $? -ne 0 ]; then err fi new "start backend -s init -f $cfg -y $fyang" sudo $clixon_backend -s init -f $cfg -y $fyang # -D 1 if [ $? -ne 0 ]; then err fi new "kill old restconf daemon" sudo pkill -u www-data clixon_restconf new "start restconf daemon" sudo start-stop-daemon -S -q -o -b -x /www-data/clixon_restconf -d /www-data -c www-data -- -f $cfg -D 1 sleep 1 # get the stream list using netconf new "netconf event stream discovery RFC5277 Sec 3.2.5" expecteof "$clixon_netconf -qf $cfg -y $fyang" 0 ']]>]]>' 'NETCONFdefault NETCONF event streamfalseCLICONClicon logsfalse]]>]]>' new "netconf event stream discovery RFC8040 Sec 6.2" expecteof "$clixon_netconf -qf $cfg -y $fyang" 0 ']]>]]>' 'NETCONFdefault NETCONF event streamfalseCLICONClicon logsfalse]]>]]>' new "restconf event stream discovery RFC8040 Sec 6.2" expectfn "curl -s -X GET http://localhost/restconf/data/ietf-restconf-monitoring:restconf-state/streams" 0 '{"streams": {"stream": \[{"name": "CLICON","description": "Clicon logs","replay-support": false},{ "name": "NETCONF","description": "default NETCONF event stream","replay-support": false}\]}}' #new "netconf subscription" #expectwait "$clixon_netconf -qf $cfg -y $fyang" "ROUTING]]>]]>" "^]]>]]>Routing notification]]>]]>$" 30 new "Kill restconf daemon" sudo pkill -u www-data clixon_restconf new "Kill backend" # Check if still alive pid=`pgrep clixon_backend` if [ -z "$pid" ]; then err "backend already dead" fi # kill backend sudo clixon_backend -zf $cfg if [ $? -ne 0 ]; then err "kill backend" fi rm -rf $dir