Merge pull request #6826 from neheb/patch-22
authorHannu Nyman <hannu.nyman@iki.fi>
Sun, 28 Oct 2018 12:32:08 +0000 (14:32 +0200)
committerGitHub <noreply@github.com>
Sun, 28 Oct 2018 12:32:08 +0000 (14:32 +0200)
cyrus-sasl: Update to 2.1.27-rc8

475 files changed:
.circleci/Dockerfile [new file with mode: 0644]
.circleci/README [new file with mode: 0644]
.circleci/config.yml [new file with mode: 0644]
CONTRIBUTING.md
README.md
admin/muninlite/Makefile
admin/muninlite/patches/240-fix-irqstats.patch [new file with mode: 0644]
admin/sudo/Makefile
admin/syslog-ng/Makefile
admin/syslog-ng/files/syslog-ng.conf
admin/syslog-ng/patches/001-fix-compat-getent-musl.patch [new file with mode: 0644]
admin/syslog-ng/patches/001-fix-secret-storage.patch [deleted file]
admin/zabbix/Makefile
admin/zabbix/files/network
admin/zabbix/files/wifi
admin/zabbix/files/zabbix-network-ubus-acl.json [new file with mode: 0644]
admin/zabbix/files/zabbix-wifi-ubus-acl.json [new file with mode: 0644]
admin/zabbix/patches/010-change-agentd-config.patch
admin/zabbix/patches/100-musl-compat.patch
admin/zabbix/patches/110-reproducible-builds.patch
devel/patch/Makefile
devel/patch/patches/010-CVE-2018-6951.patch [new file with mode: 0644]
devel/patch/patches/020-CVE-2018-1000156.patch [new file with mode: 0644]
devel/patch/patches/030-CVE-2018-6952.patch [new file with mode: 0644]
kernel/exfat-nofuse/Makefile
kernel/pfring/Makefile [new file with mode: 0644]
lang/jamvm/Makefile
lang/jamvm/patches/001-Use-fenv.h-instead-of-fpu_control.h.patch [new file with mode: 0644]
lang/lua-lsqlite3/Makefile
lang/node-mozilla-iot-gateway/Config.in [new file with mode: 0644]
lang/node-mozilla-iot-gateway/Makefile
lang/node-mozilla-iot-gateway/files/mozilla-iot-gateway.init
lang/perl-text-csv_xs/Makefile
lang/perl/Makefile
lang/perl/patches/010-musl-compat.patch
lang/perl/perlmod.mk
lang/php7/Makefile
lang/python/django-constance/Makefile
lang/python/django-picklefield/Makefile
lang/python/django-postoffice/Makefile
lang/python/django-restframework/Makefile
lang/python/django-statici18n/Makefile
lang/python/django/Makefile
lang/python/flup/Makefile
lang/python/gunicorn/Makefile
lang/python/jdcal/Makefile
lang/python/micropython-lib/Makefile
lang/python/micropython/Makefile
lang/python/micropython/patches/000-Makefile-no-errors [deleted file]
lang/python/micropython/patches/000-Makefile-no-errors.patch [new file with mode: 0644]
lang/python/micropython/patches/001-all-unix [deleted file]
lang/python/openpyxl/Makefile
lang/python/python-certifi/Makefile
lang/python/python-crypto/Makefile
lang/python/python-crypto/patches/100-CVE-2013-7459.patch [new file with mode: 0644]
lang/python/python-crypto/patches/101-CVE-2018-6594.patch [new file with mode: 0644]
lang/python/python-cryptography/Makefile
lang/python/python-dateutil/Makefile
lang/python/python-evdev/Makefile
lang/python/python-lxml/Makefile
lang/python/python-mysql/Makefile
lang/python/python-pcapy/Makefile
lang/python/python-psycopg2/Makefile
lang/python/python-pyasn1-modules/Makefile
lang/python/python-requests/Makefile
lang/python/python-urllib3/Makefile
lang/python/python-yaml/Makefile
lang/python/python/Makefile
lang/python/python3/Makefile
lang/python/python3/patches/002-fix-implicit-dh-free-declaration.patch [new file with mode: 0644]
lang/python/pytz/Makefile
lang/python/rcssmin/Makefile
lang/python/simplejson/Makefile
lang/ruby/Makefile
lang/tcl/Makefile
lang/tcl/patches/100-disable_tzdata_and_msgs_install.patch [deleted file]
lang/tcl/patches/200-fix_mips_build.patch [deleted file]
lang/vala/Makefile
libs/alsa-lib/Makefile
libs/apr/Makefile
libs/avahi/Makefile
libs/boost/Makefile
libs/c-ares/Makefile
libs/classpath/Makefile
libs/classpath/patches/020-fix-statement-may-fall-through.patch [new file with mode: 0644]
libs/confuse/Makefile
libs/expat/Makefile
libs/fftw3/Makefile
libs/file/Makefile
libs/flac/Makefile
libs/flac/patches/100-CVE-2017-6888.patch [new file with mode: 0644]
libs/freetype/Makefile
libs/getdns/Makefile
libs/giflib/Makefile
libs/glib2/Makefile
libs/glib2/patches/001-automake-compat.patch
libs/gnutls/Makefile
libs/hwloc/Makefile [new file with mode: 0644]
libs/icu/Makefile
libs/icu/patches/000-dont-cpy-files-from-topdirs.patch
libs/keyutils/Makefile [new file with mode: 0644]
libs/keyutils/patches/03-cifs.patch [new file with mode: 0644]
libs/keyutils/patches/04-cflags.patch [new file with mode: 0644]
libs/ldns/Makefile
libs/ldns/patches/100-CVE-2017-1000231.patch [new file with mode: 0644]
libs/ldns/patches/101-CVE-2017-1000232.patch [new file with mode: 0644]
libs/libcups/Makefile [new file with mode: 0644]
libs/libdmapsharing/Makefile
libs/libdnet/patches/001-compile.patch [deleted file]
libs/libev/Makefile
libs/libfastjson/Makefile
libs/libfmt/Makefile
libs/libftdi1/Makefile
libs/libftdi1/patches/101-use-findSWIG.patch [new file with mode: 0644]
libs/libgabe/Makefile [new file with mode: 0644]
libs/libglog/Makefile
libs/libical/Makefile
libs/libical/patches/001-disable-icu-and-bdb-support.patch [new file with mode: 0644]
libs/libiio/Makefile
libs/libnetconf2/Makefile
libs/libnetconf2/patches/001-fix-pthread-error [new file with mode: 0644]
libs/libp11/Makefile
libs/libp11/patches/001-fix-install.patch
libs/libpbc/Makefile [new file with mode: 0644]
libs/libpfring/Makefile [new file with mode: 0644]
libs/libpfring/patches/0001-fix-cross-compiling.patch [new file with mode: 0644]
libs/libpfring/patches/0002-fix-march-native.patch [new file with mode: 0644]
libs/libpfring/patches/0003-fix-strncpy.patch [new file with mode: 0644]
libs/libpng/Makefile
libs/libpsl/Makefile
libs/libseccomp/Makefile
libs/libseccomp/patches/100-dont-use-linux-prctl.h-with-musl.patch [deleted file]
libs/libsndfile/Makefile
libs/libssh/Makefile
libs/libtalloc/Makefile
libs/libtalloc/patches/100-Remove_libbsd_dependency_check.patch [new file with mode: 0644]
libs/libtirpc/Makefile
libs/libtirpc/patches/002-libtirpc-1.0.4-rc2.patch [deleted file]
libs/libupnp/Makefile
libs/libuvc/Makefile
libs/libuwsc/Makefile [changed mode: 0755->0644]
libs/libv4l/Makefile
libs/libv4l/patches/020-add-missing-includes.patch
libs/libv4l/patches/030-dont-call-getsubopt.patch [deleted file]
libs/libvpx/Makefile
libs/libwebsockets/Makefile
libs/libxml2/Makefile
libs/libxml2/patches/010-CVE-2018-14404.patch [new file with mode: 0644]
libs/libxml2/patches/010-CVE-2018-9251.patch [deleted file]
libs/libxml2/patches/020-CVE-2018-9251.patch [new file with mode: 0644]
libs/libyang/Makefile
libs/opus/Makefile
libs/p11-kit/Makefile
libs/protobuf-c/Makefile
libs/sbc/Makefile
libs/sqlite3/Makefile
libs/tdb/Makefile
libs/tdb/patches/100-Remove_libbsd_dependency_check.patch [new file with mode: 0644]
libs/tiff/Makefile
libs/tiff/patches/027-CVE-2017-17095.patch [new file with mode: 0644]
libs/unixodbc/Makefile
libs/vips/Makefile
libs/xmlrpc-c/Makefile
libs/xmlrpc-c/patches/001-config.mk.in.patch
libs/xmlrpc-c/patches/002-automake-compat.patch
mail/clamsmtp/Makefile
mail/clamsmtp/patches/010-fix-build.patch [new file with mode: 0644]
mail/dovecot/Makefile
mail/dovecot/patches/050-fix-dovecot-config-for-cross-compile.patch [new file with mode: 0644]
mail/emailrelay/Makefile
mail/emailrelay/files/emailrelay.config
mail/emailrelay/files/emailrelay.init
mail/mailman/Makefile
mail/mailman/patches/100-postfix.patch
mail/mailman/patches/200-nohostdnspython.patch
mail/mailman/patches/300-targetpython.patch
mail/mailman/patches/400-modules.patch
mail/msmtp/Makefile
mail/mutt/Makefile
mail/pigeonhole/Makefile
mail/postfix/Makefile
mail/postfix/files/postfix.init
mail/sendmail/Makefile
mail/sendmail/files/OpenWrt
multimedia/ffmpeg/Makefile
multimedia/grilo/Makefile
multimedia/gst1-libav/Makefile
multimedia/gst1-plugins-bad/Makefile
multimedia/gst1-plugins-base/Makefile
multimedia/gst1-plugins-good/Makefile
multimedia/gst1-plugins-ugly/Makefile
multimedia/gstreamer1/Makefile
multimedia/motion/Makefile
multimedia/motion/patches/010-Initialize-the-thread-at-start-of-main.patch [new file with mode: 0644]
multimedia/motion/patches/100-musl-compat.patch [deleted file]
multimedia/xupnpd/Makefile
net/Netopeer2/Config_keystored.in [new file with mode: 0644]
net/Netopeer2/Makefile [new file with mode: 0644]
net/Netopeer2/files/netopeer2-keystored-keygen.default [new file with mode: 0644]
net/Netopeer2/files/netopeer2-keystored.default [new file with mode: 0644]
net/Netopeer2/files/netopeer2-server.default [new file with mode: 0644]
net/Netopeer2/files/netopeer2-server.init [new file with mode: 0644]
net/Netopeer2/files/stock_config.xml [new file with mode: 0644]
net/Netopeer2/patches/001-fix-for-cmake-build [new file with mode: 0644]
net/Netopeer2/patches/002-fix-keystored-cross-compile [new file with mode: 0644]
net/acme/Makefile
net/acme/files/acme-cbi.lua
net/acme/files/acme.config
net/acme/files/run.sh
net/adblock/Makefile
net/adblock/files/README.md
net/adblock/files/adblock.conf
net/adblock/files/adblock.init
net/adblock/files/adblock.notify
net/adblock/files/adblock.sh
net/aria2/files/aria2.init
net/ariang/Makefile
net/ariang/files/80_ariang-nginx-support [new file with mode: 0644]
net/ariang/files/ariang.conf [new file with mode: 0644]
net/chrony/Makefile
net/chrony/files/chronyd.init
net/chrony/patches/002-undefined_MIN.patch [new file with mode: 0644]
net/clamav/Makefile
net/coova-chilli/Makefile
net/cshark/Makefile
net/darkstat/Makefile
net/ddns-scripts/Makefile
net/ddns-scripts/files/dynamic_dns_functions.sh
net/ddns-scripts/files/update_route53_v1.sh
net/dmapd/Makefile
net/esniper/Makefile
net/fwknop/Makefile
net/geth/Makefile
net/git/Makefile
net/git/patches/200-imapsend_without_curl.patch
net/gnunet/Makefile
net/gnunet/files/gnunet-gns-flat.defaults
net/gnurl/Makefile
net/haproxy/Makefile
net/haproxy/get-latest-patches.sh
net/https-dns-proxy/Makefile
net/https-dns-proxy/files/https_dns_proxy.config
net/https-dns-proxy/files/https_dns_proxy.init
net/i2pd/Makefile
net/ipvsadm/Makefile [new file with mode: 0644]
net/ipvsadm/patches/001-Makefile.patch [new file with mode: 0644]
net/ipvsadm/patches/002-save-restore.patch [new file with mode: 0644]
net/jool/Makefile
net/jool/patches/010-Add-support-for-kernel-4.17.patch [new file with mode: 0644]
net/jool/patches/020-packet-rename-offset_to_ptr-to-skb_offset_to_ptr-to-.patch [new file with mode: 0644]
net/kadnode/Makefile
net/keepalived/Makefile
net/keepalived/patches/0001-Include-stdbool.h-in-process.c.patch [new file with mode: 0644]
net/knot/Makefile
net/knot/patches/01_zscanner_tests.patch
net/knot/patches/02_knot.conf.patch
net/krb5/Makefile
net/linuxptp/Makefile
net/mdnsresponder/Makefile
net/mdnsresponder/patches/001-cross_compile.patch
net/mdnsresponder/patches/100-linux_fixes.patch
net/mdnsresponder/patches/114-fix_posix_build.patch [deleted file]
net/mdnsresponder/patches/120-reproducible-builds.patch
net/mosquitto/Makefile
net/mtr/Makefile
net/mtr/patches/010-remove-libcap-support.patch [deleted file]
net/mtr/patches/020-Sami-Kerola-prevent-MTR-reporting-unknown-revision.patch [deleted file]
net/mwan3/Makefile
net/mwan3/files/etc/config/mwan3
net/mwan3/files/etc/hotplug.d/iface/13-mwan3 [new file with mode: 0644]
net/mwan3/files/etc/hotplug.d/iface/15-mwan3
net/mwan3/files/etc/hotplug.d/iface/16-mwan3 [new file with mode: 0644]
net/mwan3/files/etc/init.d/mwan3
net/mwan3/files/lib/mwan3/mwan3.sh
net/mwan3/files/usr/libexec/rpcd/mwan3
net/mwan3/files/usr/sbin/mwan3
net/mwan3/files/usr/sbin/mwan3rtmon [new file with mode: 0755]
net/mwan3/files/usr/sbin/mwan3track
net/net-snmp/Makefile
net/net-snmp/patches/000-cross-compile.patch
net/net-snmp/patches/100-debian-statistics.patch
net/net-snmp/patches/110-debian-makefiles.patch
net/net-snmp/patches/160-no_ldconfig.patch
net/net-snmp/patches/170-ldflags.patch
net/netopeer2/Config_keystored.in [deleted file]
net/netopeer2/Makefile [deleted file]
net/netopeer2/files/netopeer2-keystored-keygen.default [deleted file]
net/netopeer2/files/netopeer2-keystored.default [deleted file]
net/netopeer2/files/netopeer2-server.default [deleted file]
net/netopeer2/files/netopeer2-server.init [deleted file]
net/netopeer2/files/stock_config.xml [deleted file]
net/netopeer2/patches/001-fix-for-cmake-build [deleted file]
net/nfs-kernel-server/Config.in [new file with mode: 0644]
net/nfs-kernel-server/Makefile
net/nfs-kernel-server/files/nfsd.init
net/nginx/Makefile
net/nlbwmon/files/nlbwmon.init
net/nut/Makefile
net/nut/files/30-libhid-ups.head [new file with mode: 0755]
net/nut/files/30-libhid-ups.tail [new file with mode: 0644]
net/nut/files/nut-cgi.init
net/nut/files/nut-monitor.init
net/nut/files/nut-server.init
net/nut/files/nut_cgi
net/nut/files/nut_monitor
net/nut/files/nut_server
net/nut/files/nutshutdown [new file with mode: 0755]
net/ola/Makefile
net/ola/patches/002-remove-visibility-inlines-hidden-flag.patch
net/openssh/Makefile
net/openssh/patches/0001-fix-compilation-with-openssl-built-without-ECC.patch [new file with mode: 0644]
net/openssh/patches/0002-Fix-OPENSSL_init_crypto-call-for-openssl-1.1.patch [new file with mode: 0644]
net/openssh/patches/100-dscp-qos.patch [deleted file]
net/openvswitch/Makefile
net/openvswitch/README.md
net/openvswitch/files/openvswitch.init
net/openvswitch/files/ovs-ctl-wrapper
net/openvswitch/patches/0100-netdev-linux-Use-unsigned-int-for-ifi_flags.patch
net/openvswitch/patches/0101-netdev-linux-Let-interface-flag-survive-internal-por.patch
net/openvswitch/patches/0102-python-separate-host-target-python-for-cross-compile.patch
net/openvswitch/patches/0103-ovs-ctl-fix-setting-hostname.patch
net/openvswitch/patches/0104-ovs-lib-fix-install_dir.patch
net/openvswitch/patches/0105-build-disable-building-tests.patch [new file with mode: 0644]
net/openvswitch/patches/0105-removed-calls-to-API-deprecated-in-openssl-1.1.patch [deleted file]
net/openvswitch/patches/0106-include-pre-generated-dhparams-c.patch [deleted file]
net/openvswitch/patches/0106-ovs-save-compatible-with-busybox-ip-command.patch [new file with mode: 0644]
net/openvswitch/patches/0107-datapath-use-KARCH-when-building-linux-datapath-modu.patch [new file with mode: 0644]
net/radsecproxy/Makefile
net/radsecproxy/patches/100-fix-debug-tid.patch [deleted file]
net/rsyslog/Makefile
net/safe-search/Makefile [new file with mode: 0644]
net/safe-search/Readme.md [new file with mode: 0644]
net/safe-search/files/hosts/bing.default [new file with mode: 0644]
net/safe-search/files/hosts/google.default [new file with mode: 0644]
net/safe-search/files/hosts/youtube.restrict [new file with mode: 0644]
net/safe-search/files/hosts/youtube.restrictmoderate [new file with mode: 0644]
net/safe-search/files/safe-search-update [new file with mode: 0644]
net/safe-search/files/safe-search.conf [new file with mode: 0644]
net/safe-search/files/safe-search.defaults [new file with mode: 0644]
net/samba4/Config.in
net/samba4/Makefile
net/samba4/files/samba.config
net/samba4/files/samba.init
net/samba4/files/smb.conf.template
net/samba4/patches/103-samba-4.8.5-unbundle-libbsd.patch [new file with mode: 0644]
net/samba4/waf-cross-answers/aarch64.txt
net/samba4/waf-cross-answers/arc.txt
net/samba4/waf-cross-answers/arm.txt
net/samba4/waf-cross-answers/armeb.txt
net/samba4/waf-cross-answers/i386.txt
net/samba4/waf-cross-answers/mips.txt
net/samba4/waf-cross-answers/mips64.txt
net/samba4/waf-cross-answers/mips64el.txt
net/samba4/waf-cross-answers/mipsel.txt
net/samba4/waf-cross-answers/powerpc.txt
net/samba4/waf-cross-answers/x86_64.txt
net/shadowsocks-libev/README.md
net/socat/Makefile
net/spoofer/Makefile [new file with mode: 0644]
net/sqm-scripts/Makefile
net/squid/Config.in
net/squid/Makefile
net/strongswan/Makefile
net/strongswan/patches/101-musl-fixes.patch
net/strongswan/patches/300-include-ipsec-hotplug.patch
net/strongswan/patches/305-minimal_dh_plugin.patch
net/stubby/Makefile
net/stubby/files/README.md
net/stubby/files/stubby.conf [new file with mode: 0644]
net/stubby/files/stubby.init [changed mode: 0644->0755]
net/stubby/files/stubby.yml
net/stunnel/Makefile
net/sysrepo/Makefile
net/sysrepo/files/libsysrepo.default
net/sysrepo/files/sysrepo.init
net/sysrepo/patches/001-add-generated-protobufc-files [new file with mode: 0644]
net/sysrepo/patches/001-protobuf-remove-protoc-command-from-cmake-file [deleted file]
net/sysrepo/patches/002-remove-buildtime-module-install
net/sysrepo/patches/003-missing-time-header [deleted file]
net/sysrepo/patches/004-disable-sysrepod-autostart
net/tinc/Makefile
net/tor/Makefile
net/travelmate/Makefile
net/travelmate/files/README.md
net/travelmate/files/travelmate.init
net/travelmate/files/travelmate.sh
net/umurmur/Makefile
net/unbound/Makefile
net/unbound/files/README.md
net/unbound/files/odhcpd.awk
net/unbound/files/odhcpd.sh
net/unbound/files/unbound.sh
net/unbound/patches/100-example-conf-in.patch
net/unbound/patches/200-openssl-log-err.patch [deleted file]
net/wifidog/Makefile
net/wifidog/patches/010-use-tls-above-1.patch [new file with mode: 0644]
net/wsdd2/Makefile
net/wsdd2/files/wsdd2.init
net/wsdd2/patches/001-add_uuid_boot_id.patch
net/zerotier/Makefile
net/zerotier/files/etc/config/zerotier [new file with mode: 0644]
net/zerotier/files/etc/init.d/zerotier [new file with mode: 0755]
net/zerotier/files/zerotier.config [deleted file]
net/zerotier/files/zerotier.init [deleted file]
sound/espeak/Makefile
sound/espeak/patches/101-Fix_GCC_narrowing_conversion_errors.patch [new file with mode: 0644]
sound/espeak/patches/101-portaudio.patch [deleted file]
sound/forked-daapd/Makefile
sound/mpd/Makefile
sound/pianod/Makefile
sound/portaudio/Makefile
utils/acpica-unix/Makefile
utils/at/Makefile
utils/bandwidthd/Makefile
utils/bluelog/Makefile
utils/bonnie++/Makefile
utils/bonnie++/patches/001-cross_compile_fix.patch
utils/ccid/Makefile
utils/cmdpad/Makefile
utils/collectd/Makefile
utils/collectd/patches/050-backport-modbus-little-endian.patch
utils/collectd/patches/100-rrdtool-add-rrasingle-option.patch
utils/collectd/patches/900-add-iwinfo-plugin.patch
utils/collectd/patches/920-fix-ping-droprate.patch
utils/crelay/Makefile
utils/dbus/Makefile
utils/fio/Makefile
utils/fio/patches/010-Add-Musl-support.patch [new file with mode: 0644]
utils/fish/Makefile [new file with mode: 0644]
utils/fish/patches/001-no-hostname-and-whoami.patch [new file with mode: 0644]
utils/hamlib/Makefile
utils/hdparm/Makefile
utils/hplip/Makefile [new file with mode: 0644]
utils/hplip/files/20-hplip [new file with mode: 0644]
utils/hplip/files/hplib.conf [new file with mode: 0644]
utils/hplip/patches/010-libusb_fix.patch [new file with mode: 0644]
utils/hplip/patches/020-remove_cups_dep_on_scan.patch [new file with mode: 0644]
utils/hplip/patches/030-replace_unsafe_memcpy_with_memmove.patch [new file with mode: 0644]
utils/hplip/patches/040-fix_bool.patch [new file with mode: 0644]
utils/hplip/patches/050-fix-glibcisms.patch [new file with mode: 0644]
utils/less/Makefile
utils/lsof/Makefile
utils/lsof/patches/003-lsof_selinux.patch
utils/lsof/patches/004-lsof_ccv.patch
utils/mariadb/Makefile
utils/mariadb/patches/100-fix_hostname.patch
utils/mc/Config.in
utils/mc/Makefile
utils/nano/Makefile
utils/nano/patches/001-upstream-fix-for-3.1-tiny-compilation.patch [new file with mode: 0644]
utils/oath-toolkit/Makefile
utils/oath-toolkit/patches/oath-toolkit-2.6.2-build-fix.patch [new file with mode: 0644]
utils/picocom/Makefile
utils/picocom/patches/020-fix-compile-x86.patch [new file with mode: 0644]
utils/procps-ng/Makefile
utils/procps-ng/patches/100-no-tests-docs.patch
utils/rtty/Makefile [changed mode: 0755->0644]
utils/rtty/files/rtty.config
utils/rtty/files/rtty.init
utils/sane-backends/Makefile
utils/setserial/Makefile
utils/setserial/patches/010-no-docs.patch [new file with mode: 0644]
utils/shadow/Makefile
utils/shadow/patches/002-disable-ruser-lookup.patch
utils/shadow/patches/003-Check-size-of-uid_t-and-gid_t-using-AC_CHECK_SIZEOF.patch [deleted file]
utils/shadow/patches/004-fix-su-controoling-term.patch
utils/ttyd/Makefile
utils/vim/Makefile
utils/vim/patches/001-support-defining-compilation-date-in-SOURCE_DATE_EPOCH.patch
utils/vim/patches/002-remove_helptags_generation.patch
utils/vim/scripts/uname [new file with mode: 0755]
utils/yara/Makefile
utils/yunbridge/Makefile
utils/zoneinfo/Makefile
utils/zsh/Makefile

diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile
new file mode 100644 (file)
index 0000000..8862642
--- /dev/null
@@ -0,0 +1,25 @@
+FROM debian:9
+
+RUN apt update && apt install -y \
+build-essential \
+jq \
+gawk \
+gettext \
+git \
+libncurses5-dev \
+libssl-dev \
+subversion \
+zlib1g-dev \
+&& rm -rf /var/lib/apt/lists/*
+
+# LEDE Build System (LEDE GnuPG key for unattended build jobs)
+RUN curl 'https://git.openwrt.org/?p=keyring.git;a=blob_plain;f=gpg/626471F1.asc' | gpg --import \
+ && echo '54CC74307A2C6DC9CE618269CD84BCED626471F1:6:' | gpg --import-ownertrust
+
+# LEDE Release Builder (17.01 "Reboot" Signing Key)
+RUN curl 'https://git.openwrt.org/?p=keyring.git;a=blob_plain;f=gpg/D52BBB6B.asc' | gpg --import \
+ && echo 'B09BE781AE8A0CD4702FDCD3833C6010D52BBB6B:6:' | gpg --import-ownertrust
+
+# OpenWrt Release Builder (18.06 Signing Key)
+RUN curl 'https://git.openwrt.org/?p=keyring.git;a=blob_plain;f=gpg/17E1CE16.asc' | gpg --import \
+ && echo '6768C55E79B032D77A28DA5F0F20257417E1CE16:6:' | gpg --import-ownertrust
diff --git a/.circleci/README b/.circleci/README
new file mode 100644 (file)
index 0000000..3bd1011
--- /dev/null
@@ -0,0 +1,6 @@
+# Build/update the docker image
+
+docker pull debian:9
+docker build --rm .
+docker tag <IMAGE ID> docker.io/champtar/openwrtpackagesci:latest
+docker push docker.io/champtar/openwrtpackagesci:latest
diff --git a/.circleci/config.yml b/.circleci/config.yml
new file mode 100644 (file)
index 0000000..853a8c7
--- /dev/null
@@ -0,0 +1,61 @@
+version: 2.0
+jobs:
+  build:
+    docker:
+      - image: champtar/openwrtpackagesci@sha256:ba41678f7bd9dea5f1caef9594167588c306caf08bc2f90e779a91e57a9fc7bd
+    environment:
+      - SDK_BASE_URL: "https://downloads.lede-project.org/snapshots/targets/ar71xx/generic"
+      - SDK_FILE: "openwrt-sdk-ar71xx-generic_gcc-7.3.0_musl.Linux-x86_64.tar.xz"
+    branches:
+      only: /pull.*/
+    steps:
+      - run:
+          name: Download the SDK
+          working_directory: ~/sdk
+          command: |
+             curl "$SDK_BASE_URL/sha256sums" -sS -o sha256sums
+             curl "$SDK_BASE_URL/sha256sums.asc" -sS -o sha256sums.asc
+             gpg --with-fingerprint --verify sha256sums.asc sha256sums
+             curl "$SDK_BASE_URL/$SDK_FILE" -sS -o "$SDK_FILE"
+             sha256sum -c --ignore-missing sha256sums
+
+      - checkout:
+          path: ~/openwrt_packages
+
+      - run:
+          name: Prepare build_dir
+          working_directory: ~/build_dir
+          command: |
+             tar Jxf ~/sdk/$SDK_FILE --strip=1
+             cat > feeds.conf <<EOF
+             src-git base https://github.com/lede-project/source.git
+             src-link packages $HOME/openwrt_packages
+             src-git luci https://github.com/openwrt/luci.git
+             EOF
+             cat feeds.conf
+             # enable BUILD_LOG
+             sed -i '1s/^/config BUILD_LOG\n\tbool\n\tdefault y\n\n/' Config-build.in
+             ./scripts/feeds update -a > /dev/null
+             ./scripts/feeds install -a > /dev/null
+             make defconfig > /dev/null
+
+      - run:
+          name: Download & check & compile
+          working_directory: ~/build_dir
+          command: |
+             PKGS=$(cd ~/openwrt_packages; git diff --diff-filter=d --name-only "origin/master" | grep 'Makefile$' | grep -v '/files/' | awk -F/ '{ print $(NF-1) }')
+             echo "Packages: $PKGS"
+             for PKG in $PKGS ; do
+                 make "package/$PKG/download" V=s
+                 make "package/$PKG/check" V=s
+             done
+             for PKG in $PKGS ; do
+                 make "package/$PKG/compile" -j3 V=s
+             done
+
+      - store_artifacts:
+          path: ~/build_dir/logs
+
+      - store_artifacts:
+          path: ~/build_dir/bin
+
index 4cfaef151ffd2c2e0b577649f365b611288f84ab..75d8bc2dc2781aabada91437dc4eacb52343d0b0 100644 (file)
@@ -1,22 +1,34 @@
 # Contributing Guidelines  
-(See <http://wiki.openwrt.org/doc/devel/packages> for overall format and construction)
+Ref: <https://openwrt.org/docs/guide-developer/packages> for overall format and construction
 
 
 ### Basic guidelines
 
 All packages you commit or submit by pull-request should follow these simple guidelines:
-* Package a version which is still maintained by the upstream author.
-* Will be updated regularly to maintained and supported versions.
+
+* Package a version which is still maintained by the upstream author and will be updated regularly with supported versions.
 * Have no dependencies outside the OpenWrt core packages or this repository feed.
 * Have been tested to compile with the correct includes and dependencies. Please also test with "Compile with full language support" found under "General Build Settings" set if language support is relevant to your package.
-* Do NOT use a rolling source file (e.g. foo-latest.tar.gz) or the head of a branch as source for the package since that would create unpredictable builds which change over time.
 * Best of all -- it works as expected!
 
+### Package Sources (archives and repositories)
+
+* PKG_SOURCE should reference the smallest available archive. In order of preference: xz (most compressed), bzip2, gz and zip. As a last resort, downloads from source repositories can be used.
+* PKG_SOURCE_URL should link to an official release archive. Use of HTTPS: is preferred. If a source archive is not available, a locally generated archive fetched using git, svn, cvs or in rare circumstances, hg or bzr.
+* Convenience macros for popular mirrors are defined. Using these macros will make your package downloads more robust by mapping to a list of possible source mirrors for archive availability.
+    - @SF - Sourceforge (downloads.sourceforge.net) with 5 retries due to re-directs
+    - @GITHUB - Github (raw.githubusercontent.com) with 5 retries due to re-directs
+    - @GNU - 8 regional servers 
+    - @GNOME - 8 regional servers
+    - @SAVANNAH - 8 regional servers
+    - @APACHE - 8 regional servers
+    - @KERNEL - Linux kernel archives & mirrors
+* Please *DO NOT* use an archive which changes over time. A version labeled "latest" is not constant each download. Also, using the head of a branch will create unpredictable results which can be different each build.
+
 #### Makefile contents should contain:
 
-* An up-to-date copyright notice. Use OpenWrt if no other present or supply your own.
-* A (PKG_)MAINTAINER definition listing either yourself or another person in the field.
-    (E.g.: PKG_MAINTAINER:= Joe D. Hacker `<jdh@jdhs-email-provider.org`>)
+* Provide an up-to-date Copyright notice or **none**. Copyright should not be assigned to OpenWrt unless you are explicitly requested by or working under contract to OpenWrt. Assigning a Copyright to yourself or organization you represent is acceptable.
+* A (PKG_)MAINTAINER definition listing either yourself and/or another person responsible for this package (E.g.: PKG_MAINTAINER:= Joe D. Hacker `<jdh@jdhs-email-provider.org`>). Listing multiple maintainers is encouraged in order to keep the package active and up-to-date. Leaving this blank will also be accepted, however the review process may not be as quick as one with a maintainer.
 * A PKG_LICENSE tag declaring the main license of the package.
     (E.g.: PKG_LICENSE:=GPL-2.0+) Please use SPDX identifiers if possible (see list at the bottom).
 * An optional PKG_LICENSE_FILES tag including the filenames of the license-files in the source-package.
@@ -24,12 +36,13 @@ All packages you commit or submit by pull-request should follow these simple gui
 * PKG_RELEASE should be initially set to 1 or reset to 1 if the software version is changed. You should increment it if the package itself has changed. For example, modifying a support script, changing configure options like --disable* or --enable* switches, or if you changed something in the package which causes the resulting binaries to be different. Changes like correcting md5sums, changing mirror URLs, adding a maintainer field or updating a comment or copyright year in a Makefile do not require a change to PKG_RELEASE.
 * Avoid reuse of PKG_NAME in call, define and eval lines to improve readability.
 
+
 #### Commits in your pull-requests should:
 
 * Have a useful description prefixed with the package name
     (E.g.: "foopkg: Add libzot dependency")
-* Include Signed-off-by in the comment
-    (See <https://dev.openwrt.org/wiki/SubmittingPatches#a10.Signyourwork>)
+* Include Signed-off-by tag in the commit comments.
+    See: [Sign your work](https://openwrt.org/docs/guide-developer/submittingpatches-tomerge?s[]=sign#sign_your_work)
 
 ### Advice on pull requests:
 
index d908a86abb121e7ad338c357b9f0283a028d48ae..373f74e24eefe6b110b05ee98f5e41c204b7f09d 100644 (file)
--- a/README.md
+++ b/README.md
@@ -4,11 +4,11 @@
 
 This is the OpenWrt "packages"-feed containing community-maintained build scripts, options and patches for applications, modules and libraries used within OpenWrt.
 
-Installation of pre-built packages is handled directly by the **opkg** utility within your running OpenWrt system or by using the [OpenWrt SDK](http://wiki.openwrt.org/doc/howto/obtain.firmware.sdk) on a build system.
+Installation of pre-built packages is handled directly by the **opkg** utility within your running OpenWrt system or by using the [OpenWrt SDK](https://openwrt.org/docs/guide-developer/obtain.firmware.sdk) on a build system.
 
 ## Usage
 
-This repository is intended to be layered on-top of an OpenWrt buildroot. If you do not have an OpenWrt buildroot installed, see the documentation at: [OpenWrt Buildroot â€“ Installation](http://wiki.openwrt.org/doc/howto/buildroot.exigence) on the OpenWrt support site.
+This repository is intended to be layered on-top of an OpenWrt buildroot. If you do not have an OpenWrt buildroot installed, see the documentation at: [OpenWrt Buildroot â€“ Installation](https://openwrt.org/docs/guide-developer/build-system/install-buildsystem) on the OpenWrt support site.
 
 This feed is enabled by default. To install all its package definitions, run:
 ```
index 022da01881a7cf80df807cf0731b33725eaf6185..2d98cf34e8f96cfd04a9e67f12dcd06f93c2382b 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=muninlite
 PKG_VERSION:=1.0.4
-PKG_RELEASE:=8
+PKG_RELEASE:=9
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=@SF/$(PKG_NAME)
diff --git a/admin/muninlite/patches/240-fix-irqstats.patch b/admin/muninlite/patches/240-fix-irqstats.patch
new file mode 100644 (file)
index 0000000..4e2fb23
--- /dev/null
@@ -0,0 +1,10 @@
+--- a/plugins/irqstats 2007-11-30 11:39:08.000000000 +0100
++++ b/plugins/irqstats 2018-08-29 08:20:50.809468406 +0200
+@@ -1,6 +1,6 @@
+ config_irqstats() {
+   echo "graph_title Individual interrupts
+-graph_args --base 1000 -l 0;
++graph_args --base 1000 -l 0
+ graph_vlabel interrupts / \${graph_period}
+ graph_category system"
+   CPUS=$(grep 'CPU[0-9]' /proc/interrupts | wc -w)
index 466d699a684582ea84faa1529e52998d6b74a8a2..55652f81e79b7f09c800676942f3cda9a687c18d 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=sudo
-PKG_VERSION:=1.8.24
+PKG_VERSION:=1.8.25p1
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://www.sudo.ws/dist
-PKG_HASH:=b488557a198ecef30b7ad4011b59a66232dec2364ad956e11d8e17906c225be8
+PKG_HASH:=9dc99c7a7d37a0ab938410995c133e15d6afb970c2c66f9264fe36d20c89195b
 
 PKG_LICENSE:=ISC
 PKG_LICENSE_FILES:=doc/LICENSE
index 219ce03a82a134da8fc44adda31ae5932b53644d..c1990ba3ac09c671fbced929dacbe0cdb4f0df00 100644 (file)
@@ -1,14 +1,14 @@
 include  $(TOPDIR)/rules.mk
 
 PKG_NAME:=syslog-ng
-PKG_VERSION:=3.16.1
-PKG_RELEASE:=1
+PKG_VERSION:=3.17.2
+PKG_RELEASE:=2
 
 PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org>
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://github.com/balabit/syslog-ng/releases/download/$(PKG_NAME)-$(PKG_VERSION)/
-PKG_HASH:=c7ee6f1d5e98d86f191964e580111bfa71081ecbb3275cea035bbba177b73a29
+PKG_HASH:=73601f7ca13c6b534318d5b0648ec1833aa9ca0516d6c3f90085b090d548c50b
 
 PKG_INSTALL:=1
 
@@ -74,4 +74,19 @@ define Package/syslog-ng/install
        $(call libtool_remove_files,$(1))
 endef
 
+define Package/syslog-ng/prerm
+       #!/bin/sh
+       # check if we are on real system
+       if [ -z "$${IPKG_INSTROOT}" ]; then
+               # wish we had pidof unconditionally
+               pid=$(ps | grep syslog | grep -v grep | awk '{ print $$1; }')
+               [ -n "$$pid" ] && /etc/init.d/syslog-ng stop
+               [ "$${PKG_UPGRADE}" != "1" ] && {
+                       echo "Removing rc.d symlink for syslog-ng"
+                       /etc/init.d/syslog-ng disable
+               }
+       fi
+       exit 0
+endef
+
 $(eval $(call BuildPackage,syslog-ng))
index cae24a8484eab6963a509ba16591be4452eeaeb8..c1b36c7dc1c95e547f1b97762b123ea43ea95966 100644 (file)
@@ -1,4 +1,4 @@
-@version:3.9
+@version: 3.17
 
 options {
        chain_hostnames(no);
diff --git a/admin/syslog-ng/patches/001-fix-compat-getent-musl.patch b/admin/syslog-ng/patches/001-fix-compat-getent-musl.patch
new file mode 100644 (file)
index 0000000..5df8263
--- /dev/null
@@ -0,0 +1,446 @@
+diff --git a/configure.ac b/configure.ac
+index 94f950c76..e3bda0599 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -783,6 +783,7 @@ AC_CHECK_FUNCS(strdup              \
+       strcasestr              \
+       memrchr                 \
+       localtime_r             \
++      getprotobynumber_r      \
+       gmtime_r                \
+       strnlen                 \
+       strtok_r)
+diff --git a/lib/compat/CMakeLists.txt b/lib/compat/CMakeLists.txt
+index 4fa05d7e0..95fcb0e0d 100644
+--- a/lib/compat/CMakeLists.txt
++++ b/lib/compat/CMakeLists.txt
+@@ -10,7 +10,8 @@ set(COMPAT_HEADERS
+     compat/openssl_support.h
+     compat/pcre.h
+     compat/getent.h
+-    compat/getent-bb.h
++    compat/getent-sun.h
++    compat/getent-generic.h
+     PARENT_SCOPE)
+ set(COMPAT_SOURCES
+@@ -24,7 +25,8 @@ set(COMPAT_SOURCES
+     compat/strnlen.c
+     compat/time.c
+     compat/openssl_support.c
+-    compat/getent.c
++    compat/getent-sun.c
++    compat/getent-generic.c
+     PARENT_SCOPE)
+ add_test_subdirectory(tests)
+diff --git a/lib/compat/Makefile.am b/lib/compat/Makefile.am
+index e5c1f4e56..8d5010558 100644
+--- a/lib/compat/Makefile.am
++++ b/lib/compat/Makefile.am
+@@ -13,9 +13,10 @@ compatinclude_HEADERS               =       \
+       lib/compat/string.h             \
+       lib/compat/time.h               \
+       lib/compat/openssl_support.h    \
+-      lib/compat/pcre.h       \
+-      lib/compat/getent.h     \
+-      lib/compat/getent-bb.h
++      lib/compat/pcre.h               \
++      lib/compat/getent.h             \
++      lib/compat/getent-sun.h         \
++      lib/compat/getent-generic.h
+ compat_sources                        =       \
+       lib/compat/getutent.c           \
+@@ -28,6 +29,7 @@ compat_sources                       =       \
+       lib/compat/strnlen.c            \
+       lib/compat/time.c               \
+       lib/compat/openssl_support.c    \
+-      lib/compat/getent.c
++      lib/compat/getent-sun.c         \
++      lib/compat/getent-generic.c
+ include lib/compat/tests/Makefile.am
+diff --git a/lib/compat/getent-generic.c b/lib/compat/getent-generic.c
+new file mode 100644
+index 000000000..f75d1cc0a
+--- /dev/null
++++ b/lib/compat/getent-generic.c
+@@ -0,0 +1,150 @@
++/*
++ * Copyright (c) 2017 Balabit
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2.1 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
++ *
++ * As an additional exemption you are allowed to compile & link against the
++ * OpenSSL libraries as published by the OpenSSL project. See the file
++ * COPYING for details.
++ *
++ */
++
++#include "compat/getent-generic.h"
++
++#ifndef SYSLOG_NG_HAVE_GETPROTOBYNUMBER_R
++
++#include <glib.h>
++#include <errno.h>
++
++G_LOCK_DEFINE_STATIC(getproto);
++
++/* this code does not support proto aliases, as we wouldn't be using
++ * them anyway.  Should we ever want to support it, we would need to
++ * suballocate @buf and store all of the aliases in the same character
++ * array.
++ */
++static void
++_extract_protoent_fields(struct protoent *dst, struct protoent *src, char *buf, size_t buflen)
++{
++  g_strlcpy(buf, src->p_name, buflen);
++  dst->p_name = buf;
++  dst->p_aliases = NULL;
++  dst->p_proto = src->p_proto;
++}
++
++int
++_compat_generic__getprotobynumber_r(int proto,
++                                    struct protoent *result_buf, char *buf,
++                                    size_t buflen, struct protoent **result)
++{
++  struct protoent *pe;
++
++  G_LOCK(getproto);
++  pe = getprotobynumber(proto);
++
++  if (pe)
++    {
++      _extract_protoent_fields(result_buf, pe, buf, buflen);
++      *result = result_buf;
++      errno = 0;
++    }
++
++  G_UNLOCK(getproto);
++  return errno;
++}
++
++int
++_compat_generic__getprotobyname_r(const char *name,
++                                  struct protoent *result_buf, char *buf,
++                                  size_t buflen, struct protoent **result)
++{
++  struct protoent *pe;
++
++  G_LOCK(getproto);
++  pe = getprotobyname(name);
++
++  if (pe)
++    {
++      _extract_protoent_fields(result_buf, pe, buf, buflen);
++      *result = result_buf;
++      errno = 0;
++    }
++
++  G_UNLOCK(getproto);
++  return errno;
++}
++
++G_LOCK_DEFINE_STATIC(getserv);
++
++/* this code does not support service aliases or using the s_proto field, as
++ * we wouldn't be using them anyway.  Should we ever want to support it, we
++ * would need to suballocate @buf and store all of the aliases in the same
++ * character array.
++ */
++static void
++_extract_servent_fields(struct servent *dst, struct servent *src, char *buf, size_t buflen)
++{
++  g_strlcpy(buf, src->s_name, buflen);
++  dst->s_name = buf;
++  dst->s_aliases = NULL;
++  dst->s_port = src->s_port;
++  /* we don't support s_proto */
++  dst->s_proto = NULL;
++}
++
++
++int
++_compat_generic__getservbyport_r(int port, const char *proto,
++                                 struct servent *result_buf, char *buf,
++                                 size_t buflen, struct servent **result)
++{
++  struct servent *se;
++
++  G_LOCK(getserv);
++  se = getservbyport(port, proto);
++
++  if (se)
++    {
++      _extract_servent_fields(result_buf, se, buf, buflen);
++      *result = result_buf;
++      errno = 0;
++    }
++
++  G_UNLOCK(getserv);
++  return errno;
++}
++
++int
++_compat_generic__getservbyname_r(const char *name, const char *proto,
++                                 struct servent *result_buf, char *buf,
++                                 size_t buflen, struct servent **result)
++{
++  struct servent *se;
++
++  G_LOCK(getserv);
++  se = getservbyname(name, proto);
++
++  if (se)
++    {
++      _extract_servent_fields(result_buf, se, buf, buflen);
++      *result = result_buf;
++      errno = 0;
++    }
++
++  G_UNLOCK(getserv);
++  return errno;
++}
++
++#endif
+diff --git a/lib/compat/getent-generic.h b/lib/compat/getent-generic.h
+new file mode 100644
+index 000000000..cc95a2646
+--- /dev/null
++++ b/lib/compat/getent-generic.h
+@@ -0,0 +1,54 @@
++/*
++ * Copyright (c) 2017 Balabit
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2.1 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
++ *
++ * As an additional exemption you are allowed to compile & link against the
++ * OpenSSL libraries as published by the OpenSSL project. See the file
++ * COPYING for details.
++ *
++ */
++
++#ifndef COMPAT_GETENT_GENERIC_H_INCLUDED
++#define COMPAT_GETENT_GENERIC_H_INCLUDED
++
++#include "compat/compat.h"
++
++#ifndef SYSLOG_NG_HAVE_GETPROTOBYNUMBER_R
++
++#include <sys/types.h>
++#include <grp.h>
++#include <pwd.h>
++#include <netdb.h>
++
++int _compat_generic__getprotobynumber_r(int proto,
++                                        struct protoent *result_buf, char *buf,
++                                        size_t buflen, struct protoent **result);
++
++int _compat_generic__getprotobyname_r(const char *name,
++                                      struct protoent *result_buf, char *buf,
++                                      size_t buflen, struct protoent **result);
++
++int _compat_generic__getservbyport_r(int port, const char *proto,
++                                     struct servent *result_buf, char *buf,
++                                     size_t buflen, struct servent **result);
++
++int _compat_generic__getservbyname_r(const char *name, const char *proto,
++                                     struct servent *result_buf, char *buf,
++                                     size_t buflen, struct servent **result);
++
++#endif
++
++#endif
+diff --git a/lib/compat/getent.c b/lib/compat/getent-sun.c
+similarity index 63%
+rename from lib/compat/getent.c
+rename to lib/compat/getent-sun.c
+index bb9b5b431..dce676f2f 100644
+--- a/lib/compat/getent.c
++++ b/lib/compat/getent-sun.c
+@@ -21,40 +21,45 @@
+  *
+  */
+-#if defined(sun) || defined(__sun)
++#include "compat/getent-sun.h"
+-#include "compat/getent-bb.h"
++#if defined(sun) || defined(__sun)
+ #include <errno.h>
+-int bb__getprotobynumber_r(int proto,
+-                           struct protoent *result_buf, char *buf,
+-                           size_t buflen, struct protoent **result)
++int
++_compat_sun__getprotobynumber_r(int proto,
++                                struct protoent *result_buf, char *buf,
++                                size_t buflen, struct protoent **result)
+ {
+   *result = getprotobynumber_r(proto, result_buf, buf, buflen);
+   return (*result ? NULL : errno);
+ }
+-int bb__getprotobyname_r(const char *name,
+-                         struct protoent *result_buf, char *buf,
+-                         size_t buflen, struct protoent **result)
++int
++_compat_sun__getprotobyname_r(const char *name,
++                              struct protoent *result_buf, char *buf,
++                              size_t buflen, struct protoent **result)
+ {
+   *result = getprotobyname_r(name, result_buf, buf, buflen);
+   return (*result ? NULL : errno);
+ }
+-int bb__getservbyport_r(int port, const char *proto,
+-                        struct servent *result_buf, char *buf,
+-                        size_t buflen, struct servent **result)
++int
++_compat_sun__getservbyport_r(int port, const char *proto,
++                             struct servent *result_buf, char *buf,
++                             size_t buflen, struct servent **result)
+ {
+   *result =  getservbyport_r(port, proto, result_buf, buf, buflen);
+   return (*result ? NULL : errno);
+ }
+-int bb__getservbyname_r(const char *name, const char *proto,
+-                        struct servent *result_buf, char *buf,
+-                        size_t buflen, struct servent **result)
++int
++_compat_sun__getservbyname_r(const char *name, const char *proto,
++                             struct servent *result_buf, char *buf,
++                             size_t buflen, struct servent **result)
+ {
+   *result =  getservbyname_r(name, proto, result_buf, buf, buflen);
+   return (*result ? NULL : errno);
+ }
++
+ #endif
+diff --git a/lib/compat/getent-bb.h b/lib/compat/getent-sun.h
+similarity index 53%
+rename from lib/compat/getent-bb.h
+rename to lib/compat/getent-sun.h
+index 15aa2f5e5..fc1eccd2c 100644
+--- a/lib/compat/getent-bb.h
++++ b/lib/compat/getent-sun.h
+@@ -21,8 +21,10 @@
+  *
+  */
+-#ifndef GETENT_BB_H_INCLUDED
+-#define GETENT_BB_H_INCLUDED
++#ifndef COMPAT_GETENT_SUN_H_INCLUDED
++#define COMPAT_GETENT_SUN_H_INCLUDED
++
++#include "compat/compat.h"
+ #if defined(sun) || defined(__sun)
+@@ -31,21 +33,21 @@
+ #include <pwd.h>
+ #include <netdb.h>
+-int bb__getprotobynumber_r(int proto,
+-                           struct protoent *result_buf, char *buf,
+-                           size_t buflen, struct protoent **result);
++int _compat_sun__getprotobynumber_r(int proto,
++                                    struct protoent *result_buf, char *buf,
++                                    size_t buflen, struct protoent **result);
+-int bb__getprotobyname_r(const char *name,
+-                         struct protoent *result_buf, char *buf,
+-                         size_t buflen, struct protoent **result);
++int _compat_sun__getprotobyname_r(const char *name,
++                                  struct protoent *result_buf, char *buf,
++                                  size_t buflen, struct protoent **result);
+-int bb__getservbyport_r(int port, const char *proto,
+-                        struct servent *result_buf, char *buf,
+-                        size_t buflen, struct servent **result);
++int _compat_sun__getservbyport_r(int port, const char *proto,
++                                 struct servent *result_buf, char *buf,
++                                 size_t buflen, struct servent **result);
+-int bb__getservbyname_r(const char *name, const char *proto,
+-                        struct servent *result_buf, char *buf,
+-                        size_t buflen, struct servent **result);
++int _compat_sun__getservbyname_r(const char *name, const char *proto,
++                                 struct servent *result_buf, char *buf,
++                                 size_t buflen, struct servent **result);
+ #endif
+diff --git a/lib/compat/getent.h b/lib/compat/getent.h
+index 09a9f73d6..01c3deb6d 100644
+--- a/lib/compat/getent.h
++++ b/lib/compat/getent.h
+@@ -21,22 +21,28 @@
+  *
+  */
+-#ifndef GETENT_COMPAT_H_INCLUDED
+-#define GETENT_COMPAT_H_INCLUDED
++#ifndef COMPAT_GETENT_H_INCLUDED
++#define COMPAT_GETENT_H_INCLUDED
+-#include <sys/types.h>
+-#include <grp.h>
+-#include <pwd.h>
+-#include <netdb.h>
++#include "compat/compat.h"
+-#if defined(sun) || defined(__sun)
++#ifndef SYSLOG_NG_HAVE_GETPROTOBYNUMBER_R
+-#define getprotobynumber_r bb__getprotobynumber_r
+-#define getprotobyname_r bb__getprotobyname_r
+-#define getservbyport_r bb__getservbyport_r
+-#define getservbyname_r bb__getservbyname_r
++#define getprotobynumber_r _compat_generic__getprotobynumber_r
++#define getprotobyname_r _compat_generic__getprotobyname_r
++#define getservbyport_r _compat_generic__getservbyport_r
++#define getservbyname_r _compat_generic__getservbyname_r
+-#include "getent-bb.h"
++#include "getent-generic.h"
+-#endif // Solaris
++#elif defined(sun) || defined(__sun)
++
++#define getprotobynumber_r _compat_sun__getprotobynumber_r
++#define getprotobyname_r _compat_sun__getprotobyname_r
++#define getservbyport_r _compat_sun__getservbyport_r
++#define getservbyname_r _compat_sun__getservbyname_r
++
++#include "getent-sun.h"
++
++#endif
+ #endif
diff --git a/admin/syslog-ng/patches/001-fix-secret-storage.patch b/admin/syslog-ng/patches/001-fix-secret-storage.patch
deleted file mode 100644 (file)
index b50c63f..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-diff -u --recursive syslog-ng-3.16.1-vanilla/configure.ac syslog-ng-3.16.1/configure.ac
---- syslog-ng-3.16.1-vanilla/configure.ac      2018-06-01 06:02:07.000000000 -0400
-+++ syslog-ng-3.16.1/configure.ac      2018-07-15 19:31:30.307354198 -0400
-@@ -793,6 +793,14 @@
- AC_CHECK_FUNCS([inotify_init])
- dnl ***************************************************************************
-+dnl secret-storage headers/libraries
-+dnl ***************************************************************************
-+
-+SECRET_STORAGE_LIBS="\$(top_builddir)/lib/secret-storage/libsecret-storage.la"
-+SECRET_STORAGE_NO_LIBTOOL_LIBS="\$(top_builddir)/lib/eventlog/src/.libs/libsecret-storage.so"
-+SECRET_STORAGE_CFLAGS="-I\$(top_srcdir)/lib/secret-storage"
-+
-+dnl ***************************************************************************
- dnl libevtlog headers/libraries (remove after relicensing libevtlog)
- dnl ***************************************************************************
-@@ -1592,7 +1600,7 @@
-       java_module_path="$moduledir"/java-modules
- fi
--CPPFLAGS="$CPPFLAGS $GLIB_CFLAGS $EVTLOG_CFLAGS $PCRE_CFLAGS $OPENSSL_CFLAGS $LIBNET_CFLAGS $LIBDBI_CFLAGS $IVYKIS_CFLAGS -D_GNU_SOURCE -D_DEFAULT_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
-+CPPFLAGS="$CPPFLAGS $GLIB_CFLAGS $EVTLOG_CFLAGS $SECRET_STORAGE_CFLAGS $PCRE_CFLAGS $OPENSSL_CFLAGS $LIBNET_CFLAGS $LIBDBI_CFLAGS $IVYKIS_CFLAGS -D_GNU_SOURCE -D_DEFAULT_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
- ########################################################
- ## NOTES: on how syslog-ng is linked
-@@ -1640,7 +1648,7 @@
- MODULE_DEPS_LIBS="\$(top_builddir)/lib/libsyslog-ng.la"
- if test "x$linking_mode" = "xdynamic"; then
--      SYSLOGNG_DEPS_LIBS="$LIBS $BASE_LIBS $GLIB_LIBS $EVTLOG_LIBS $RESOLV_LIBS $LIBCAP_LIBS $PCRE_LIBS $REGEX_LIBS $DL_LIBS"
-+      SYSLOGNG_DEPS_LIBS="$LIBS $BASE_LIBS $GLIB_LIBS $EVTLOG_LIBS $SECRET_STORAGE_LIBS $RESOLV_LIBS $LIBCAP_LIBS $PCRE_LIBS $REGEX_LIBS $DL_LIBS"
-       if test "x$with_ivykis" = "xinternal"; then
-               # when using the internal ivykis, we're linking it statically into libsyslog-ng.so
-@@ -1659,8 +1667,8 @@
-       # syslog-ng binary is linked with the default link command (e.g. libtool)
-       SYSLOGNG_LINK='$(LINK)'
- else
--      SYSLOGNG_DEPS_LIBS="$LIBS $BASE_LIBS $RESOLV_LIBS $EVTLOG_NO_LIBTOOL_LIBS $LD_START_STATIC -Wl,${WHOLE_ARCHIVE_OPT} $GLIB_LIBS $PCRE_LIBS $REGEX_LIBS  -Wl,${NO_WHOLE_ARCHIVE_OPT} $IVYKIS_NO_LIBTOOL_LIBS $LD_END_STATIC $LIBCAP_LIBS $DL_LIBS"
--      TOOL_DEPS_LIBS="$LIBS $BASE_LIBS $GLIB_LIBS $EVTLOG_LIBS $RESOLV_LIBS $LIBCAP_LIBS $PCRE_LIBS $REGEX_LIBS $IVYKIS_LIBS $DL_LIBS"
-+      SYSLOGNG_DEPS_LIBS="$LIBS $BASE_LIBS $RESOLV_LIBS $EVTLOG_NO_LIBTOOL_LIBS $SECRET_STORAGE_NO_LIBTOOL_LIBS $LD_START_STATIC -Wl,${WHOLE_ARCHIVE_OPT} $GLIB_LIBS $PCRE_LIBS $REGEX_LIBS  -Wl,${NO_WHOLE_ARCHIVE_OPT} $IVYKIS_NO_LIBTOOL_LIBS $LD_END_STATIC $LIBCAP_LIBS $DL_LIBS"
-+      TOOL_DEPS_LIBS="$LIBS $BASE_LIBS $GLIB_LIBS $EVTLOG_LIBS $SECRET_STORAGE_LIBS $RESOLV_LIBS $LIBCAP_LIBS $PCRE_LIBS $REGEX_LIBS $IVYKIS_LIBS $DL_LIBS"
-       CORE_DEPS_LIBS=""
-       # bypass libtool in case we want to do mixed linking because it
-Only in syslog-ng-3.16.1-vanilla/: syslog-ng-3.16.1
index e28e48d058db507847bafd53f667821719467dd0..7345003e552dfbcfa3ea73369d9999cc7e666a77 100644 (file)
@@ -8,32 +8,74 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=zabbix
-PKG_VERSION:=3.4.10
-PKG_RELEASE:=1
+PKG_VERSION:=3.4.14
+PKG_RELEASE:=5
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_HASH:=cdee0fd44e11ae214b2cc252974da22f3627c326ea2c61a0315af95165c52d1b
+PKG_HASH:=7443873cc970672d3c884230d3aeb082f2d8afcc2b757506c2d684ffdd12d77e
 PKG_SOURCE_URL:=@SF/zabbix
 
 PKG_LICENSE:=GPL-2.0
 PKG_LICENSE_FILES:=COPYING
+PKG_CPE_ID:=cpe:/a:zabbix:zabbix
 
 PKG_INSTALL:=1
 
 PKG_FIXUP:=autoreconf
 
+PKG_CONFIG_DEPENDS:= \
+  CONFIG_ZABBIX_GNUTLS \
+  CONFIG_ZABBIX_OPENSSL \
+  CONFIG_ZABBIX_MYSQL \
+  CONFIG_ZABBIX_POSTGRESQL
+
 include $(INCLUDE_DIR)/package.mk
 include $(INCLUDE_DIR)/nls.mk
 
+define Package/zabbix-agentd/config
+comment "SSL support"
+
+choice
+        prompt "Selected SSL library"
+        default ZABBIX_NOSSL
+
+        config ZABBIX_OPENSSL
+                bool "OpenSSL"
+
+        config ZABBIX_GNUTLS
+                bool "GnuTLS"
+
+        config ZABBIX_NOSSL
+                bool "No SSL support"
+
+endchoice
+endef
+
+define Package/zabbix-server/config
+comment "Database Software"
+
+choice
+        prompt "Selected Database Software"
+        default ZABBIX_POSTGRESQL
+
+        config ZABBIX_MYSQL
+                bool "MySQL/MariaDB"
+
+        config ZABBIX_POSTGRESQL
+                bool "PostgreSQL"
+
+endchoice
+endef
+
 define Package/zabbix/Default
   SECTION:=admin
   CATEGORY:=Administration
   TITLE:=Zabbix
-  URL:=http://www.zabbix.com/
+  URL:=https://www.zabbix.com/
   SUBMENU:=zabbix
   MAINTAINER:=Etienne CHAMPETIER <champetier.etienne@gmail.com>
   USERID:=zabbix=53:zabbix=53
-  DEPENDS += $(ICONV_DEPENDS) +libpcre
+  DEPENDS += $(ICONV_DEPENDS) +libpcre +ZABBIX_GNUTLS:libgnutls +ZABBIX_OPENSSL:libopenssl
 endef
 
 define Package/zabbix-agentd
@@ -50,13 +92,13 @@ endef
 define Package/zabbix-extra-network
   $(call Package/zabbix/Default)
   TITLE+= discovery/userparameters for network
-  DEPENDS = +zabbix-agentd +libuci-lua +lua
+  DEPENDS = +zabbix-agentd +libubus-lua +lua
 endef
 
 define Package/zabbix-extra-wifi
   $(call Package/zabbix/Default)
   TITLE+= discovery/userparameters for wifi
-  DEPENDS = +zabbix-agentd +libiwinfo-lua +libuci-lua +lua
+  DEPENDS = +zabbix-agentd +libiwinfo-lua +libubus-lua +lua
 endef
 
 define Package/zabbix-sender
@@ -72,13 +114,13 @@ endef
 define Package/zabbix-server
   $(call Package/zabbix/Default)
   TITLE+= server
-  DEPENDS += +pgsql-cli +libevent2
+  DEPENDS += +ZABBIX_POSTGRESQL:libpq +ZABBIX_MYSQL:libmariadbclient +libevent2
 endef
 
 define Package/zabbix-proxy
   $(call Package/zabbix/Default)
   TITLE+= proxy
-  DEPENDS += +pgsql-cli
+  DEPENDS += +ZABBIX_POSTGRESQL:libpq +ZABBIX_MYSQL:libmariadbclient
 endef
 
 define Package/zabbix-extra-mac80211/description
@@ -105,9 +147,12 @@ CONFIGURE_ARGS+= \
        --enable-proxy \
        $(call autoconf_bool,CONFIG_IPV6,ipv6) \
        --disable-java \
-       --with-postgresql \
+       $(if $(CONFIG_ZABBIX_MYSQL),--with-mysql) \
+       $(if $(CONFIG_ZABBIX_POSTGRESQL),--with-postgresql) \
        --with-libevent=$(STAGING_DIR)/usr/include/libevent \
-       --with-libpcre=$(STAGING_DIR)/usr/include
+       --with-libpcre=$(STAGING_DIR)/usr/include \
+       $(if $(CONFIG_ZABBIX_GNUTLS),--with-gnutls="$(STAGING_DIR)/usr") \
+       $(if $(CONFIG_ZABBIX_OPENSSL),--with-openssl="$(STAGING_DIR)/usr")
 
 MAKE_FLAGS += ARCH="linux"
 
@@ -203,10 +248,28 @@ endef
 
 define Package/zabbix-extra-network/install
        $(call Package/zabbix/install/zabbix.conf.d,$(1),network)
+       $(INSTALL_DIR) $(1)/usr/share/acl.d
+       $(INSTALL_DATA) ./files/zabbix-network-ubus-acl.json $(1)/usr/share/acl.d/zabbix-network.json
+endef
+
+define Package/zabbix-extra-network/postinst
+#!/bin/sh
+if [ -z "$${IPKG_INSTROOT}" ]; then
+       killall -HUP ubusd
+fi
 endef
 
 define Package/zabbix-extra-wifi/install
        $(call Package/zabbix/install/zabbix.conf.d,$(1),wifi)
+       $(INSTALL_DIR) $(1)/usr/share/acl.d
+       $(INSTALL_DATA) ./files/zabbix-wifi-ubus-acl.json $(1)/usr/share/acl.d/zabbix-wifi.json
+endef
+
+define Package/zabbix-extra-wifi/postinst
+#!/bin/sh
+if [ -z "$${IPKG_INSTROOT}" ]; then
+       killall -HUP ubusd
+fi
 endef
 
 define Package/zabbix-sender/install
index b68e2a50549ee0dab5fcada47732ddb528aa44e9..cc01059214a58362dbe2a292a2cb4f13aa438197 100644 (file)
@@ -3,7 +3,4 @@
 # network interface discovery
 # example: {"data":[{"{#IF}":"lo", "{#NET}":"loopback"},{"{#IF}":"br-lan", "{#NET}":"lan"},{"{#IF}":"eth0.1", "{#NET}":"wan"}]}
 #
-UserParameter=netowrt.discovery,lua -l uci -e 'x = uci.cursor(nil, "/var/state");list = "{\"data\":[";x:foreach("network", "interface", function(s) list=list.."{\"{#IF}\":\""..s.ifname.."\", \"{#NET}\":\""..s[".name"].."\"}," end); list=string.gsub(list,",$",""); print(list.."]}")'
-
-
-
+UserParameter=netowrt.discovery,lua -l ubus -e 'u=ubus.connect();list="{\"data\":[";dump=u:call("network.interface", "dump", {});for _, intf in ipairs(dump.interface) do list=list.."{\"{#IF}\":\""..intf.device.."\", \"{#NET}\":\""..intf.interface.."\"},";end;list=string.gsub(list,",$","");print(list.."]}")'
index f03d9b41ebe06be2e9f14fa22a20b1fdb18673e0..e63b18e98caff75181012eabd6b80b7125edc84b 100644 (file)
@@ -2,7 +2,6 @@
 
 # wifi interface discovery
 # example: {"data":[{"{#IF}":"wlan0", "{#MODE}":"ap", "{#SSID}":"Openwrt", "{#NET}":"lan", "{#DEV}":"radio0", "{#ENC}":"psk2+ccmp", "{#TYPE}":"mac80211", "{#HWMODE}":"11ng", "{#CHANNEL}":"11", "{#BSSID}":"xx:xx:xx:xx:xx:xx"}]}
-# ubus call only work as root so you need to run zabbix as root to use wifi.ifdiscovery
 UserParameter=wifi.ifdiscovery, lua -l ubus -l iwinfo -e 'u=ubus.connect();list="{\"data\":[";stat=u:call("network.wireless", "status", {});for dev, dev_table in pairs(stat) do for i, iface in pairs(dev_table["interfaces"]) do c=iface["config"];i=iface["ifname"];t=iwinfo.type(i);iw=iwinfo[t];e = iw.encryption(i);e = e and e.description or "None";n = table.concat(c["network"]," ");list=list.."{\"{#IF}\":\""..i.."\", \"{#MODE}\":\""..iw.mode(i).."\", \"{#SSID}\":\""..c["ssid"].."\", \"{#NET}\":\""..n.."\", \"{#DEV}\":\""..dev.."\", \"{#ENC}\":\""..e.."\", \"{#TYPE}\":\""..t.."\", \"{#HWMODE}\":\"".."?".."\", \"{#CHANNEL}\":\""..iw.channel(i).."\", \"{#BSSID}\":\""..iw.bssid(i).."\"},";end;end;list=string.gsub(list,",$","");print(list.."]}")'
 
 
diff --git a/admin/zabbix/files/zabbix-network-ubus-acl.json b/admin/zabbix/files/zabbix-network-ubus-acl.json
new file mode 100644 (file)
index 0000000..f19f51b
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "user": "zabbix",
+       "access": {
+               "network.interface": {
+                       "methods": [ "dump" ]
+               }
+       }
+}
diff --git a/admin/zabbix/files/zabbix-wifi-ubus-acl.json b/admin/zabbix/files/zabbix-wifi-ubus-acl.json
new file mode 100644 (file)
index 0000000..9d9b093
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "user": "zabbix",
+       "access": {
+               "network.wireless": {
+                       "methods": [ "status" ]
+               }
+       }
+}
index 8b16b28032c7ed68d0ad9603d732ce1f29e8fe81..31134204342571eafa8d6b8104e338ef46431300 100644 (file)
@@ -27,7 +27,7 @@
  ### Option: LogFileSize
  #     Maximum size of log file in MB.
  #     0 - disable automatic log rotation.
-@@ -114,6 +111,7 @@ Server=127.0.0.1
+@@ -116,6 +113,7 @@ Server=127.0.0.1
  # Range: 0-100
  # Default:
  # StartAgents=3
@@ -35,7 +35,7 @@
  
  ##### Active checks related
  
-@@ -129,8 +127,6 @@ Server=127.0.0.1
+@@ -131,8 +129,6 @@ Server=127.0.0.1
  # Default:
  # ServerActive=
  
@@ -44,7 +44,7 @@
  ### Option: Hostname
  #     Unique, case sensitive hostname.
  #     Required for active checks and must match hostname as configured on the server.
-@@ -140,8 +136,6 @@ ServerActive=127.0.0.1
+@@ -142,8 +138,6 @@ ServerActive=127.0.0.1
  # Default:
  # Hostname=
  
@@ -53,7 +53,7 @@
  ### Option: HostnameItem
  #     Item used for generating Hostname if it is undefined. Ignored if Hostname is defined.
  #     Does not support UserParameters or aliases.
-@@ -259,8 +253,8 @@ Hostname=Zabbix server
+@@ -261,8 +255,8 @@ Hostname=Zabbix server
  # Include=
  
  # Include=/usr/local/etc/zabbix_agentd.userparams.conf
index 58278578d8e91ca7659bb304016437e35941e6a3..66762c98bff010c834d43640091c939ef450d2b2 100644 (file)
@@ -9,4 +9,3 @@
    sys/socket.h sys/loadavg.h arpa/inet.h \
    sys/vmmeter.h strings.h vm/vm_param.h \
    sys/time.h kstat.h sys/syscall.h sys/sysmacros.h \
-
index f7d03fa9ab506dae92a887c5921644de6fd6c129..2c223ad1ce158898b88f7c5aa1f3683ed3ee48cc 100644 (file)
@@ -1,8 +1,6 @@
-Index: zabbix-3.2.7/src/libs/zbxcommon/str.c
-===================================================================
---- zabbix-3.2.7.orig/src/libs/zbxcommon/str.c
-+++ zabbix-3.2.7/src/libs/zbxcommon/str.c
-@@ -51,7 +51,7 @@ static const char    help_message_footer[]
+--- a/src/libs/zbxcommon/str.c
++++ b/src/libs/zbxcommon/str.c
+@@ -52,7 +52,7 @@ static const char    help_message_footer[]
  void  version(void)
  {
        printf("%s (Zabbix) %s\n", title_message, ZABBIX_VERSION);
index f08ae8a3c09897fc690e71c6a868a5e7b0f9e3c1..43049def1b519195773cb980aa0a2d477b516063 100644 (file)
@@ -9,13 +9,17 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=patch
 PKG_VERSION:=2.7.6
-PKG_RELEASE:=1
+PKG_RELEASE:=3
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=@GNU/patch
 PKG_HASH:=ac610bda97abe0d9f6b7c963255a11dcb196c25e337c61f94e4778d632f1d8fd
+
 PKG_LICENSE:=GPL-3.0+
 PKG_LICENSE_FILES:=COPYING
+PKG_CPE_ID:=cpe:/a:gnu:patch
+
+PKG_BUILD_PARALLEL:=1
 
 include $(INCLUDE_DIR)/package.mk
 
@@ -23,7 +27,7 @@ define Package/patch
   SECTION:=devel
   CATEGORY:=Development
   TITLE:=patch
-  URL:=http://www.gnu.org/
+  URL:=https://savannah.gnu.org/projects/patch/
   MAINTAINER:=Russell Senior <russell@personaltelco.net>
 endef
 
diff --git a/devel/patch/patches/010-CVE-2018-6951.patch b/devel/patch/patches/010-CVE-2018-6951.patch
new file mode 100644 (file)
index 0000000..19c3ccb
--- /dev/null
@@ -0,0 +1,29 @@
+From 9bf998b5fcbcde1dea0e472dc1538abb97e9012e Mon Sep 17 00:00:00 2001
+From: Andreas Gruenbacher <agruen@gnu.org>
+Date: Mon, 12 Feb 2018 16:48:24 +0100
+Subject: [PATCH] Fix segfault with mangled rename patch
+
+http://savannah.gnu.org/bugs/?53132
+* src/pch.c (intuit_diff_type): Ensure that two filenames are specified
+for renames and copies (fix the existing check).
+---
+ src/pch.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/pch.c b/src/pch.c
+index ff9ed2c..bc6278c 100644
+--- a/src/pch.c
++++ b/src/pch.c
+@@ -974,7 +974,8 @@ intuit_diff_type (bool need_header, mode_t *p_file_type)
+     if ((pch_rename () || pch_copy ())
+       && ! inname
+       && ! ((i == OLD || i == NEW) &&
+-            p_name[! reverse] &&
++            p_name[reverse] && p_name[! reverse] &&
++            name_is_valid (p_name[reverse]) &&
+             name_is_valid (p_name[! reverse])))
+       {
+       say ("Cannot %s file without two valid file names\n", pch_rename () ? "rename" : "copy");
+-- 
+2.19.1
+
diff --git a/devel/patch/patches/020-CVE-2018-1000156.patch b/devel/patch/patches/020-CVE-2018-1000156.patch
new file mode 100644 (file)
index 0000000..f0583c1
--- /dev/null
@@ -0,0 +1,209 @@
+From b56779aed483f0036a32a65e62ab7b5e461b07cc Mon Sep 17 00:00:00 2001
+From: Andreas Gruenbacher <agruen@gnu.org>
+Date: Fri, 6 Apr 2018 12:14:49 +0200
+Subject: [PATCH] Fix arbitrary command execution in ed-style patches
+ (CVE-2018-1000156)
+
+* src/pch.c (do_ed_script): Write ed script to a temporary file instead
+of piping it to ed: this will cause ed to abort on invalid commands
+instead of rejecting them and carrying on.
+* tests/ed-style: New test case.
+* tests/Makefile.am (TESTS): Add test case.
+---
+ src/pch.c         | 89 +++++++++++++++++++++++++++++++++++------------
+ tests/Makefile.am |  1 +
+ tests/ed-style    | 41 ++++++++++++++++++++++
+ 3 files changed, 108 insertions(+), 23 deletions(-)
+ create mode 100644 tests/ed-style
+
+diff --git a/src/pch.c b/src/pch.c
+index bc6278c..4fd5a05 100644
+--- a/src/pch.c
++++ b/src/pch.c
+@@ -33,6 +33,7 @@
+ # include <io.h>
+ #endif
+ #include <safe.h>
++#include <sys/wait.h>
+ #define INITHUNKMAX 125                       /* initial dynamic allocation size */
+@@ -2389,22 +2390,28 @@ do_ed_script (char const *inname, char const *outname,
+     static char const editor_program[] = EDITOR_PROGRAM;
+     file_offset beginning_of_this_line;
+-    FILE *pipefp = 0;
+     size_t chars_read;
++    FILE *tmpfp = 0;
++    char const *tmpname;
++    int tmpfd;
++    pid_t pid;
++
++    if (! dry_run && ! skip_rest_of_patch)
++      {
++      /* Write ed script to a temporary file.  This causes ed to abort on
++         invalid commands such as when line numbers or ranges exceed the
++         number of available lines.  When ed reads from a pipe, it rejects
++         invalid commands and treats the next line as a new command, which
++         can lead to arbitrary command execution.  */
++
++      tmpfd = make_tempfile (&tmpname, 'e', NULL, O_RDWR | O_BINARY, 0);
++      if (tmpfd == -1)
++        pfatal ("Can't create temporary file %s", quotearg (tmpname));
++      tmpfp = fdopen (tmpfd, "w+b");
++      if (! tmpfp)
++        pfatal ("Can't open stream for file %s", quotearg (tmpname));
++      }
+-    if (! dry_run && ! skip_rest_of_patch) {
+-      int exclusive = *outname_needs_removal ? 0 : O_EXCL;
+-      assert (! inerrno);
+-      *outname_needs_removal = true;
+-      copy_file (inname, outname, 0, exclusive, instat.st_mode, true);
+-      sprintf (buf, "%s %s%s", editor_program,
+-               verbosity == VERBOSE ? "" : "- ",
+-               outname);
+-      fflush (stdout);
+-      pipefp = popen(buf, binary_transput ? "wb" : "w");
+-      if (!pipefp)
+-        pfatal ("Can't open pipe to %s", quotearg (buf));
+-    }
+     for (;;) {
+       char ed_command_letter;
+       beginning_of_this_line = file_tell (pfp);
+@@ -2415,14 +2422,14 @@ do_ed_script (char const *inname, char const *outname,
+       }
+       ed_command_letter = get_ed_command_letter (buf);
+       if (ed_command_letter) {
+-          if (pipefp)
+-              if (! fwrite (buf, sizeof *buf, chars_read, pipefp))
++          if (tmpfp)
++              if (! fwrite (buf, sizeof *buf, chars_read, tmpfp))
+                   write_fatal ();
+           if (ed_command_letter != 'd' && ed_command_letter != 's') {
+               p_pass_comments_through = true;
+               while ((chars_read = get_line ()) != 0) {
+-                  if (pipefp)
+-                      if (! fwrite (buf, sizeof *buf, chars_read, pipefp))
++                  if (tmpfp)
++                      if (! fwrite (buf, sizeof *buf, chars_read, tmpfp))
+                           write_fatal ();
+                   if (chars_read == 2  &&  strEQ (buf, ".\n"))
+                       break;
+@@ -2435,13 +2442,49 @@ do_ed_script (char const *inname, char const *outname,
+           break;
+       }
+     }
+-    if (!pipefp)
++    if (!tmpfp)
+       return;
+-    if (fwrite ("w\nq\n", sizeof (char), (size_t) 4, pipefp) == 0
+-      || fflush (pipefp) != 0)
++    if (fwrite ("w\nq\n", sizeof (char), (size_t) 4, tmpfp) == 0
++      || fflush (tmpfp) != 0)
+       write_fatal ();
+-    if (pclose (pipefp) != 0)
+-      fatal ("%s FAILED", editor_program);
++
++    if (lseek (tmpfd, 0, SEEK_SET) == -1)
++      pfatal ("Can't rewind to the beginning of file %s", quotearg (tmpname));
++
++    if (! dry_run && ! skip_rest_of_patch) {
++      int exclusive = *outname_needs_removal ? 0 : O_EXCL;
++      *outname_needs_removal = true;
++      if (inerrno != ENOENT)
++        {
++          *outname_needs_removal = true;
++          copy_file (inname, outname, 0, exclusive, instat.st_mode, true);
++        }
++      sprintf (buf, "%s %s%s", editor_program,
++               verbosity == VERBOSE ? "" : "- ",
++               outname);
++      fflush (stdout);
++
++      pid = fork();
++      if (pid == -1)
++        pfatal ("Can't fork");
++      else if (pid == 0)
++        {
++          dup2 (tmpfd, 0);
++          execl ("/bin/sh", "sh", "-c", buf, (char *) 0);
++          _exit (2);
++        }
++      else
++        {
++          int wstatus;
++          if (waitpid (pid, &wstatus, 0) == -1
++              || ! WIFEXITED (wstatus)
++              || WEXITSTATUS (wstatus) != 0)
++            fatal ("%s FAILED", editor_program);
++        }
++    }
++
++    fclose (tmpfp);
++    safe_unlink (tmpname);
+     if (ofp)
+       {
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index 6b6df63..16f8693 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -32,6 +32,7 @@ TESTS = \
+       crlf-handling \
+       dash-o-append \
+       deep-directories \
++      ed-style \
+       empty-files \
+       false-match \
+       fifo \
+diff --git a/tests/ed-style b/tests/ed-style
+new file mode 100644
+index 0000000..d8c0689
+--- /dev/null
++++ b/tests/ed-style
+@@ -0,0 +1,41 @@
++# Copyright (C) 2018 Free Software Foundation, Inc.
++#
++# Copying and distribution of this file, with or without modification,
++# in any medium, are permitted without royalty provided the copyright
++# notice and this notice are preserved.
++
++. $srcdir/test-lib.sh
++
++require cat
++use_local_patch
++use_tmpdir
++
++# ==============================================================
++
++cat > ed1.diff <<EOF
++0a
++foo
++.
++EOF
++
++check 'patch -e foo -i ed1.diff' <<EOF
++EOF
++
++check 'cat foo' <<EOF
++foo
++EOF
++
++cat > ed2.diff <<EOF
++1337a
++r !echo bar
++,p
++EOF
++
++check 'patch -e foo -i ed2.diff 2> /dev/null || echo "Status: $?"' <<EOF
++?
++Status: 2
++EOF
++
++check 'cat foo' <<EOF
++foo
++EOF
+-- 
+2.19.1
+
diff --git a/devel/patch/patches/030-CVE-2018-6952.patch b/devel/patch/patches/030-CVE-2018-6952.patch
new file mode 100644 (file)
index 0000000..7dc6474
--- /dev/null
@@ -0,0 +1,30 @@
+From 71607715f11c9875a5aaaf3240885c45f79138e9 Mon Sep 17 00:00:00 2001
+From: Andreas Gruenbacher <agruen@gnu.org>
+Date: Fri, 17 Aug 2018 13:35:40 +0200
+Subject: [PATCH] Fix swapping fake lines in pch_swap
+
+* src/pch.c (pch_swap): Fix swapping p_bfake and p_efake when there is a
+blank line in the middle of a context-diff hunk: that empty line stays
+in the middle of the hunk and isn't swapped.
+
+Fixes: https://savannah.gnu.org/bugs/index.php?53133
+---
+ src/pch.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/pch.c b/src/pch.c
+index 4fd5a05..b0dd14d 100644
+--- a/src/pch.c
++++ b/src/pch.c
+@@ -2115,7 +2115,7 @@ pch_swap (void)
+     }
+     if (p_efake >= 0) {                       /* fix non-freeable ptr range */
+       if (p_efake <= i)
+-          n = p_end - i + 1;
++          n = p_end - p_ptrn_lines;
+       else
+           n = -i;
+       p_efake += n;
+-- 
+2.19.1
+
index 46eeb9f95926ca334298c1c5b10ce0f1e46d1d50..e2dfba2b718c5d14119f6004048d5ccccd3cf161 100644 (file)
@@ -13,9 +13,9 @@ PKG_RELEASE:=1
 
 PKG_SOURCE_URL:=https://github.com/dorimanx/exfat-nofuse.git
 PKG_SOURCE_PROTO:=git
-PKG_SOURCE_DATE:=2017-06-20
-PKG_SOURCE_VERSION:=de4c760bc9a05ead83bc3ec6eec6cf1fb106f523
-PKG_MIRROR_HASH:=2aa53a83daf4be46e437842ee67d2e0ea327642cb6b8856a79153b52ec726a57
+PKG_SOURCE_DATE:=2018-04-17
+PKG_SOURCE_VERSION:=01c30ad52625a7261e1b0d874553b6ca7af25966
+PKG_MIRROR_HASH:=47e3b6b8384e4beaa07dc762f4e0cce9a067750cbb4b2fb4ba18d2348038c270
 
 PKG_MAINTAINER:=Yousong Zhou <yszhou4tech@gmail.com>
 PKG_LICENSE:=GPL-2.0
diff --git a/kernel/pfring/Makefile b/kernel/pfring/Makefile
new file mode 100644 (file)
index 0000000..f175475
--- /dev/null
@@ -0,0 +1,63 @@
+#
+# Copyright (C) 2017 Banglang Huang
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+include $(INCLUDE_DIR)/kernel.mk
+
+PKG_NAME:=pf-ring
+PKG_VERSION:=7.2.0
+PKG_RELEASE:=1
+PKG_MAINTAINER:=Banglang Huang <banglang.huang@foxmail.com>
+
+PKG_LICENSE:=GPL-2.0
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://codeload.github.com/ntop/PF_RING/tar.gz/$(PKG_VERSION)?
+PKG_HASH:=5d349ac37a6ece5966bf606a6f131d628b98d88654c2f502d3c4b8bbf6ef9796
+
+PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/PF_RING-$(PKG_VERSION)
+
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+CONFIGURE_PATH:=kernel
+MAKE_PATH:=kernel
+
+define KernelPackage/pf-ring
+  SUBMENU:=Network Support
+  TITLE:=PF_RING Kernel driver
+  FILES:=$(PKG_BUILD_DIR)/kernel/pf_ring.ko
+  AUTOLOAD:=$(call AutoLoad,90,pf_ring,1)
+endef
+
+define KernelPackage/pf-ring/description
+  Kernel module for libpf-ring package
+endef
+
+EXTRA_CFLAGS += \
+       -I$(PKG_BUILD_DIR)/kernel
+
+MAKE_OPTS := \
+       ARCH="$(LINUX_KARCH)" \
+       CROSS_COMPILE="$(TARGET_CROSS)" \
+       SUBDIRS="$(PKG_BUILD_DIR)/kernel" \
+       CFLAGS="$(TARGET_CFLAGS)" \
+       EXTRA_CFLAGS="$(EXTRA_CFLAGS)"
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(1)/usr/include/linux
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/linux/*.h $(1)/usr/include/linux
+endef
+
+define Build/Compile
+       +$(MAKE) -C "$(LINUX_DIR)" \
+               $(MAKE_OPTS) \
+               modules
+endef
+
+$(eval $(call KernelPackage,pf-ring))
index 58a7e69fe9570bad0238247b59fd57b5b9bd40f7..24bb4ad08e8d2b4e1576030ae129596d47ba7e80 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=jamvm
 PKG_VERSION:=2.0.0
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 PKG_LICENSE:=GPL-2.0+
 PKG_MAINTAINER:=Dana H. Myers <k6jq@comcast.net>
 
@@ -30,7 +30,8 @@ define Package/jamvm
   CATEGORY:=Languages
   TITLE:=A compact Java Virtual Machine
   URL:=http://sourceforge.net/projects/jamvm
-  DEPENDS:=+zlib +libpthread +librt +classpath @!avr32
+  DEPENDS:=+zlib +libpthread +librt +classpath \
+         @(i386||i686||x86_64||arm||armeb||mips||mipsel||powerpc||powerpc64) +CONFIG_powerpc64:libffi
 endef
 
 define Package/jamvm/description
diff --git a/lang/jamvm/patches/001-Use-fenv.h-instead-of-fpu_control.h.patch b/lang/jamvm/patches/001-Use-fenv.h-instead-of-fpu_control.h.patch
new file mode 100644 (file)
index 0000000..50f95cd
--- /dev/null
@@ -0,0 +1,86 @@
+From 7152ded5219453c9ff1cd062cecbeaf4d77e4cab Mon Sep 17 00:00:00 2001
+From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+Date: Thu, 26 May 2016 15:05:48 +0200
+Subject: [PATCH] Use <fenv.h> instead of <fpu_control.h>
+
+musl libc (http://musl-libc.org lack the non-standard <fpu_control.h>
+header, which is used in src/os/linux/{i386,x86_64}/init.c files to
+setup the floating point precision. This patch makes it use the
+standard C <fenv.h> header instead.
+
+Original patch at Felix Janda at
+https://sourceforge.net/p/jamvm/patches/6/.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+---
+ src/os/linux/i386/init.c   | 12 ++++++------
+ src/os/linux/x86_64/init.c | 16 ++++++----------
+ 2 files changed, 12 insertions(+), 16 deletions(-)
+
+diff --git a/src/os/linux/i386/init.c b/src/os/linux/i386/init.c
+index d9c6648..94a733e 100644
+--- a/src/os/linux/i386/init.c
++++ b/src/os/linux/i386/init.c
+@@ -19,18 +19,18 @@
+  * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+  */
+-#include <fpu_control.h>
++#include <fenv.h>
+ /* Change floating point precision to double (64-bit) from
+  * the extended (80-bit) Linux default. */
+ void setDoublePrecision() {
+-    fpu_control_t cw;
++    fenv_t fenv;
+-    _FPU_GETCW(cw);
+-    cw &= ~_FPU_EXTENDED;
+-    cw |= _FPU_DOUBLE;
+-    _FPU_SETCW(cw);
++    fegetenv(&fenv);
++    fenv.__control_word &= ~0x300; /* _FPU_EXTENDED */
++    fenv.__control_word |= 0x200; /* _FPU_DOUBLE */
++    fesetenv(&fenv);
+ }
+ void initialisePlatform() {
+diff --git a/src/os/linux/x86_64/init.c b/src/os/linux/x86_64/init.c
+index 9d55229..a76a923 100644
+--- a/src/os/linux/x86_64/init.c
++++ b/src/os/linux/x86_64/init.c
+@@ -19,9 +19,7 @@
+  * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+  */
+-#ifdef __linux__
+-#include <fpu_control.h>
+-#endif
++#include <fenv.h>
+ /* Change the x87 FPU precision to double (64-bit) from the extended
+    (80-bit) Linux default.  Note, unlike on i386, my testcases pass
+@@ -30,14 +28,12 @@
+ */
+ void setDoublePrecision() {
+-#ifdef __linux__
+-    fpu_control_t cw;
++    fenv_t fenv;
+-    _FPU_GETCW(cw);
+-    cw &= ~_FPU_EXTENDED;
+-    cw |= _FPU_DOUBLE;
+-    _FPU_SETCW(cw);
+-#endif
++    fegetenv(&fenv);
++    fenv.__control_word &= ~0x300; /*_FPU_EXTENDED */
++    fenv.__control_word |= 0x200; /*_FPU_DOUBLE */
++    fesetenv(&fenv);
+ }
+ void initialisePlatform() {
+-- 
+2.7.4
+
index 02f4069e25aaf2c69735f75e78c272d8de30dd8f..64d5d0634893af8174211d19ef7f2340c185115a 100644 (file)
@@ -8,18 +8,17 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=lsqlite3
-PKG_VERSION:=0.9.3
+PKG_VERSION:=0.9.5
 PKG_RELEASE:=1
 
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).zip
-PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_URL:=http://lua.sqlite.org/index.cgi/zip/lsqlite3_fsl09w.zip
-PKG_HASH:=b857df8b66d01a803378cc86e56b787958beffdc8b851ad304f4ce8c7f0e9dbb
+PKG_SOURCE:=lsqlite3_fsl09y.zip
+PKG_SOURCE_URL:=http://lua.sqlite.org/index.cgi/zip/
+PKG_HASH:=d38402aa7640055d260c1246c36e6d6d31b425a25a805431f13695694466b722
 
 PKG_LICENSE:=MIT
 PKG_MAINTAINER:=Oskari Rauta <oskari.rauta@gmail.com>
 
-PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)/$(PKG_NAME)_fsl09w.zip
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(basename $(PKG_SOURCE))
 
 include $(INCLUDE_DIR)/package.mk
 
@@ -38,21 +37,21 @@ endef
 
 TARGET_CFLAGS += $(FPIC) -std=gnu99
 TARGET_CPPFLAGS += -DLUA_USE_LINUX
-TARGET_LDFLAGS += -llua -lsqlite3 -lpthread
+TARGET_LDFLAGS += -lsqlite3 -lpthread
 
 define Build/Compile
        $(TARGET_CC) $(TARGET_CFLAGS) $(TARGET_CPPFLAGS) \
-               -c $(PKG_BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)/lsqlite3.c \
-               -o $(PKG_BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)/lsqlite3.o \
-               -DSQLITE_VERSION="$(PKG_VERSION)"
+               -c $(PKG_BUILD_DIR)/lsqlite3.c \
+               -o $(PKG_BUILD_DIR)/lsqlite3.o \
+               -DLSQLITE_VERSION=\"$(PKG_VERSION)\"
        $(TARGET_CC) $(TARGET_LDFLAGS) -shared \
-               $(PKG_BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)/lsqlite3.o \
-               -o $(PKG_BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)/lsqlite3.so
+               $(PKG_BUILD_DIR)/lsqlite3.o \
+               -o $(PKG_BUILD_DIR)/lsqlite3.so
 endef
 
 define Package/lsqlite3/install
        $(INSTALL_DIR) $(1)/usr/lib/lua
-       $(CP) $(PKG_BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)/*.so $(1)/usr/lib/lua/
+       $(CP) $(PKG_BUILD_DIR)/*.so $(1)/usr/lib/lua/
 endef
 
 $(eval $(call BuildPackage,lsqlite3))
diff --git a/lang/node-mozilla-iot-gateway/Config.in b/lang/node-mozilla-iot-gateway/Config.in
new file mode 100644 (file)
index 0000000..b7cf497
--- /dev/null
@@ -0,0 +1,9 @@
+if PACKAGE_node-mozilla-iot-gateway
+
+       comment "Optional features"
+
+       config MOIT_enable-plugin-support
+               bool "Enable packages needed for some plugins"
+               default y
+
+endif
index 5b5e5001743e6385ab28b6c750c81bd52245d1a1..9bf7d4b1ad07881d2bde8966c5534b58c04773d9 100644 (file)
@@ -9,15 +9,16 @@ include $(TOPDIR)/rules.mk
 
 PKG_NPM_NAME:=mozilla-iot-gateway
 PKG_NAME:=node-$(PKG_NPM_NAME)
-PKG_VERSION:=0.3.1
+PKG_VERSION:=0.6.0
 PKG_RELEASE:=1
+PKG_REV:=df2d06def2051238bde7b8e5ee306262235d4c9f
 
 PKG_SOURCE_PROTO:=git
 PKG_SOURCE_URL:=https://github.com/mozilla-iot/gateway.git
 PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=v$(PKG_VERSION)
+PKG_SOURCE_VERSION:=$(PKG_REV)
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_MIRROR_HASH:=ba05bc3e93c36768244df922434e7132c2dae85a1ff9e3213beea087a4844d11
+PKG_MIRROR_HASH:=d686df778a7de693db11273eb87c16ec4d9e3ff9bbb550ed3ef94e29e96750e2
 
 PKG_BUILD_DEPENDS:=node/host openzwave
 
@@ -33,7 +34,9 @@ define Package/node-mozilla-iot-gateway
   CATEGORY:=Languages
   TITLE:=Things Gateway by Mozilla
   URL:=https://iot.mozilla.org/gateway/
-  DEPENDS:=+node +node-npm +libopenzwave +python +openssl-util
+  DEPENDS:= +libpthread +node +node-npm +libopenzwave +openzwave-config +python +python3-light +python3-pip +openssl-util
+  DEPENDS+= +MOIT_enable-plugin-support:git-http
+  MENU:=1
 endef
 
 define Package/node-mozilla-iot-gateway/description
@@ -44,6 +47,10 @@ define Package/node-mozilla-iot-gateway/description
   and defining a standard data model and APIs to make them interoperable.
 endef
 
+define Package/node-mozilla-iot-gateway/config
+  source "$(SOURCE)/Config.in"
+endef
+
 CPU:=$(subst powerpc,ppc,$(subst aarch64,arm64,$(subst x86_64,x64,$(subst i386,ia32,$(ARCH)))))
 
 define Build/Compile
@@ -58,11 +65,18 @@ define Build/Compile
 endef
 
 define Package/node-mozilla-iot-gateway/install
-       $(INSTALL_DIR) $(1)/opt/mozilla-iot/gateway
+       $(INSTALL_DIR) $(1)/opt/mozilla-iot/gateway/
        $(CP) $(PKG_INSTALL_DIR)/usr/lib/node_modules/things-gateway/* $(1)/opt/mozilla-iot/gateway
        $(STAGING_DIR_HOSTPKG)/bin/npm --prefix=$(1)/opt/mozilla-iot/gateway install $(1)/opt/mozilla-iot/gateway
-       $(LN) ../constants.js $(1)/opt/mozilla-iot/gateway/src/addons/addon-constants.js
-       $(LN) /tmp/mozilla-iot/gateway/run-app.log $(1)/opt/mozilla-iot/gateway/run-app.log
+
+       # Clean up of old build files that confuse OpenWrt's dependency checker
+       $(RM) -r $(1)/opt/mozilla-iot/gateway/node_modules/sqlite3/lib/binding/node-v57-linux-x64
+       $(RM) -r $(1)/opt/mozilla-iot/gateway/node_modules/ursa-optional/build/Release/ursaNative.node
+       $(RM) -r $(1)/opt/mozilla-iot/gateway/node_modules/ursa-optional/build/Release/obj.target/ursaNative.node
+
+       $(INSTALL_DIR) $(1)/opt/mozilla-iot/gateway/node_modules/sqlite3/lib/binding/node-v57-linux-arm/
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/node_modules/things-gateway/node_modules/sqlite3/lib/binding/node-v57-linux-arm/node_sqlite3.node \
+               $(1)/opt/mozilla-iot/gateway/node_modules/sqlite3/lib/binding/node-v57-linux-arm/
 
        $(INSTALL_DIR) $(1)/etc/init.d
        $(INSTALL_BIN) ./files/mozilla-iot-gateway.init $(1)/etc/init.d/mozilla-iot-gateway
index f2663d5a27704c26a780b9d8ca976aec08953a00..7bd3836cab3f200e14ab12ab6814881bbdd45474 100644 (file)
@@ -2,11 +2,26 @@
 
 START=99
 
-_npm=/usr/bin/npm
+HOME=/root
+MOZIOT_HOME="${HOME}/.mozilla-iot"
+export PATH="/opt/mozilla-iot/gateway/tools:${PATH}"
+
+run_app() {
+       cd /opt/mozilla-iot/gateway
+
+       echo "node version"
+       node --version
+       echo "npm version"
+       npm --version
+       echo "Starting gateway ..."
+       npm start
+}
 
 start()
 {
-       mkdir -p /tmp/mozilla-iot/gateway/
-       cd /opt/mozilla-iot/gateway/
-       $_npm start &> /tmp/mozilla-iot/gateway/run-app.log &
+       mkdir -p /usr/etc/
+       ln -sf /etc/openzwave /usr/etc/openzwave
+
+       mkdir -p "${MOZIOT_HOME}/log"
+       run_app &> "${MOZIOT_HOME}/log/run-app.log" &
 }
index cd3dcca4467c28637faebaaf03f4029925fe036f..a2472d2abea86d68e7ec6aa855034a85d08aaa26 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=perl-text-csv_xs
-PKG_VERSION:=1.36
+PKG_VERSION:=1.37
 PKG_RELEASE:=1
 
 PKG_SOURCE_URL:=https://www.cpan.org/authors/id/H/HM/HMBRAND/
 PKG_SOURCE:=Text-CSV_XS-$(PKG_VERSION).tgz
-PKG_HASH:=c321b09ad98a332138f25f55afb83befd7c045134085c7cb280fc325e688942c
+PKG_HASH:=20e16da9c38b0938f308c01d954f49d2c6922bac0d2d979bf2ad483fe7476ba2
 
 PKG_LICENSE:=GPL-1.0+ Artistic-1.0-Perl
 PKG_MAINTAINER:=Philip Prindeville <philipp@redfish-solutions.com>
index 86a4351ac3c06d26f548cd6f600f1c2ecd1c8f2a..b92b00279631ae07a0f23b063571d97eb8ed3efc 100644 (file)
@@ -11,7 +11,7 @@ include perlver.mk
 
 PKG_NAME:=perl
 PKG_VERSION:=$(PERL_VERSION)
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 PKG_SOURCE_URL:=\
                https://cpan.metacpan.org/src/5.0 \
index c1479ff2f04019edcf4d7b89dee725d38419cb0d..77ea26f46b25213b33097fe3a6c31bc4dd184020 100644 (file)
@@ -1,11 +1,11 @@
 --- a/perl.c
 +++ b/perl.c
-@@ -286,7 +286,7 @@ perl_construct(pTHXx)
+@@ -303,7 +303,7 @@ perl_construct(pTHXx)
      PL_localpatches = local_patches;  /* For possible -v */
  #endif
  
 -#if defined(LIBM_LIB_VERSION)
-+#if defined(LIBM_LIB_VERSION) && (defined(__GLIBC__) || defined(__UCLIBC__))
++#if defined(LIBM_LIB_VERSION) && defined(__UCLIBC__)
      /*
       * Some BSDs and Cygwin default to POSIX math instead of IEEE.
       * This switches them over to IEEE.
index d00a8c42ecf4c50b03a4906500139a19b98ab554..8a95099155cf63566d613f617a9bc6e3096edea0 100644 (file)
@@ -1,7 +1,11 @@
 # This makefile simplifies perl module builds.
 #
 
-include ../perl/perlver.mk
+ifeq ($(origin PERL_INCLUDE_DIR),undefined)
+  PERL_INCLUDE_DIR:=$(dir $(lastword $(MAKEFILE_LIST)))
+endif
+
+include $(PERL_INCLUDE_DIR)/perlver.mk
 
 ifneq ($(PKG_NAME),perl)
   PKG_VERSION:=$(PKG_VERSION)+perl$(PERL_VERSION2)
index 99e98b3b91e99edd7e5f16720add09dd653bcac0..3ff6d2eae86f7d989a09500d0ffd90fc692730d3 100644 (file)
@@ -6,7 +6,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=php
-PKG_VERSION:=7.2.8
+PKG_VERSION:=7.2.11
 PKG_RELEASE:=1
 
 PKG_MAINTAINER:=Michael Heimpold <mhei@heimpold.de>
@@ -16,13 +16,14 @@ PKG_LICENSE_FILES:=LICENSE
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=http://www.php.net/distributions/
-PKG_HASH:=53ba0708be8a7db44256e3ae9fcecc91b811e5b5119e6080c951ffe7910ffb0f
+PKG_HASH:=da1a705c0bc46410e330fc6baa967666c8cd2985378fb9707c01a8e33b01d985
 
 PKG_FIXUP:=libtool autoreconf
 PKG_BUILD_PARALLEL:=1
 PKG_USE_MIPS16:=0
 
 PHP7_MODULES = \
+       bcmath \
        calendar ctype curl \
        fileinfo \
        dom \
@@ -149,6 +150,22 @@ define Package/php7-mod-gd/config
        default y
 endef
 
+define Package/php7-mod-intl/config
+  config PHP7_FULLICUDATA
+       bool "Add dependency to full ICU Data"
+       depends on PACKAGE_php7-mod-intl
+       default n
+endef
+
+define Package/php7-mod-intl/description
+  Note that this package depends in ICU library which is built without data
+  by default. This is to satisfy programs build and run dependencies but to
+  keep the installed footprint small on the target system(s).
+  However, the data is required to make the ICU library useful - and thus
+  directly affects PHPs ICU extension, too - so consider to also
+  select/install package 'icu-full-data'.
+endef
+
 # not everything groks --disable-nls
 DISABLE_NLS:=
 
@@ -172,6 +189,12 @@ CONFIGURE_ARGS+= \
        --with-zlib="$(STAGING_DIR)/usr" \
          --with-zlib-dir="$(STAGING_DIR)/usr"
 
+ifneq ($(SDK)$(CONFIG_PACKAGE_php7-mod-bcmath),)
+  CONFIGURE_ARGS+= --enable-bcmath=shared
+else
+  CONFIGURE_ARGS+= --disable-bcmath
+endif
+
 ifneq ($(SDK)$(CONFIG_PACKAGE_php7-mod-calendar),)
   CONFIGURE_ARGS+= --enable-calendar=shared
 else
@@ -590,6 +613,7 @@ $(eval $(call BuildPackage,php7-fastcgi))
 $(eval $(call BuildPackage,php7-fpm))
 
 #$(eval $(call BuildModule,NAME,TITLE[,PKG DEPENDS]))
+$(eval $(call BuildModule,bcmath,Bcmath))
 $(eval $(call BuildModule,calendar,Calendar))
 $(eval $(call BuildModule,ctype,Ctype))
 $(eval $(call BuildModule,curl,cURL,+PACKAGE_php7-mod-curl:libcurl))
@@ -603,14 +627,14 @@ $(eval $(call BuildModule,gmp,GMP,+PACKAGE_php7-mod-gmp:libgmp))
 $(eval $(call BuildModule,hash,Hash))
 $(eval $(call BuildModule,iconv,iConv,$(ICONV_DEPENDS)))
 $(eval $(call BuildModule,imap,IMAP,+PACKAGE_php7-mod-imap:libopenssl +PACKAGE_libpam:libpam +PACKAGE_php7-mod-imap:uw-imap))
-$(eval $(call BuildModule,intl,Internationalization Functions,+PACKAGE_php7-mod-intl:icu))
+$(eval $(call BuildModule,intl,Internationalization Functions,+PACKAGE_php7-mod-intl:icu +PHP7_FULLICUDATA:icu-full-data))
 $(eval $(call BuildModule,json,JSON))
 $(eval $(call BuildModule,ldap,LDAP,+PACKAGE_php7-mod-ldap:libopenldap +PACKAGE_php7-mod-ldap:libsasl2))
 $(eval $(call BuildModule,mbstring,MBString))
 $(eval $(call BuildModule,mysqli,MySQL Improved Extension,+PACKAGE_php7-mod-mysqli:php7-mod-mysqlnd,30))
-$(eval $(call BuildModule,mysqlnd,MySQL Native Driver))
+$(eval $(call BuildModule,mysqlnd,MySQL Native Driver,+php7-mod-hash))
 $(eval $(call BuildModule,opcache,OPcache,,,zend))
-$(eval $(call BuildModule,openssl,OpenSSL,+PACKAGE_php7-mod-openssl:libopenssl))
+$(eval $(call BuildModule,openssl,OpenSSL,+PACKAGE_php7-mod-openssl:libopenssl,15))
 $(eval $(call BuildModule,pcntl,PCNTL))
 $(eval $(call BuildModule,pdo,PHP Data Objects))
 $(eval $(call BuildModule,pdo-mysql,PDO driver for MySQL,+php7-mod-pdo +PACKAGE_php7-mod-pdo-mysql:php7-mod-mysqlnd))
index 359ae8ba4058c588c673631f430984ef54b3520b..228882000d33a71ab8a16c5fde748ad6943f44b9 100644 (file)
@@ -8,13 +8,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=django-constance
-PKG_VERSION:=2.0.0
+PKG_VERSION:=2.3.1
 PKG_RELEASE:=1
 PKG_LICENSE:=BSD-3-Clause
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/8a/37/4fa87dd0e43aa0a66fc419d58e67a9b6da70e1853d646c4b501c1ee7208b/
-PKG_HASH:=6eec9f3ac4e5657b93e64f3379181d1e727088df10dd34f0398cd12119b9f0b0
+PKG_SOURCE_URL:=https://files.pythonhosted.org/packages/source/d/django-constance
+PKG_HASH:=a49735063b2c30015d2e52a90609ea9798da722ed070f091de51714758a5d018
 
 include $(INCLUDE_DIR)/package.mk
 include ../python-package.mk
index 4566cc6a162a0b2bec2830cf966701d11a4b9580..5cd813d6116d564a37c17220c2e5fb1fa1a2977d 100644 (file)
@@ -8,13 +8,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=django-picklefield
-PKG_VERSION:=1.0.0
+PKG_VERSION:=1.1.0
 PKG_RELEASE:=1
 PKG_LICENSE:=MIT
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/e8/69/232d78ef16cad8dd4c2f871b0f44d87bcde36ed6a90597416e903034600b/
-PKG_HASH:=61e3ba7f6df82d8df9e6be3a8c55ef589eb3bf926c3d25d2b7949b07eae78354
+PKG_SOURCE_URL:=https://files.pythonhosted.org/packages/source/d/django-picklefield
+PKG_HASH:=ce7fee5c6558fe5dc8924993d994ccde75bb75b91cd82787cbd4c92b95a69f9c
 
 include $(INCLUDE_DIR)/package.mk
 include ../python-package.mk
@@ -25,7 +25,7 @@ define Package/django-picklefield
   CATEGORY:=Languages
   MAINTAINER:=Gergely Kiss <mail.gery@gmail.com>
   TITLE:=Pickled object field for Django
-  URL:=http://github.com/gintas/django-picklefield/
+  URL:=https://github.com/gintas/django-picklefield
   DEPENDS:=+python +django
 endef
 
index f3519f41f0777f9b989a8a59a4fa9905bf8dd6b0..d97f22d7176b819d467cf95d586b9b1519ef71b4 100644 (file)
@@ -8,14 +8,14 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=django-postoffice
-PKG_VERSION:=3.0.3
+PKG_VERSION:=3.1.0
 PKG_RELEASE:=1
 PKG_LICENSE:=MIT
 
 PKG_SOURCE:=django-post_office-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/0f/8c/8c7e1d8998741fd195f7df947c509bc31a03d505aca03488c39e59da11f0/
-PKG_BUILD_DIR:=$(BUILD_DIR)/django-post_office-$(PKG_VERSION)/
-PKG_HASH:=8d691b2e53ba8121d770ce448f05568874cf78a3cf63215918ad49536db5e76a
+PKG_SOURCE_URL:=https://files.pythonhosted.org/packages/source/d/django-post_office
+PKG_HASH:=827937a944fe47cea393853069cd9315d080298c8ddb0faf787955d6aa51a030
+PKG_BUILD_DIR:=$(BUILD_DIR)/django-post_office-$(PKG_VERSION)
 
 include $(INCLUDE_DIR)/package.mk
 include ../python-package.mk
index fb37b0e95a8562fcfd2d2f25a91c9c25bd8f4aa6..223158addf5293fc214a321f9b13cc94eb70e409 100644 (file)
@@ -8,14 +8,14 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=django-restframework
-PKG_VERSION:=3.7.1
+PKG_VERSION:=3.9.0
 PKG_RELEASE:=1
 PKG_LICENSE:=BSD-3-Clause
 
 PKG_SOURCE:=djangorestframework-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/d0/ab/8b991e7d3e26af7cf6327c84b341e60004fc56325d8a4d4019e1474f7456/
+PKG_SOURCE_URL:=https://files.pythonhosted.org/packages/source/d/djangorestframework
+PKG_HASH:=607865b0bb1598b153793892101d881466bd5a991de12bd6229abb18b1c86136
 PKG_BUILD_DIR:=$(BUILD_DIR)/djangorestframework-$(PKG_VERSION)
-PKG_HASH:=305b2c6564ca46d3b558ba21110ed717135c467adf1a6dfd192bd85f4bb04d50
 
 include $(INCLUDE_DIR)/package.mk
 include ../python-package.mk
@@ -26,7 +26,7 @@ define Package/django-restframework
   CATEGORY:=Languages
   MAINTAINER:=Gergely Kiss <mail.gery@gmail.com>
   TITLE:=Web APIs for Django, made easy.
-  URL:=http://www.django-rest-framework.org/
+  URL:=https://www.django-rest-framework.org
   DEPENDS:=+python +django
 endef
 
index bc24f13ffe201b96d6f49ee3916c753907f30359..ee0064699885e904af23ce6419b8bfe5b36771be 100644 (file)
@@ -8,13 +8,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=django-statici18n
-PKG_VERSION:=1.6.1
+PKG_VERSION:=1.8.2
 PKG_RELEASE:=1
 PKG_LICENSE:=BSD-3-Clause
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/0a/24/1bed254529fc492ee5daf4cba18cf188b059866049889ecf1f178f25a2c2/
-PKG_HASH:=47d30939d52bcbbf1cbfe56b786bc2f2ea874266a8315cb027c061f320c4e2f6
+PKG_SOURCE_URL:=https://files.pythonhosted.org/packages/source/d/django-statici18n
+PKG_HASH:=ba9eeb3c4517027922645999359f8335fbb9fea04c457123cfbd6b4a36cbeda4
 
 include $(INCLUDE_DIR)/package.mk
 include ../python-package.mk
@@ -25,7 +25,7 @@ define Package/django-statici18n
   CATEGORY:=Languages
   MAINTAINER:=Gergely Kiss <mail.gery@gmail.com>
   TITLE:=A Django app that provides helper for generating JavaScript catalog to static files.
-  URL:=http://django-statici18n.readthedocs.org/
+  URL:=https://django-statici18n.readthedocs.org/
   DEPENDS:=+python +django
 endef
 
index 6d59cdd71d6355e7a0271833da90603a643fd2df..2270b833a9a476de5883287b53e3e417b6c84c10 100644 (file)
@@ -8,16 +8,14 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=django
-PKG_VERSION:=1.8.18
+PKG_VERSION:=1.11.15
 PKG_RELEASE=1
 PKG_LICENSE:=BSD-3-Clause
 
-PKG_SOURCE_PROTO:=git
-PKG_SOURCE_URL:=https://github.com/django/django.git
-PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=2d4bc5a60aa8a076689667c550ded96b87bc463e
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
-PKG_MIRROR_HASH:=c82c2cc338ae46ba8572d9960fc98dca932edc43a00f011fed102810a86185ae
+PKG_SOURCE:=Django-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://files.pythonhosted.org/packages/source/D/Django
+PKG_HASH:=b18235d82426f09733d2de9910cee975cf52ff05e5f836681eb957d105a05a40
+PKG_BUILD_DIR=$(BUILD_DIR)/Django-$(PKG_VERSION)
 
 include $(INCLUDE_DIR)/package.mk
 include ../python-package.mk
index 4a0142f323ae41c745413f5dec7fa9bf6b92357f..aefb6ffe9e0a6cdb9fac2952621219ee9672fa1a 100644 (file)
@@ -8,13 +8,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=flup
-PKG_VERSION:=1.0.2
+PKG_VERSION:=1.0.3
 PKG_RELEASE:=1
 PKG_LICENSE:=BSD-3-Clause
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=http://pypi.python.org/packages/source/f/flup/
-PKG_HASH:=4bad317a5fc1ce3d4fe5e9b6d846ec38a8023e16876785d4f88102f2c8097dd9
+PKG_SOURCE_URL:=https://files.pythonhosted.org/packages/source/f/flup
+PKG_HASH:=5eb09f26eb0751f8380d8ac43d1dfb20e1d42eca0fa45ea9289fa532a79cd159
 
 include $(INCLUDE_DIR)/package.mk
 include ../python-package.mk
@@ -25,7 +25,7 @@ define Package/flup
   CATEGORY:=Languages
   MAINTAINER:=Gergely Kiss <mail.gery@gmail.com>
   TITLE:=Random assortment of WSGI servers
-  URL:=http://www.saddi.com/software/flup/
+  URL:=https://www.saddi.com/software/flup/
   DEPENDS:=+python
 endef
 
index 4ba2fc61b5a3249f75f057193551ca72ee41ef3f..779615d4a774d8e30e715fa75821e9fbb019555a 100644 (file)
@@ -8,13 +8,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=gunicorn
-PKG_VERSION:=19.7.1
+PKG_VERSION:=19.9.0
 PKG_RELEASE=1
 PKG_LICENSE:=MIT
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/30/3a/10bb213cede0cc4d13ac2263316c872a64bf4c819000c8ccd801f1d5f822/
-PKG_HASH:=eee1169f0ca667be05db3351a0960765620dad53f53434262ff8901b68a1b622
+PKG_SOURCE_URL:=https://files.pythonhosted.org/packages/source/g/gunicorn
+PKG_HASH:=fa2662097c66f920f53f70621c6c58ca4a3c4d3434205e608e121b5b3b71f4f3
 
 include $(INCLUDE_DIR)/package.mk
 include ../python-package.mk
@@ -25,7 +25,7 @@ define Package/gunicorn
     CATEGORY:=Languages
     TITLE:=WSGI HTTP Server for UNIX
     MAINTAINER:=Gergely Kiss <mail.gery@gmail.com>
-    URL:=http://gunicorn.org/
+    URL:=https://gunicorn.org
     DEPENDS:=+python +python-setuptools
 endef
 
index 2fba8a64d9c111365e45a90590e7d9a6a2340e85..e6c5e5f081db3cc3c45866f71ebe4c30d91de102 100644 (file)
@@ -8,13 +8,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=jdcal
-PKG_VERSION:=1.3
+PKG_VERSION:=1.4
 PKG_RELEASE:=1
 PKG_LICENSE:=BSD-3-Clause
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/9b/fa/40beb2aa43a13f740dd5be367a10a03270043787833409c61b79e69f1dfd/
-PKG_HASH:=b760160f8dc8cc51d17875c6b663fafe64be699e10ce34b6a95184b5aa0fdc9e
+PKG_SOURCE_URL:=https://files.pythonhosted.org/packages/source/j/jdcal
+PKG_HASH:=ea0a5067c5f0f50ad4c7bdc80abad3d976604f6fb026b0b3a17a9d84bb9046c9
 
 include $(INCLUDE_DIR)/package.mk
 include ../python-package.mk
@@ -25,7 +25,7 @@ define Package/jdcal
   CATEGORY:=Languages
   MAINTAINER:=Gergely Kiss <mail.gery@gmail.com>
   TITLE:=Julian dates from proleptic Gregorian and Julian calendars.
-  URL:=http://github.com/phn/jdcal
+  URL:=https://github.com/phn/jdcal
   DEPENDS:=+python
 endef
 
index 3f337c91567c4816fed3585f0811d24ca4ff4dad..4e02a73e1fac8964ba0fcd2713336f2d22a86df4 100644 (file)
@@ -8,21 +8,17 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=micropython-lib
-PKG_VERSION=1.9-$(PKG_SOURCE_VERSION)
+PKG_VERSION:=1.9.3
 PKG_RELEASE:=1
 
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://codeload.github.com/micropython/micropython-lib/tar.gz/v$(PKG_VERSION)?
+PKG_HASH:=66e15380eb109613263beb6825b8eecb9191088270c1a59e8c7d922dd57183c7
+
 PKG_MAINTAINER:=Roger D <rogerdammit@gmail.com>
 PKG_LICENSE:=MIT, PSFL
 PKG_LICENSE_FILES:=LICENSE
 
-PKG_SOURCE_PROTO:=git
-PKG_SOURCE_URL:=https://github.com/micropython/micropython-lib.git
-PKG_SOURCE_VERSION:=f5fe55aaef1a39d3d56f07040c0ff9f7e841fdf7
-
-PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION)
-PKG_SOURCE:=$(PKG_SOURCE_SUBDIR).tar.xz
-PKG_MIRROR_HASH:=76565b5d44d47ccf61562f98dcf166d8103760eed7f3d84f5f7f31610140d780
-PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_SOURCE_SUBDIR)
 PKG_BUILD_PARALLEL:=1
 
 include $(INCLUDE_DIR)/package.mk
index f6e3f715ec40dccce5ffd00f2689ea61c803a09b..932ab94715f7201e641aaa9dc613f274a4c5f6f2 100644 (file)
@@ -8,21 +8,17 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=micropython
-PKG_VERSION=1.9.2-$(PKG_SOURCE_VERSION)
+PKG_VERSION:=1.9.4
 PKG_RELEASE:=1
 
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://github.com/micropython/micropython/releases/download/v$(PKG_VERSION)
+PKG_HASH:=0db042011bffcbd65362b67eb3cca87eaefa9f2a55b747fa75e922c706b8ce1a
+
 PKG_MAINTAINER:=Roger D <rogerdammit@gmail.com>
 PKG_LICENSE:=MIT
 PKG_LICENSE_FILES:=LICENSE
 
-PKG_SOURCE_PROTO:=git
-PKG_SOURCE_URL:=https://github.com/micropython/micropython.git
-PKG_SOURCE_VERSION:=1f78e7a43130acfa4bedf16c1007a1b0f37c75c3
-
-PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE:=$(PKG_SOURCE_SUBDIR).tar.xz
-PKG_MIRROR_HASH:=18234ffd1e91ac461080b4213399a6a18d4163fe314782b2e6ffbd1bfe48537b
-PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_SOURCE_SUBDIR)
 PKG_BUILD_PARALLEL:=1
 
 include $(INCLUDE_DIR)/package.mk
@@ -32,7 +28,7 @@ define Package/micropython
   SECTION:=lang
   CATEGORY:=Languages
   TITLE:=Micro Python
-  URL:=http://micropython.org
+  URL:=https://micropython.org
   DEPENDS:=+libffi
 endef
 
@@ -42,17 +38,17 @@ define Package/micropython/description
 endef
 
 
-MAKE_FLAGS += -C $(PKG_BUILD_DIR)/unix FROZEN_MPY_DIR= 
+MAKE_FLAGS += -C $(PKG_BUILD_DIR)/ports/unix FROZEN_MPY_DIR=
 
 define Build/Compile
-       $(call Build/Compile/Default,axtls) 
-       $(call Build/Compile/Default) 
+       $(call Build/Compile/Default,axtls)
+       $(call Build/Compile/Default)
 
 endef
 
 define Package/micropython/install
        $(INSTALL_DIR) $(1)/usr/bin
-       $(INSTALL_BIN) $(PKG_BUILD_DIR)/unix/micropython $(1)/usr/bin/micropython
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/ports/unix/micropython $(1)/usr/bin/micropython
 endef
 
 $(eval $(call BuildPackage,micropython))
diff --git a/lang/python/micropython/patches/000-Makefile-no-errors b/lang/python/micropython/patches/000-Makefile-no-errors
deleted file mode 100644 (file)
index 765f3e7..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-Index: micropython-1.5-20161117-e81a5353cb794b8d6c57317488e5db6a1c524755/unix/Makefile
-===================================================================
---- micropython-1.5-20161117-e81a5353cb794b8d6c57317488e5db6a1c524755.orig/unix/Makefile       2016-11-17 02:43:13.000000000 +0100
-+++ micropython-1.5-20161117-e81a5353cb794b8d6c57317488e5db6a1c524755/unix/Makefile    2016-11-17 16:49:02.937809018 +0100
-@@ -21,7 +21,7 @@
- INC += -I$(BUILD)
- # compiler settings
--CWARN = -Wall -Werror
-+CWARN = -Wall
- CWARN += -Wpointer-arith -Wuninitialized
- CFLAGS = $(INC) $(CWARN) -ansi -std=gnu99 -DUNIX $(CFLAGS_MOD) $(COPT) $(CFLAGS_EXTRA)
diff --git a/lang/python/micropython/patches/000-Makefile-no-errors.patch b/lang/python/micropython/patches/000-Makefile-no-errors.patch
new file mode 100644 (file)
index 0000000..1ebfa43
--- /dev/null
@@ -0,0 +1,13 @@
+diff --git a/ports/unix/Makefile b/ports/unix/Makefile
+index cbdd3f3..0ab157d 100644
+--- a/ports/unix/Makefile
++++ b/ports/unix/Makefile
+@@ -21,7 +21,7 @@ INC +=  -I$(TOP)
+ INC += -I$(BUILD)
+ # compiler settings
+-CWARN = -Wall -Werror
++CWARN = -Wall
+ CWARN += -Wpointer-arith -Wuninitialized
+ CFLAGS = $(INC) $(CWARN) -std=gnu99 -DUNIX $(CFLAGS_MOD) $(COPT) $(CFLAGS_EXTRA)
diff --git a/lang/python/micropython/patches/001-all-unix b/lang/python/micropython/patches/001-all-unix
deleted file mode 100644 (file)
index 3497aff..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/py/persistentcode.c      2017-09-22 13:26:04.914339465 +0000
-+++ b/py/persistentcode.c      2017-09-22 13:26:22.618319621 +0000
-@@ -373,7 +373,7 @@
-
- // here we define mp_raw_code_save_file depending on the port
- // TODO abstract this away properly
-
--#if defined(__i386__) || defined(__x86_64__) || (defined(__arm__) && (defined(__unix__)))
-+#if defined(__i386__) || defined(__x86_64__) || defined(__unix__)
-
- #include <unistd.h>
-
index 93a3f06362ee447914ba9ad0b0f23794ac0626eb..4d9479348960399bbe8303fe45e8997820b95276 100644 (file)
@@ -8,13 +8,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=openpyxl
-PKG_VERSION:=2.5.0b1
+PKG_VERSION:=2.5.9
 PKG_RELEASE:=1
 PKG_LICENSE:=MIT
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/88/3c/34fbe561fc92e6a75f297478b123c2590ca986d9f2d2dbf340d879aa24dd/
-PKG_HASH:=3b42ece7933b46b2128f8d4111c57c80fb5aa46f4d16e7f83281f169e7398ba7
+PKG_SOURCE_URL:=https://files.pythonhosted.org/packages/source/o/openpyxl
+PKG_HASH:=022c0f3fa1e873cc0ba20651c54dd5e6276fc4ff150b4060723add4fc448645e
 
 include $(INCLUDE_DIR)/package.mk
 include ../python-package.mk
index 28d2bd0dcecdf3872f673f34dfdff6966ce1679f..db1b14fdde88c244076d27529195558cd0b68cec 100644 (file)
@@ -8,13 +8,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=python-certifi
-PKG_VERSION:=2018.4.16
+PKG_VERSION:=2018.8.24
 PKG_RELEASE:=1
 PKG_LICENSE:=MPL-2.0
 
 PKG_SOURCE:=certifi-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://files.pythonhosted.org/packages/4d/9c/46e950a6f4d6b4be571ddcae21e7bc846fcbb88f1de3eff0f6dd0a6be55d
-PKG_HASH:=13e698f54293db9f89122b0581843a782ad0934a4fe0172d2a980ba77fc61bb7
+PKG_SOURCE_URL:=https://files.pythonhosted.org/packages/source/c/certifi
+PKG_HASH:=376690d6f16d32f9d1fe8932551d80b23e9d393a8578c5633a2ed39a64861638
 PKG_BUILD_DIR:=$(BUILD_DIR)/certifi-$(PKG_VERSION)
 
 include $(INCLUDE_DIR)/package.mk
index 551fd94fa6806969a8813758dcc2b56a2aef8cbc..ae1694a6a7205bccff2029c9e2e88090ac3e86f6 100644 (file)
@@ -9,16 +9,17 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=python-crypto
 PKG_VERSION:=2.6.1
-PKG_RELEASE:=2
+PKG_RELEASE:=3
 
 PKG_SOURCE:=pycrypto-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/
+PKG_SOURCE_URL:=https://files.pythonhosted.org/packages/source/p/pycrypto
 PKG_HASH:=f2ce1e989b272cfcb677616763e0a2e7ec659effa67a88aa92b3a65528f60a3c
 
 PKG_BUILD_DIR:=$(BUILD_DIR)/$(BUILD_VARIANT)-crypto-$(PKG_VERSION)
 
 PKG_LICENSE:=Public Domain
 PKG_LICENSE_FILES:=COPYRIGHT
+PKG_CPE_ID:=cpe:/a:dlitz:pycrypto
 PKG_MAINTAINER:=Jeffery To <jeffery.to@gmail.com>
 
 include $(INCLUDE_DIR)/package.mk
@@ -31,7 +32,7 @@ define Package/python-crypto/Default
   SECTION:=lang-python
   CATEGORY:=Languages
   SUBMENU:=Python
-  URL:=http://www.pycrypto.org/
+  URL:=https://www.dlitz.net/software/pycrypto/
 endef
 
 define Package/python-crypto
diff --git a/lang/python/python-crypto/patches/100-CVE-2013-7459.patch b/lang/python/python-crypto/patches/100-CVE-2013-7459.patch
new file mode 100644 (file)
index 0000000..db1f740
--- /dev/null
@@ -0,0 +1,106 @@
+From 8dbe0dc3eea5c689d4f76b37b93fe216cf1f00d4 Mon Sep 17 00:00:00 2001
+From: Legrandin <helderijs@gmail.com>
+Date: Sun, 22 Dec 2013 22:24:46 +0100
+Subject: [PATCH] Throw exception when IV is used with ECB or CTR
+
+The IV parameter is currently ignored when initializing
+a cipher in ECB or CTR mode.
+
+For CTR mode, it is confusing: it takes some time to see
+that a different parameter is needed (the counter).
+
+For ECB mode, it is outright dangerous.
+
+This patch forces an exception to be raised.
+---
+ lib/Crypto/SelfTest/Cipher/common.py | 31 +++++++++++++++++++++++--------
+ src/block_template.c                 | 11 +++++++++++
+ 2 files changed, 34 insertions(+), 8 deletions(-)
+
+diff --git a/lib/Crypto/SelfTest/Cipher/common.py b/lib/Crypto/SelfTest/Cipher/common.py
+index 420b6ff..a5f8a88 100644
+--- a/lib/Crypto/SelfTest/Cipher/common.py
++++ b/lib/Crypto/SelfTest/Cipher/common.py
+@@ -239,16 +239,30 @@ class RoundtripTest(unittest.TestCase):
+         return """%s .decrypt() output of .encrypt() should not be garbled""" % (self.module_name,)
+     def runTest(self):
+-        for mode in (self.module.MODE_ECB, self.module.MODE_CBC, self.module.MODE_CFB, self.module.MODE_OFB, self.module.MODE_OPENPGP):
++
++        ## ECB mode
++        mode = self.module.MODE_ECB
++        encryption_cipher = self.module.new(a2b_hex(self.key), mode)
++        ciphertext = encryption_cipher.encrypt(self.plaintext)
++        decryption_cipher = self.module.new(a2b_hex(self.key), mode)
++        decrypted_plaintext = decryption_cipher.decrypt(ciphertext)
++        self.assertEqual(self.plaintext, decrypted_plaintext)
++
++        ## OPENPGP mode
++        mode = self.module.MODE_OPENPGP
++        encryption_cipher = self.module.new(a2b_hex(self.key), mode, self.iv)
++        eiv_ciphertext = encryption_cipher.encrypt(self.plaintext)
++        eiv = eiv_ciphertext[:self.module.block_size+2]
++        ciphertext = eiv_ciphertext[self.module.block_size+2:]
++        decryption_cipher = self.module.new(a2b_hex(self.key), mode, eiv)
++        decrypted_plaintext = decryption_cipher.decrypt(ciphertext)
++        self.assertEqual(self.plaintext, decrypted_plaintext)
++
++        ## All other non-AEAD modes (but CTR)
++        for mode in (self.module.MODE_CBC, self.module.MODE_CFB, self.module.MODE_OFB):
+             encryption_cipher = self.module.new(a2b_hex(self.key), mode, self.iv)
+             ciphertext = encryption_cipher.encrypt(self.plaintext)
+-            
+-            if mode != self.module.MODE_OPENPGP:
+-                decryption_cipher = self.module.new(a2b_hex(self.key), mode, self.iv)
+-            else:
+-                eiv = ciphertext[:self.module.block_size+2]
+-                ciphertext = ciphertext[self.module.block_size+2:]
+-                decryption_cipher = self.module.new(a2b_hex(self.key), mode, eiv)
++            decryption_cipher = self.module.new(a2b_hex(self.key), mode, self.iv)
+             decrypted_plaintext = decryption_cipher.decrypt(ciphertext)
+             self.assertEqual(self.plaintext, decrypted_plaintext)
+diff --git a/src/block_template.c b/src/block_template.c
+index f940e0e..d555ceb 100644
+--- a/src/block_template.c
++++ b/src/block_template.c
+@@ -170,6 +170,17 @@ ALGnew(PyObject *self, PyObject *args, PyObject *kwdict)
+                               "Key cannot be the null string");
+               return NULL;
+       }
++      if (IVlen != 0 && mode == MODE_ECB)
++      {
++              PyErr_Format(PyExc_ValueError, "ECB mode does not use IV");
++              return NULL;
++      }
++      if (IVlen != 0 && mode == MODE_CTR)
++      {
++              PyErr_Format(PyExc_ValueError,
++                      "CTR mode needs counter parameter, not IV");
++              return NULL;
++      }
+       if (IVlen != BLOCK_SIZE && mode != MODE_ECB && mode != MODE_CTR)
+       {
+               PyErr_Format(PyExc_ValueError,
+From 58de28a5d32bc10e15766e5a59f41b07397cc6cb Mon Sep 17 00:00:00 2001
+From: Richard Mitchell <richard.j.mitchell@gmail.com>
+Date: Mon, 28 Apr 2014 16:58:27 +0100
+Subject: [PATCH] Fix speedtest run for ECB modes.
+
+---
+ pct-speedtest.py | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/pct-speedtest.py b/pct-speedtest.py
+index 4ce18be..c7b893a 100644
+--- a/pct-speedtest.py
++++ b/pct-speedtest.py
+@@ -121,6 +121,8 @@ class Benchmark:
+         blocks = self.random_blocks(16384, 1000)
+         if mode is None:
+             cipher = module.new(key)
++        elif mode==module.MODE_ECB:
++            cipher = module.new(key, module.MODE_ECB)
+         else:
+             cipher = module.new(key, mode, iv)
diff --git a/lang/python/python-crypto/patches/101-CVE-2018-6594.patch b/lang/python/python-crypto/patches/101-CVE-2018-6594.patch
new file mode 100644 (file)
index 0000000..8e8c558
--- /dev/null
@@ -0,0 +1,51 @@
+--- a/lib/Crypto/PublicKey/ElGamal.py
++++ b/lib/Crypto/PublicKey/ElGamal.py
+@@ -153,33 +153,33 @@ def generate(bits, randfunc, progress_fu
+         if number.isPrime(obj.p, randfunc=randfunc):
+             break
+     # Generate generator g
+-    # See Algorithm 4.80 in Handbook of Applied Cryptography
+-    # Note that the order of the group is n=p-1=2q, where q is prime
+     if progress_func:
+         progress_func('g\n')
+     while 1:
++        # Choose a square residue; it will generate a cyclic group of order q.
++        obj.g = pow(number.getRandomRange(2, obj.p, randfunc), 2, obj.p)
++
+         # We must avoid g=2 because of Bleichenbacher's attack described
+         # in "Generating ElGamal signatures without knowning the secret key",
+         # 1996
+-        #
+-        obj.g = number.getRandomRange(3, obj.p, randfunc)
+-        safe = 1
+-        if pow(obj.g, 2, obj.p)==1:
+-            safe=0
+-        if safe and pow(obj.g, q, obj.p)==1:
+-            safe=0
++        if obj.g in (1, 2):
++            continue
++
+         # Discard g if it divides p-1 because of the attack described
+         # in Note 11.67 (iii) in HAC
+-        if safe and divmod(obj.p-1, obj.g)[1]==0:
+-            safe=0
++        if (obj.p - 1) % obj.g == 0:
++            continue
++
+         # g^{-1} must not divide p-1 because of Khadir's attack
+         # described in "Conditions of the generator for forging ElGamal
+         # signature", 2011
+         ginv = number.inverse(obj.g, obj.p)
+-        if safe and divmod(obj.p-1, ginv)[1]==0:
+-            safe=0
+-        if safe:
+-            break
++        if (obj.p - 1) % ginv == 0:
++            continue
++
++        # Found
++        break
++
+     # Generate private key x
+     if progress_func:
+         progress_func('x\n')
index fb8022b71c32385b56062f31d9ff2b89a2935bf5..33e3d4281433f6b1bf5b1e55652c23de23008489 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=python-cryptography
-PKG_VERSION:=2.2.2
+PKG_VERSION:=2.3.1
 PKG_RELEASE:=1
 
 PKG_SOURCE:=cryptography-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.io/packages/source/c/cryptography
-PKG_HASH:=9fc295bf69130a342e7a19a39d7bbeb15c0bcaabc7382ec33ef3b2b7d18d2f63
+PKG_SOURCE_URL:= https://files.pythonhosted.org/packages/source/c/cryptography
+PKG_HASH:=8d10113ca826a4c29d5b85b2c4e045ffa8bad74fb525ee0eceb1d38d4c70dfd6
 
 PKG_LICENSE:=Apache-2.0 BSD-3-Clause
 PKG_LICENSE_FILES:=LICENSE.APACHE LICENSE.BSD
index 421758a55a69dd4575dc6e59bf2b1f44695105de..dc3f4d107d7d4b79afc9812ebab802a88b6467b9 100644 (file)
@@ -8,13 +8,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=python-dateutil
-PKG_VERSION:=2.6.1
+PKG_VERSION:=2.7.3
 PKG_RELEASE:=1
 PKG_LICENSE:=BSD-2-Clause
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/54/bb/f1db86504f7a49e1d9b9301531181b00a1c7325dc85a29160ee3eaa73a54/
-PKG_HASH:=891c38b2a02f5bb1be3e4793866c8df49c7d19baabf9c1bad62547e0b4866aca
+PKG_SOURCE_URL:=https://files.pythonhosted.org/packages/source/p/python-dateutil
+PKG_HASH:=e27001de32f627c22380a688bcc43ce83504a7bc5da472209b4c70f02829f0b8
 
 include $(INCLUDE_DIR)/package.mk
 include ../python-package.mk
index 4bdf5212ffbbbb2a950bf598528e701bda89c67f..b9d14e887d2b504a3f32909ff29ced942810e22e 100644 (file)
@@ -9,15 +9,15 @@ include $(TOPDIR)/rules.mk
 include $(INCLUDE_DIR)/kernel.mk
 
 PKG_NAME:=python-evdev
-PKG_VERSION:=0.7.0
+PKG_VERSION:=1.1.2
 PKG_RELEASE:=1
 
 PKG_LICENSE:=BSD-3-Clause
 PKG_MAINTAINER:=Paulo Costa <me@paulo.costa.nom.br>, Alexandru Ardelean <ardeleanalex@gmail.com>
 
 PKG_SOURCE:=evdev-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/67/15/eac376f3e1fc1960a54439c21459b2582e68340001aff83b4ace9e5bd110
-PKG_HASH:=57edafc469a414f58b51af1bfb9ee2babb9f626dd2df530d71c1176871850aa1
+PKG_SOURCE_URL:=https://files.pythonhosted.org/packages/source/e/evdev
+PKG_HASH:=2dd67291be20e70643e8ef6f2381efc10e0c6e44a32abb3c1db74996ea3b0351
 
 PKG_BUILD_DIR:=$(BUILD_DIR)/$(BUILD_VARIANT)-evdev-$(PKG_VERSION)
 
index d564039b28c1aa5793158c2d7293ca784e8342fe..c18c0931ad89db9b2c323b559db08118ccdc416a 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=python-lxml
-PKG_VERSION:=4.2.1
+PKG_VERSION:=4.2.5
 PKG_RELEASE:=1
 
-PKG_SOURCE:=lxml-$(PKG_VERSION).tgz
-PKG_SOURCE_URL:=http://lxml.de/files/
-PKG_HASH:=e2629cdbcad82b83922a3488937632a4983ecc0fed3e5cfbf430d069382eeb9b
+PKG_SOURCE:=lxml-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://files.pythonhosted.org/packages/source/l/lxml
+PKG_HASH:=36720698c29e7a9626a0dc802ef8885f8f0239bfd1689628ecd459a061f2807f
 
 PKG_BUILD_DIR:=$(BUILD_DIR)/$(BUILD_VARIANT)-lxml-$(PKG_VERSION)
 PKG_UNPACK=$(HOST_TAR) -C $(PKG_BUILD_DIR) --strip-components=1 -xzf $(DL_DIR)/$(PKG_SOURCE)
@@ -30,7 +30,7 @@ define Package/python-lxml/Default
   SECTION:=lang
   CATEGORY:=Languages
   SUBMENU:=Python
-  URL:=http://lxml.de
+  URL:=https://lxml.de
   DEPENDS:=+libxml2 +libxslt +libexslt
 endef
 
index c3977c0db7a279c6b997f04b92403f223d422f3c..01a06a5b4d8e54c0671cf7ee071b00576bf74e8f 100644 (file)
@@ -8,13 +8,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=python-mysql
-PKG_VERSION:=1.3.12
-PKG_RELEASE:=3
+PKG_VERSION:=1.3.13
+PKG_RELEASE:=1
 PKG_LICENSE:=GPL-2.0
 
 PKG_SOURCE:=mysqlclient-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://files.pythonhosted.org/packages/source/m/mysqlclient
-PKG_HASH:=2d9ec33de39f4d9c64ad7322ede0521d85829ce36a76f9dd3d6ab76a9c8648e5
+PKG_HASH:=ff8ee1be84215e6c30a746b728c41eb0701a46ca76e343af445b35ce6250644f
 
 PKG_BUILD_DIR:=$(BUILD_DIR)/$(BUILD_VARIANT)-mysql-$(PKG_VERSION)
 
index c1dc932c26da6cd7e0f0adf477c724cd91e0b615..5ac02e9bb45ef4b3a3443b7eb592b2330c7d87a6 100644 (file)
@@ -8,18 +8,17 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=python-pcapy
-PKG_VERSION:=0.11.1
+PKG_VERSION:=0.11.4
 PKG_RELEASE:=1
+
+PKG_SOURCE:=pcapy-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://files.pythonhosted.org/packages/source/p/pcapy
+PKG_HASH:=aa239913678d7ba116e66057a37f914de7726aecd11d00db470127df115c4e78
+PKG_BUILD_DIR:=$(BUILD_DIR)/pcapy-$(PKG_VERSION)
+
 PKG_MAINTAINER:=Andrew McConachie <andrew@depht.com>
 PKG_LICENSE:=Apache-1.1
 
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_MIRROR_HASH:=05c8d6978baa3512070ff4c041e5931384e702bbc2ac2c8063760176035958f1
-PKG_SOURCE_PROTO:=git
-PKG_SOURCE_URL:=https://github.com/CoreSecurity/pcapy.git
-PKG_SOURCE_VERSION:=b91a418374d1636408c435f11799ef725ef70097
-PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-
 include $(INCLUDE_DIR)/package.mk
 include ../python-package.mk
 
index 4feaf39b4de1a43973c411299e8f6dcc1b0f2425..d8a3fe5ecbc5106fdca997a0318a9628f19cb3c3 100644 (file)
@@ -8,17 +8,18 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=python-psycopg2
-PKG_VERSION:=2.6.2
+PKG_VERSION:=2.7.5
 PKG_RELEASE:=1
+
+PKG_SOURCE:=psycopg2-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://files.pythonhosted.org/packages/source/p/psycopg2
+PKG_HASH:=eccf962d41ca46e6326b97c8fe0a6687b58dfc1a5f6540ed071ff1474cea749e
+PKG_BUILD_DIR:=$(BUILD_DIR)/psycopg2-$(PKG_VERSION)
+
 PKG_MAINTAINER:=Dmitry Trefilov <the-alien@live.ru>
 PKG_LICENSE:=LGPL-3.0+
 PKG_LICENSE_FILES:=LICENSE
 
-PKG_SOURCE:=psycopg2-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=http://initd.org/psycopg/tarballs/PSYCOPG-2-6/
-PKG_HASH:=70490e12ed9c5c818ecd85d185d363335cc8a8cbf7212e3c185431c79ff8c05c
-
-PKG_BUILD_DIR:=$(BUILD_DIR)/psycopg2-$(PKG_VERSION)
 PKG_BUILD_DEPENDS:=python/host
 
 include $(INCLUDE_DIR)/package.mk
@@ -29,7 +30,7 @@ define Package/python-psycopg2
   SECTION:=lang
   CATEGORY:=Languages
   TITLE:=PostgreSQL database adapter for Python
-  URL:=http://www.initd.org/
+  URL:=http://initd.org/psycopg/
   DEPENDS:=+python +libpq +python-egenix-mx-base
 endef
 
index 7ad1e1f3576aabc1f2f20fad5191832cbe51bfd1..c6d708019eba892e23f990e86b42e2bf56d7a013 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=python-pyasn1-modules
-PKG_VERSION:=0.2.1
-PKG_RELEASE:=2
+PKG_VERSION:=0.2.2
+PKG_RELEASE:=1
 
 PKG_SOURCE:=pyasn1-modules-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/ab/76/36ab0e099e6bd27ed95b70c2c86c326d3affa59b9b535c63a2f892ac9f45
-PKG_HASH:=af00ea8f2022b6287dc375b2c70f31ab5af83989fc6fe9eacd4976ce26cd7ccc
+PKG_SOURCE_URL:=https://files.pythonhosted.org/packages/source/p/pyasn1-modules
+PKG_HASH:=a0cf3e1842e7c60fde97cb22d275eb6f9524f5c5250489e292529de841417547
 
 PKG_LICENSE:=BSD-2-Clause
 PKG_LICENSE_FILES:=LICENSE.txt
index e48271d02d449aaa52044a5f6a2cce5899f72215..3397a779fdaf1da32c8c85ae2efdc1e1c46caa90 100644 (file)
@@ -8,15 +8,17 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=python-requests
-PKG_VERSION:=2.19.1
+PKG_VERSION:=2.20.0
 PKG_RELEASE:=1
 PKG_LICENSE:=Apache-2.0
 
 PKG_SOURCE:=requests-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://files.pythonhosted.org/packages/54/1f/782a5734931ddf2e1494e4cd615a51ff98e1879cbe9eecbdfeaf09aa75e9
-PKG_HASH:=ec22d826a36ed72a7358ff3fe56cbd4ba69dd7a6718ffd450ff0e9df7a47ce6a
+PKG_SOURCE_URL:=https://files.pythonhosted.org/packages/source/r/requests
+PKG_HASH:=99dcfdaaeb17caf6e526f32b6a7b780461512ab3f1d992187801694cba42770c
 PKG_BUILD_DIR:=$(BUILD_DIR)/requests-$(PKG_VERSION)
 
+PKG_CPE_ID:=cpe:/a:python-requests:requests
+
 include $(INCLUDE_DIR)/package.mk
 include ../python-package.mk
 
index 3b330498a56075443c82e4bdae0e3b2c05999e7b..c76fc3c9dce89b7352ae478f0ca55b370f342daa 100644 (file)
@@ -8,14 +8,14 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=python-urllib3
-PKG_VERSION:=1.23
+PKG_VERSION:=1.24
 PKG_RELEASE:=1
 PKG_LICENSE:=MIT
 
 PKG_SOURCE:=urllib3-$(PKG_VERSION).tar.gz
-PKG_BUILD_DIR:=$(BUILD_DIR)/urllib3-$(PKG_VERSION)/
-PKG_SOURCE_URL:=https://pypi.io/packages/source/u/urllib3
-PKG_HASH:=a68ac5e15e76e7e5dd2b8f94007233e01effe3e50e8daddf69acfd81cb686baf
+PKG_SOURCE_URL:=https://files.pythonhosted.org/packages/source/u/urllib3
+PKG_HASH:=41c3db2fc01e5b907288010dec72f9d0a74e37d6994e6eb56849f59fea2265ae
+PKG_BUILD_DIR:=$(BUILD_DIR)/urllib3-$(PKG_VERSION)
 
 include $(INCLUDE_DIR)/package.mk
 include ../python-package.mk
index 7846ce26710b4af71e5bdf4120c8ccaeee0a0a90..4a4245bb21f1f71d7a0cc51ea6f49a308b88a169 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=PyYAML
-PKG_VERSION:=3.12
+PKG_VERSION:=3.13
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=http://pyyaml.org/download/pyyaml/
-PKG_HASH:=592766c6303207a20efc445587778322d7f73b161bd994f227adaa341ba212ab
+PKG_SOURCE_URL:=https://pypi.python.org/packages/source/P/PyYAML
+PKG_HASH:=3ef3092145e9b70e3ddd2c7ad59bdd0252a94dfe3949721633e41344de00a6bf
 
 PKG_LICENSE:=MIT
 PKG_LICENSE_FILES:=COPYING
@@ -30,7 +30,7 @@ define Package/python-yaml/Default
   SUBMENU:=Python
   SECTION:=lang
   CATEGORY:=Languages
-  URL:=http://pyyaml.org/wiki/PyYAML
+  URL:=https://pyyaml.org/wiki/PyYAML
   DEPENDS:=+libyaml
 endef
 
index 5febe512d32d7ee05f32092797a0fa0cefb62d4b..766a57b979443191046786c09b873d91eb575bc5 100644 (file)
@@ -268,7 +268,7 @@ define PyPackage/python/filespec
 endef
 
 HOST_LDFLAGS += \
-       $$$$(pkg-config --static --libs libcrypto libssl)
+       $$$$(pkg-config --static --libs libcrypto libssl) -Wl$(comma)-rpath=$(STAGING_DIR_HOSTPKG)/lib
 
 ifeq ($(HOST_OS),Linux)
 HOST_LDFLAGS += \
index 5c277242fbe878c1c69670057bbd0aa73156f5a9..adb5d2019c9802ca4364834ce8b0fb97c3c789f4 100644 (file)
@@ -14,7 +14,7 @@ PYTHON_VERSION:=$(PYTHON3_VERSION)
 PYTHON_VERSION_MICRO:=$(PYTHON3_VERSION_MICRO)
 
 PKG_NAME:=python3
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 PKG_VERSION:=$(PYTHON_VERSION).$(PYTHON_VERSION_MICRO)
 
 PKG_SOURCE:=Python-$(PKG_VERSION).tar.xz
@@ -264,7 +264,7 @@ define Py3Package/python3/filespec
 endef
 
 HOST_LDFLAGS += \
-       $$$$(pkg-config --static --libs libcrypto libssl)
+       $$$$(pkg-config --static --libs libcrypto libssl) -Wl$(comma)-rpath=$(STAGING_DIR_HOSTPKG)/lib
 
 ifeq ($(HOST_OS),Linux)
 HOST_LDFLAGS += \
diff --git a/lang/python/python3/patches/002-fix-implicit-dh-free-declaration.patch b/lang/python/python3/patches/002-fix-implicit-dh-free-declaration.patch
new file mode 100644 (file)
index 0000000..46cfa9b
--- /dev/null
@@ -0,0 +1,12 @@
+diff --git a/Modules/_ssl.c b/Modules/_ssl.c
+index 2bce4816d2..3c93884809 100644
+--- a/Modules/_ssl.c
++++ b/Modules/_ssl.c
+@@ -63,6 +63,7 @@ static PySocketModule_APIObject PySocketModule;
+ #include "openssl/err.h"
+ #include "openssl/rand.h"
+ #include "openssl/bio.h"
++#include "openssl/dh.h"
+ #ifndef HAVE_X509_VERIFY_PARAM_SET1_HOST
+ #  ifdef LIBRESSL_VERSION_NUMBER
index 464ed78163934349cd3be75278911219a55afa01..38835ee17532f01591d274a6897f3eb66c883dd1 100644 (file)
@@ -8,13 +8,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=pytz
-PKG_VERSION:=2018.3
+PKG_VERSION:=2018.5
 PKG_RELEASE:=1
 PKG_LICENSE:=MIT
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/1b/50/4cdc62fc0753595fc16c8f722a89740f487c6e5670c644eb8983946777be/
-PKG_HASH:=410bcd1d6409026fbaa65d9ed33bf6dd8b1e94a499e32168acfc7b332e4095c0
+PKG_SOURCE_URL:=https://files.pythonhosted.org/packages/source/p/pytz
+PKG_HASH:=ffb9ef1de172603304d9d2819af6f5ece76f2e85ec10692a524dd876e72bf277
 
 include $(INCLUDE_DIR)/package.mk
 include ../python-package.mk
index 804b585764a267bbba7ef6b15871b911383fa21b..9b0242b9731bea98d338642cbd3ebd13cb0115b6 100644 (file)
@@ -9,15 +9,12 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=rcssmin
 PKG_VERSION:=1.0.6
-PKG_RELEASE=1
+PKG_RELEASE=2
 PKG_LICENSE:=Apache-2.0
 
-PKG_SOURCE_PROTO:=git
-PKG_SOURCE_URL:=https://github.com/ndparker/rcssmin.git
-PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=4764e3bc47ca8d44be3198892e73c51d8a0a9970
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
-PKG_MIRROR_HASH:=a52728cc5653bf3c2a2f92954c6001338442a6e589bd364c497ba615c4365211
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://files.pythonhosted.org/packages/source/r/rcssmin
+PKG_HASH:=ca87b695d3d7864157773a61263e5abb96006e9ff0e021eff90cbe0e1ba18270
 
 include $(INCLUDE_DIR)/package.mk
 include ../python-package.mk
index aa4c662129fcffb278f8b35137262e358a4a7fd8..0f43a675c4bd3ae397db0847b04f509674f2ee8b 100644 (file)
@@ -8,13 +8,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=simplejson
-PKG_VERSION:=3.11.1
+PKG_VERSION:=3.16.0
 PKG_RELEASE:=1
 PKG_LICENSE:=MIT
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/08/48/c97b668d6da7d7bebe7ea1817a6f76394b0ec959cb04214ca833c34359df/
-PKG_HASH:=01a22d49ddd9a168b136f26cac87d9a335660ce07aa5c630b8e3607d6f4325e7
+PKG_SOURCE_URL:=https://files.pythonhosted.org/packages/source/s/simplejson
+PKG_HASH:=b1f329139ba647a9548aa05fb95d046b4a677643070dc2afc05fa2e975d09ca5
 
 include $(INCLUDE_DIR)/package.mk
 include ../python-package.mk
@@ -25,7 +25,7 @@ define Package/simplejson
   CATEGORY:=Languages
   MAINTAINER:=Gergely Kiss <mail.gery@gmail.com>
   TITLE:=Simple, fast, extensible JSON encoder/decoder for Python
-  URL:=http://simplejson.readthedocs.org/
+  URL:=https://simplejson.readthedocs.org/
   DEPENDS:=+python
 endef
 
index 5ef50c43c934e44705a6b1ff570571f2f605d924..68c2dd454b7e09d33ae918dee33e37311e437b5a 100644 (file)
@@ -11,7 +11,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=ruby
-PKG_VERSION:=2.5.1
+PKG_VERSION:=2.5.3
 PKG_RELEASE:=1
 
 # First two numbes
@@ -19,10 +19,11 @@ PKG_ABI_VERSION:=$(subst $(space),.,$(wordlist 1, 2, $(subst .,$(space),$(PKG_VE
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=https://cache.ruby-lang.org/pub/ruby/$(PKG_ABI_VERSION)/
-PKG_HASH:=886ac5eed41e3b5fc699be837b0087a6a5a3d10f464087560d2d21b3e71b754d
+PKG_HASH:=1cc9d0359a8ea35fc6111ec830d12e60168f3b9b305a3c2578357d360fcf306f
 PKG_MAINTAINER:=Luiz Angelo Daros de Luca <luizluca@gmail.com>
 PKG_LICENSE:=BSD-2-Clause
 PKG_LICENSE_FILES:=COPYING
+PKG_CPE_ID:=cpe:/a:ruby-lang:ruby
 
 PKG_BUILD_DEPENDS:=ruby/host
 PKG_INSTALL:=1
index e0c0c9e2e964ba04b35a395ae7476b5b0ccd4ac7..ecb34f7d9428b31b5fd0fefafaac0f056df4572e 100644 (file)
@@ -1,5 +1,5 @@
 #
-# Copyright (C) 2006-2015 OpenWrt.org
+# Copyright (C) 2006-2018 OpenWrt.org
 #
 # This is free software, licensed under the GNU General Public License v2.
 # See /LICENSE for more information.
@@ -8,29 +8,31 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=tcl
-PKG_VERSION:=8.6.4
+TCL_MAJOR_VERSION:=8.6
+PKG_VERSION:=${TCL_MAJOR_VERSION}.8
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)$(PKG_VERSION)-src.tar.gz
 PKG_SOURCE_URL:=@SF/$(PKG_NAME)
-PKG_HASH:=9e6ed94c981c1d0c5f5fefb8112d06c6bf4d050a7327e95e71d417c416519c8d
-
+PKG_HASH:=c43cb0c1518ce42b00e7c8f6eaddd5195c53a98f94adc717234a65cbcfd3f96a
 PKG_LICENSE:=TCL
 PKG_LICENSE_FILES:=license.terms
 PKG_MAINTAINER:=Joe Mistachkin <joe@mistachkin.com>
 
 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)$(PKG_VERSION)
+HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/$(PKG_NAME)$(PKG_VERSION)
 
 PKG_FIXUP:=autoreconf
 PKG_INSTALL:=1
 
+include $(INCLUDE_DIR)/host-build.mk
 include $(INCLUDE_DIR)/package.mk
 
 define Package/tcl
   SUBMENU:=Tcl
   SECTION:=lang
   CATEGORY:=Languages
-  DEPENDS:=+libpthread @BROKEN
+  DEPENDS:=+libpthread +zlib
   TITLE:=The Tcl language
   URL:=http://www.tcl.tk/
 endef
@@ -54,12 +56,23 @@ CONFIGURE_ARGS += \
 
 MAKE_PATH := unix
 
+define Build/Prepare
+       $(call Build/Prepare/Default)
+       rm -rf $(PKG_BUILD_DIR)/pkgs/*
+endef
+
 define Build/InstallDev
        $(INSTALL_DIR) $(1)/usr/include
        $(CP) $(PKG_INSTALL_DIR)/usr/include/*.h $(1)/usr/include/
 
        $(INSTALL_DIR) $(1)/usr/lib
        $(CP) $(PKG_INSTALL_DIR)/usr/lib/libtcl*.{a,so*} $(1)/usr/lib/
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/tclConfig.sh $(1)/usr/lib/
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/tclooConfig.sh $(1)/usr/lib/
+
+       $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/tcl.pc \
+               $(1)/usr/lib/pkgconfig
 endef
 
 define Package/tcl/install
@@ -68,6 +81,27 @@ define Package/tcl/install
 
        $(INSTALL_DIR) $(1)/usr/bin
        $(CP) $(PKG_INSTALL_DIR)/usr/bin/* $(1)/usr/bin
+
+       $(CP) -a $(PKG_INSTALL_DIR)/usr/lib/tcl8 $(1)/usr/lib/
+       $(CP) -a $(PKG_INSTALL_DIR)/usr/lib/tcl$(TCL_MAJOR_VERSION) $(1)/usr/lib/
+       $(LN) tclsh$(TCL_MAJOR_VERSION) $(1)/usr/bin/tclsh
+endef
+
+define Host/Configure
+       $(call Host/Configure/Default,$(1),$(2),$(CONFIGURE_PATH)/$(3))
+endef
+
+define Host/Compile
+       +$(HOST_MAKE_VARS) \
+       $(MAKE) $(HOST_JOBS) -C $(HOST_BUILD_DIR)/$(MAKE_PATH) \
+               $(HOST_MAKE_FLAGS) \
+               $(1)
+endef
+
+define Host/Install
+       $(call Host/Compile,install)
+       (cd $(HOST_BUILD_PREFIX)/bin; test -f tclsh || ln -s tclsh$(TCL_MAJOR_VERSION) tclsh)
 endef
 
+$(eval $(call HostBuild))
 $(eval $(call BuildPackage,tcl))
diff --git a/lang/tcl/patches/100-disable_tzdata_and_msgs_install.patch b/lang/tcl/patches/100-disable_tzdata_and_msgs_install.patch
deleted file mode 100644 (file)
index 1db8f07..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/unix/Makefile.in
-+++ b/unix/Makefile.in
-@@ -817,15 +817,15 @@ install-tzdata: tclsh
-       @echo "Installing time zone data"
-       @@LD_LIBRARY_PATH_VAR@="`pwd`:$${@LD_LIBRARY_PATH_VAR@}"; export @LD_LIBRARY_PATH_VAR@; \
-       TCL_LIBRARY="${TCL_BUILDTIME_LIBRARY}"; export TCL_LIBRARY; \
--      ./tclsh $(TOOL_DIR)/installData.tcl \
--          $(TOP_DIR)/library/tzdata "$(SCRIPT_INSTALL_DIR)"/tzdata
-+      #./tclsh $(TOOL_DIR)/installData.tcl \
-+      #    $(TOP_DIR)/library/tzdata "$(SCRIPT_INSTALL_DIR)"/tzdata
- install-msgs: tclsh
-       @echo "Installing message catalogs"
-       @@LD_LIBRARY_PATH_VAR@="`pwd`:$${@LD_LIBRARY_PATH_VAR@}"; export @LD_LIBRARY_PATH_VAR@; \
-       TCL_LIBRARY="${TCL_BUILDTIME_LIBRARY}"; export TCL_LIBRARY; \
--      ./tclsh $(TOOL_DIR)/installData.tcl \
--          $(TOP_DIR)/library/msgs "$(SCRIPT_INSTALL_DIR)"/msgs
-+      #./tclsh $(TOOL_DIR)/installData.tcl \
-+      #    $(TOP_DIR)/library/msgs "$(SCRIPT_INSTALL_DIR)"/msgs
- install-doc: doc
-       @for i in "$(MAN_INSTALL_DIR)" "$(MAN1_INSTALL_DIR)" "$(MAN3_INSTALL_DIR)" "$(MANN_INSTALL_DIR)" ; \
diff --git a/lang/tcl/patches/200-fix_mips_build.patch b/lang/tcl/patches/200-fix_mips_build.patch
deleted file mode 100644 (file)
index 48485ca..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
---- a/generic/tclStrToD.c
-+++ b/generic/tclStrToD.c
-@@ -73,7 +73,7 @@ typedef unsigned int fpu_control_t __att
-  * MIPS floating-point units need special settings in control registers
-  * to use gradual underflow as we expect.
-  */
--#if defined(__mips)
-+#if defined(__sgi) && defined(_COMPILER_VERSION)
- #include <sys/fpu.h>
- #endif
- /*
-@@ -2166,7 +2166,7 @@ TclInitDoubleConversion(void)
-     } bitwhack;
- #endif
--#if defined(__mips)
-+#if defined(__sgi) && defined(_COMPILER_VERSION)
-     union fpc_csr mipsCR;
-     mipsCR.fc_word = get_fpc_csr();
index 6337b40722eb8a292bde6da8e886876f6ebd3ef5..bce9f27ec5668b21997a35e7708cf58b5cdaaffe 100644 (file)
@@ -8,13 +8,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=vala
-PKG_VERSION:=0.34.5
+PKG_VERSION:=0.34.18
 PKG_RELEASE:=1
 PKG_LICENSE:=LGPL-2.1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
-PKG_SOURCE_URL:=@GNOME/vala/0.34/
-PKG_HASH:=3fd4ba371778bc87da42827b8d23f1f42b0629759a9a1c40c9683dfb7e73fae5
+PKG_SOURCE_URL:=@GNOME/vala/0.34
+PKG_HASH:=b89044c6eb70556ca2486812a42983944b4f6ef18db66b5af1a9006de11b1cd2
 
 PKG_BUILD_DEPENDS:=glib2 glib2/host vala/host
 HOST_BUILD_DEPENDS:=glib2/host
index 4c682622b9d623b1be34a8ee249bd3c1992f9db5..40d50a543b272d1ee0de3ce0a7003a48f603e8f5 100644 (file)
@@ -8,14 +8,14 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=alsa-lib
-PKG_VERSION:=1.1.6
+PKG_VERSION:=1.1.7
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
 PKG_SOURCE_URL:=ftp://ftp.alsa-project.org/pub/lib/ \
                http://distfiles.gentoo.org/distfiles/
 
-PKG_HASH:=5f2cd274b272cae0d0d111e8a9e363f08783329157e8dd68b3de0c096de6d724
+PKG_HASH:=9d6000b882a3b2df56300521225d69717be6741b71269e488bb20a20783bdc09
 PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>, \
                Peter Wagner <tripolar@gmx.at>
 
index 805427afbac7cb062a2b3e82a0219fcc8aae1706..f8045b79b277e3445e984614fa436a225a72faab 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=apr
-PKG_VERSION:=1.6.3
+PKG_VERSION:=1.6.5
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
 PKG_SOURCE_URL:=@APACHE/apr/
-PKG_HASH:=131f06d16d7aabd097fa992a33eec2b6af3962f93e6d570a9bd4d85e95993172
+PKG_HASH:=a67ca9fcf9c4ff59bce7f428a323c8b5e18667fdea7b0ebad47d194371b0a105
 PKG_MAINTAINER:=Thomas Heil <heil@terminal-consulting.de>
 PKG_LICENSE:=Apache License
 
index a4955e318b9ca953b33eb5e4b9cdd423510dbf97..ddacce0351256a32a23cf95d05e691b38a6191ce 100644 (file)
@@ -15,10 +15,11 @@ PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://github.com/lathiat/avahi/releases/download/v$(PKG_VERSION) \
                https://avahi.org/download
 PKG_HASH:=57a99b5dfe7fdae794e3d1ee7a62973a368e91e414bd0dfa5d84434de5b14804
+
 PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>
+PKG_CPE_ID:=cpe:/a:avahi:avahi
 
 PKG_BUILD_DEPENDS:=intltool/host
-
 PKG_FIXUP:=autoreconf
 PKG_REMOVE_FILES:=autogen.sh
 
index e7ffd91b366c71b157c902c8151048e99586428c..7434579b86c9956b007b08af0507463ab2ba708d 100644 (file)
@@ -1,6 +1,4 @@
 #
-# Copyright (C) 2015-2018 OpenWrt.org
-#
 # This is free software, licensed under the GNU General Public License v2.
 # See /LICENSE for more information.
 #
 # Dude, this "boost" is really one of the most crude stuff I ported yet.
 #
 
-
 include $(TOPDIR)/rules.mk
-include $(INCLUDE_DIR)/nls.mk
-include $(INCLUDE_DIR)/target.mk 
 
 PKG_NAME:=boost
-PKG_VERSION:=1.67.0
-PKG_SOURCE_VERSION:=1_67_0
-PKG_RELEASE:=2
+PKG_VERSION:=1.68.0
+PKG_SOURCE_VERSION:=1_68_0
+PKG_RELEASE:=4
 
 PKG_SOURCE:=$(PKG_NAME)_$(PKG_SOURCE_VERSION).tar.bz2
 PKG_SOURCE_URL:=@SF/$(PKG_NAME)/$(PKG_NAME)/$(PKG_VERSION) https://dl.bintray.com/boostorg/release/$(PKG_VERSION)/source/
 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)_$(PKG_SOURCE_VERSION)
 HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/$(PKG_NAME)_$(PKG_SOURCE_VERSION)
-PKG_HASH:=2684c972994ee57fc5632e03bf044746f6eb45d4920c343937a465fd67a5adba
+PKG_HASH:=7f6130bc3cf65f56a618888ce9d5ea704fa10b462be126ad053e80e553d6d8b7
 PKG_LICENSE:=Boost Software License <http://www.boost.org/users/license.html>
 PKG_MAINTAINER:=Carlos M. Ferreira <carlosmf.pt@gmail.com>
 
-PKG_BUILD_PARALLEL:=0
+PKG_BUILD_PARALLEL:=1
 PKG_USE_MIPS16:=0
 
 include $(INCLUDE_DIR)/package.mk
-include $(INCLUDE_DIR)/host-build.mk
-
+include $(INCLUDE_DIR)/nls.mk
 
 define Package/boost/Default
   SECTION:=libs
@@ -44,7 +38,7 @@ define Package/boost/Default
 endef
 
 define Package/boost/description
-This package provides the Boost v1.67.0 libraries.
+This package provides the Boost v1.68.0 libraries.
 Boost is a set of free, peer-reviewed, portable C++ source libraries.
 
 -----------------------------------------------------------------------------
@@ -63,7 +57,7 @@ This package provides the following run-time libraries:
  - chrono
  - container
  - context
- - contract (new in 1.67.0)
+ - contract 
  - coroutine (Deprecated - use Coroutine2)
  - - coroutine2 (Requires GCC v5 and up)
  - date_time
@@ -96,6 +90,12 @@ endef
 
 PKG_BUILD_DEPENDS:=boost/host PACKAGE_python:python PACKAGE_python3:python3
 
+include ../../lang/python/python-version.mk
+BOOST_PYTHON_VER=$(PYTHON_VERSION)
+
+include ../../lang/python/python3-version.mk
+BOOST_PYTHON3_VER=$(PYTHON3_VERSION)
+
 BOOST_LIBS =
 
 define Package/boost-libs
@@ -235,6 +235,11 @@ define Package/boost/config
                        select boost-coroutine2
                        select boost-graph-parallel
 
+               # Invisible config dependency
+               config boost-fiber-exclude
+                       bool
+                       default y if (CPU_TYPE=mips32 || CPU_TYPE=mips64)
+
                config boost-test-pkg
                        bool "Boost test package."
                        default m if ALL
@@ -253,11 +258,11 @@ define Package/boost/config
 
                $(foreach lib,$(BOOST_LIBS), \
                        config PACKAGE_boost-$(lib)
-                       prompt "Boost $(lib) library."
+                       prompt "Boost $(lib) $(if $(findstring python,$(lib)),$(paren_left)v$(if $(findstring 3,$(lib)),$(BOOST_PYTHON3_VER),$(BOOST_PYTHON_VER))$(paren_right) ,)library."
                        default m if ALL
                        $(if $(findstring locale,$(lib)),depends on BUILD_NLS,)\
-                       $(if $(findstring python,$(lib)),depends on PACKAGE_$(lib),)
-
+                       $(if $(findstring python,$(lib)),depends on PACKAGE_$(lib),)\
+                       $(if $(findstring fiber,$(lib)),depends on (CPU_TYPE!=mips32 && CPU_TYPE!=mips64),)
                )
        endmenu
 
@@ -306,7 +311,7 @@ $(eval $(call DefineBoostLibrary,contract,system,))
 $(eval $(call DefineBoostLibrary,coroutine,system chrono context thread,))
 $(eval $(call DefineBoostLibrary,date_time,,))
 #$(eval $(call DefineBoostLibrary,exception,,))
-$(eval $(call DefineBoostLibrary,fiber,coroutine filesystem,,))
+$(eval $(call DefineBoostLibrary,fiber,coroutine filesystem,,!boost-fiber-exclude))
 $(eval $(call DefineBoostLibrary,filesystem,system,))
 $(eval $(call DefineBoostLibrary,graph,regex,))
 $(eval $(call DefineBoostLibrary,iostreams,,+zlib +liblzma +libbz2))
@@ -329,6 +334,7 @@ $(eval $(call DefineBoostLibrary,timer,chrono))
 $(eval $(call DefineBoostLibrary,type_erasure,chrono system thread,))
 $(eval $(call DefineBoostLibrary,wave,date_time thread filesystem,))
 
+include $(INCLUDE_DIR)/host-build.mk
 
 define Host/Compile
        # b2 does not provide a configure-script nor a Makefile
@@ -339,8 +345,6 @@ CONFIGURE_PREFIX:=$(PKG_INSTALL_DIR)
 TARGET_LDFLAGS += -pthread -lrt
 
 TARGET_CFLAGS += \
-       $(if $(CONFIG_PACKAGE_boost-python), -I$(STAGING_DIR)/usr/include/python2.7/) \
-       $(if $(CONFIG_PACKAGE_boost-python3), -I$(STAGING_DIR)/usr/include/python3.6/) \
        $(if $(CONFIG_SOFT_FLOAT),-DBOOST_NO_FENV_H) -fPIC
 
 EXTRA_CXXFLAGS += $(if $(CONFIG_GCC_VERSION_4_8),-std=gnu++11,-std=gnu++14)
@@ -361,17 +365,10 @@ endif
 comma := ,
 
 define Build/Compile
-       $(info Selected Boost API $(BOOST_ABI) for architecture $(ARCH) and cpu $(CPU_TYPE) $(CPU_SUBTYPE))
+       $(info Selected Boost API $(BOOST_ABI) for architecture $(ARCH) and cpu $(CONFIG_CPU_TYPE) $(if $(CONFIG_CPU_SUBTYPE),and cpu subtype $(CONFIG_CPU_SUBTYPE),))
        ( cd $(PKG_BUILD_DIR) ; \
-               echo "using gcc : $(ARCH) : $(GNU_TARGET_NAME)-gcc : <compileflags>\"$(TARGET_CFLAGS)\" <cxxflags>\"$(TARGET_CXXFLAGS) $(EXTRA_CXXFLAGS)\" <linkflags>\"$(TARGET_LDFLAGS)\" ;" > tools/build/src/user-config.jam ; \
-               $(if $(CONFIG_PACKAGE_boost-python3), \
-                       echo "using python : 3.6 : : $(STAGING_DIR)/usr/include/python3.6/ : $(STAGING_DIR)/usr/lib/libpython3.6.so ;" >> \
-                               tools/build/src/user-config.jam; \
-               ) \
-               $(if $(CONFIG_PACKAGE_boost-python), \
-                       echo "using python : 2.7 : : $(STAGING_DIR)/usr/include/python2.7/ : $(STAGING_DIR)/usr/lib/libpython2.7.so ;" >> \
-                               tools/build/src/user-config.jam; \
-               ) \
+               echo "using gcc : $(ARCH) : $(GNU_TARGET_NAME)-gcc : <compileflags>\"$(TARGET_CFLAGS)\" <cxxflags>\"$(TARGET_CXXFLAGS) $(EXTRA_CXXFLAGS)\" <linkflags>\"$(TARGET_LDFLAGS)\" ;" > \
+                       tools/build/src/user-config.jam ; \
                b2 \
                        $(CONFIGURE_ARGS) \
                        --ignore-site-config \
@@ -393,13 +390,13 @@ define Build/Compile
                        --without-mpi \
                        $(if $(CONFIG_boost-graph-parallel),,--without-graph_parallel) \
                        $(if $(CONFIG_PACKAGE_boost-test),,--without-test) \
+                       --without-python \
                        $(foreach lib,$(BOOST_LIBS), \
-                               $(if $(findstring python,$(lib)), \
-                                       $(if $(CONFIG_PACKAGE_boost-python),python=2.7,--without-python), \
-                                               $(if $(CONFIG_PACKAGE_boost-$(lib)),, \
-                                                       $(if $(findstring $(lib),wserialization),,--without-$(lib)) \
-                                               ) \
+                               $(if $(findstring python,$(lib)),, \
+                                       $(if $(CONFIG_PACKAGE_boost-$(lib)),, \
+                                               $(if $(findstring wserialization,$(lib)),,--without-$(lib)) \
                                        ) \
+                               ) \
                        ) \
                        $(if $(CONFIG_PACKAGE_boost-locale),boost.locale.iconv=on -sICONV_PATH=$(ICONV_PREFIX) boost.locale.posix=$(if $(USE_MUSL),on,off), \
                                boost.locale.iconv=off) \
@@ -407,8 +404,38 @@ define Build/Compile
                        $(if $(CONFIG_PACKAGE_boost-iostreams),-sNO_BZIP2=1 -sZLIB_INCLUDE=$(STAGING_DIR)/usr/include \
                                -sZLIB_LIBPATH=$(STAGING_DIR)/usr/lib) \
                        install ;\
+                       $(if $(CONFIG_PACKAGE_boost-python), \
+                               echo "using gcc : $(ARCH) : $(GNU_TARGET_NAME)-gcc : <compileflags>\"$(TARGET_CFLAGS) -I$(STAGING_DIR)/usr/include/python$(BOOST_PYTHON_VER)/ \" <cxxflags>\"$(TARGET_CXXFLAGS) $(EXTRA_CXXFLAGS)\" <linkflags>\"$(TARGET_LDFLAGS)\" ;" > \
+                                       tools/build/src/user-config.jam ; \
+                               echo "using python : $(BOOST_PYTHON_VER) : : $(STAGING_DIR)/usr/include/python$(BOOST_PYTHON_VER)/ : $(STAGING_DIR)/usr/lib/libpython$(BOOST_PYTHON_VER).so ;" >> \
+                                       tools/build/src/user-config.jam; \
+                               b2 -a \
+                                       $(CONFIGURE_ARGS) \
+                                       --ignore-site-config \
+                                       --toolset=gcc-$(ARCH) abi=$(BOOST_ABI) \
+                                       --disable-long-double \
+                                       $(if $(CONFIG_boost-variant-release), variant=release,) \
+                                       $(if $(CONFIG_boost-variant-debug), variant=debug,) \
+                                       $(if $(CONFIG_boost-variant-profile), variant=profile,) \
+                                       $(if $(CONFIG_boost-use-name-tags),--layout=tagged,--layout=system) \
+                                       $(if $(CONFIG_boost-build-type-complete),--build-type=complete,--build-type=minimal) \
+                                       $(if $(CONFIG_boost-shared-libs),link=shared,) \
+                                       $(if $(CONFIG_boost-static-libs),link=static,) \
+                                       $(if $(CONFIG_boost-static-and-shared-libs),link=static$(comma)shared,) \
+                                       $(if $(CONFIG_boost-runtime-shared),runtime-link=shared,) \
+                                       $(if $(CONFIG_boost-runtime-static),runtime-link=static,) \
+                                       $(if $(CONFIG_boost-runtime-static-and-shared),runtime-link=shared$(comma)static,) \
+                                       $(if $(CONFIG_boost-single-thread),threading=single,) \
+                                       threading=multi \
+                                       --with-python \
+                               install ;\
+                       ,) \
                        $(if $(CONFIG_PACKAGE_boost-python3), \
-                               b2 \
+                               echo "using gcc : $(ARCH) : $(GNU_TARGET_NAME)-gcc : <compileflags>\"$(TARGET_CFLAGS) -I$(STAGING_DIR)/usr/include/python$(BOOST_PYTHON3_VER)/ \" <cxxflags>\"$(TARGET_CXXFLAGS) $(EXTRA_CXXFLAGS)\" <linkflags>\"$(TARGET_LDFLAGS)\" ;" > \
+                                       tools/build/src/user-config.jam ; \
+                               echo "using python : $(BOOST_PYTHON3_VER) : : $(STAGING_DIR)/usr/include/python$(BOOST_PYTHON3_VER)/ : $(STAGING_DIR)/usr/lib/libpython$(BOOST_PYTHON3_VER).so ;" >> \
+                                       tools/build/src/user-config.jam; \
+                               b2 -a \
                                        $(CONFIGURE_ARGS) \
                                        --ignore-site-config \
                                        --toolset=gcc-$(ARCH) abi=$(BOOST_ABI) \
@@ -426,11 +453,7 @@ define Build/Compile
                                        $(if $(CONFIG_boost-runtime-static-and-shared),runtime-link=shared$(comma)static,) \
                                        $(if $(CONFIG_boost-single-thread),threading=single,) \
                                        threading=multi \
-                                       $(foreach lib,$(BOOST_LIBS), \
-                                               $(if $(findstring python,$(lib)), \
-                                                       $(if $(CONFIG_PACKAGE_boost-python3),python=3.6,), \
-                                               ) \
-                                       ) \
+                                       --with-python \
                                install ;\
                        ,) \
        )
@@ -446,38 +469,27 @@ define Build/InstallDev
                # copies _all_ header files - independent of <--with-library>-argument above
 
        $(INSTALL_DIR) $(1)/usr/lib
-       $(CP) -v $(PKG_INSTALL_DIR)/lib/*.a $(1)/usr/lib/ # copies all compiled archive files
-       $(FIND) $(PKG_INSTALL_DIR)/lib/ -name '*.so*' -exec $(CP) {} $(1)/usr/lib/ \; # copies all the shared objects files
+       # copies all compiled archive and shared object files
+       $(CP) -v $(PKG_INSTALL_DIR)/lib/*.{a,so*} $(1)/usr/lib/
 endef
 
 define Host/Install
-       $(INSTALL_DIR) \
-               $(STAGING_DIR_HOSTPKG)/bin
-
-       $(CP) \
-               $(HOST_BUILD_DIR)/tools/build/src/engine/bin.*/b2 \
-               $(STAGING_DIR_HOSTPKG)/bin/
+       $(INSTALL_DIR) $(STAGING_DIR_HOSTPKG)/bin
+       $(CP) $(HOST_BUILD_DIR)/tools/build/src/engine/bin.*/b2 $(STAGING_DIR_HOSTPKG)/bin/
 endef
 
 define Package/boost/Default/install
-       $(INSTALL_DIR) \
-               $(1)/usr/lib
-
-       $(FIND) \
-               $(PKG_INSTALL_DIR)/lib/ -name 'libboost_$(2).so*' -exec $(CP) {} $(1)/usr/lib/ \;
-       $(FIND) \
-               $(PKG_INSTALL_DIR)/lib/ -name 'libboost_$(2)_*.so*' -exec $(CP) {} $(1)/usr/lib/ \;
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(if $(findstring python,$(2)), $(if $(findstring 3,$(2)), \
+               $(CP) $(PKG_INSTALL_DIR)/lib/libboost_python3*.so* $(1)/usr/lib/ , \
+               $(CP) $(PKG_INSTALL_DIR)/lib/libboost_python2*.so* $(1)/usr/lib/ ), \
+       $(CP) $(PKG_INSTALL_DIR)/lib/libboost_$(2)*.so* $(1)/usr/lib/ )
 endef
 
 define Package/boost-test/install
-               $(INSTALL_DIR) \
-                       $(1)/usr/lib
-
-               $(FIND) \
-                       $(PKG_INSTALL_DIR)/lib/ -name 'libboost_unit_test_framework*.so*' -exec $(CP) {} $(1)/usr/lib/ \;
-               
-               $(FIND) \
-                       $(PKG_INSTALL_DIR)/lib/ -name 'libboost_prg_exec_monitor*.so*' -exec $(CP) {} $(1)/usr/lib/ \;  
+               $(INSTALL_DIR) $(1)/usr/lib
+               $(CP) $(PKG_INSTALL_DIR)/lib/libboost_unit_test_framework*.so* $(1)/usr/lib/
+               $(CP) $(PKG_INSTALL_DIR)/lib/libboost_prg_exec_monitor*.so* $(1)/usr/lib/
 endef
 
 define BuildBoostLibrary
index a0189968172eb76b9a9e2a94125350b9f53431a3..a1c04e50e3d11e26fcbf4b3e628d5be41045ddcb 100644 (file)
@@ -10,12 +10,13 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=c-ares
 PKG_VERSION:=1.14.0
-PKG_RELEASE:=1
+PKG_RELEASE:=4
 PKG_LICENSE:=MIT
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://c-ares.haxx.se/download
 PKG_HASH:=45d3c1fd29263ceec2afc8ff9cd06d5f8f889636eb4e80ce3cc7f0eaf7aadc6e
+PKG_CPE_ID:=cpe:/a:c-ares_project:c-ares
 
 PKG_FIXUP:=autoreconf
 PKG_INSTALL:=1
index b795ec9d7d9e8b5f5c70e04f0d6cdae2601ca0cf..39a8dbcb7118aca70b5530e0b5cfb7e695ee6773 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=classpath
 PKG_VERSION:=0.99
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 PKG_LICENSE:=GPL-2.0
 PKG_MAINTAINER:=Dana H. Myers <k6jq@comcast.net>
 
diff --git a/libs/classpath/patches/020-fix-statement-may-fall-through.patch b/libs/classpath/patches/020-fix-statement-may-fall-through.patch
new file mode 100644 (file)
index 0000000..b315757
--- /dev/null
@@ -0,0 +1,10 @@
+--- a/native/jni/java-math/gnu_java_math_GMP.c
++++ b/native/jni/java-math/gnu_java_math_GMP.c
+@@ -1132,6 +1132,7 @@
+         break;
+       case 1:
+         res = mpz_popcount (_this);
++      __attribute__((fallthrough));
+       default:
+         JCL_ThrowException (env, "java/lang/Error",
+                             "Unexpected sign value for a native MPI");
index 5378d612d1b3e16a35a610d3864907e6c74b0874..0f20abdc61afaa2e98f5cfa93fbb461c36b4327b 100644 (file)
@@ -8,17 +8,15 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=confuse
-PKG_VERSION:=3.2.1
+PKG_VERSION:=3.2.2
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=https://github.com/martinh/libconfuse/releases/download/v$(PKG_VERSION)
-PKG_HASH:=23c63272baf2ef4e2cbbafad2cf57de7eb81f006ec347c00b954819824add25e
+PKG_HASH:=a9240b653d02e8cfc52db48e8c4224426e528e1faa09b65e8ca08a197fad210b
 PKG_MAINTAINER:=
 PKG_LICENSE:=ISC
 
-PKG_FIXUP:=autoreconf
-
 include $(INCLUDE_DIR)/package.mk
 
 define Package/confuse
index 9ac94b26230de9659e2bc6c53bb06b2d3cc329be..52e7133366b41a590800e1594f3388527a085aac 100644 (file)
@@ -6,12 +6,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=expat
-PKG_VERSION:=2.2.5
+PKG_VERSION:=2.2.6
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
 PKG_SOURCE_URL:=@SF/expat
-PKG_HASH:=d9dc32efba7e74f788fcc4f212a43216fc37cf5f23f4c2339664d473353aedf6
+PKG_HASH:=17b43c2716d521369f82fc2dc70f359860e90fa440bea65b3b85f0b246ea81f2
 PKG_MAINTAINER:=Steven Barth <cyrus@openwrt.org>, \
                Ted Hess <thess@kitschensync.net>
 
@@ -41,7 +41,11 @@ TARGET_CFLAGS += $(FPIC)
 
 CONFIGURE_ARGS += \
        --enable-shared \
-       --enable-static
+       --enable-static \
+       --without-docbook
+
+HOST_CONFIGURE_ARGS += \
+       --without-docbook
 
 define Host/Install
        $(MAKE) -C $(HOST_BUILD_DIR) install
index a05e2d27854abeabd39d3b92177245182b321687..6e23625fda8a7f4f2984778cbb8c2363585c8440 100644 (file)
@@ -24,7 +24,7 @@ include $(INCLUDE_DIR)/package.mk
 define Package/fftw3
   SECTION:=libs
   CATEGORY:=Libraries
-  DEPENDS:=@!avr32 +libpthread
+  DEPENDS:=+libpthread
   VARIANT:=double
   TITLE:=Fast Fourier transform library
   URL:=http://www.fftw.org/
index d7f1f2582217f4e4e2da999bf1f8927f0b38d8cf..e631d957e069233db6b58d8c53316d70a2c01333 100644 (file)
@@ -8,20 +8,18 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=file
-PKG_VERSION:=5.33
-PKG_RELEASE:=2
+PKG_VERSION:=5.34
+PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://sources.lede-project.org/ \
-       http://pkgs.fedoraproject.org/lookaside/pkgs/file/ \
+PKG_SOURCE_URL:=https://pkgs.fedoraproject.org/lookaside/pkgs/file/ \
        http://download.openpkg.org/components/cache/file/ \
        ftp://ftp.astron.com/pub/file/
-PKG_HASH:=1c52c8c3d271cd898d5511c36a68059cda94036111ab293f01f83c3525b737c6
+PKG_HASH:=f15a50dbbfa83fec0bd1161e8e191b092ec832720e30cd14536e044ac623b20a
 
 PKG_LICENSE:=BSD-2c
 PKG_LICENSE_FILES:=COPYING
 
-PKG_FIXUP:=autoreconf
 PKG_INSTALL:=1
 PKG_BUILD_PARALLEL:=1
 
@@ -29,7 +27,7 @@ include $(INCLUDE_DIR)/package.mk
 
 define Package/file/Default
   TITLE:=File type determination
-  URL:=ftp://ftp.astron.com/pub/file/
+  URL:=https://darwinsys.com/file/
   MAINTAINER:=Marko Ratkaj <marko.ratkaj@sartura.hr>
 endef
 
index 28e9a46218077ff64cd6830630a9f14b1294fe54..47de71e32d9158e2169d77a535d0e23389363efa 100644 (file)
@@ -9,10 +9,10 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=flac
 PKG_VERSION:=1.3.2
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
-PKG_SOURCE_URL:=http://downloads.xiph.org/releases/flac/
+PKG_SOURCE_URL:=https://downloads.xiph.org/releases/flac/
 PKG_HASH:=91cfc3ed61dc40f47f050a109b08610667d73477af6ef36dcad31c31a4a8d53f
 PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>
 
@@ -20,6 +20,7 @@ PKG_INSTALL:=1
 
 PKG_LICENSE:=GFDL-1.2 GPL-2 LGPL-2.1 BSD-3-Clause
 PKG_LICENSE_FILES:=README COPYING.FDL COPYING.GPL COPYING.LGPL COPYING.Xiph
+PKG_CPE_ID:=cpe:/a:flac_project:flac
 
 PKG_FIXUP:=autoreconf
 PKG_REMOVE_FILES:=autogen.sh aclocal.m4
diff --git a/libs/flac/patches/100-CVE-2017-6888.patch b/libs/flac/patches/100-CVE-2017-6888.patch
new file mode 100644 (file)
index 0000000..3de0cc5
--- /dev/null
@@ -0,0 +1,27 @@
+From 4f47b63e9c971e6391590caf00a0f2a5ed612e67 Mon Sep 17 00:00:00 2001
+From: Erik de Castro Lopo <erikd@mega-nerd.com>
+Date: Sat, 8 Apr 2017 18:34:49 +1000
+Subject: [PATCH] stream_decoder.c: Fix a memory leak
+
+Leak reported by Secunia Research.
+---
+ src/libFLAC/stream_decoder.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/libFLAC/stream_decoder.c b/src/libFLAC/stream_decoder.c
+index 14d5fe7f..a5527511 100644
+--- a/src/libFLAC/stream_decoder.c
++++ b/src/libFLAC/stream_decoder.c
+@@ -1759,6 +1759,9 @@ FLAC__bool read_metadata_vorbiscomment_(FLAC__StreamDecoder *decoder, FLAC__Stre
+                                       }
+                                       memset (obj->comments[i].entry, 0, obj->comments[i].length) ;
+                                       if (!FLAC__bitreader_read_byte_block_aligned_no_crc(decoder->private_->input, obj->comments[i].entry, obj->comments[i].length)) {
++                                              /* Current i-th entry is bad, so we delete it. */
++                                              free (obj->comments[i].entry) ;
++                                              obj->comments[i].entry = NULL ;
+                                               obj->num_comments = i;
+                                               goto skip;
+                                       }
+-- 
+2.17.0
+
index 6cac5a7b3ca7e5a70885ac5154079bef382c784a..d7a4ae9ebfdba01c7a3b231f64a74516b286104a 100644 (file)
@@ -17,6 +17,7 @@ PKG_HASH:=db8d87ea720ea9d5edc5388fc7a0497bb11ba9fe972245e0f7f4c7e8b1e1e84d
 
 PKG_LICENSE:=FTL GPL-2.0 MIT ZLIB
 PKG_LICENSE_FILES:=docs/LICENSE.TXT docs/FTL.TXT docs/GPLv2.TXT src/bdf/README src/pcf/README src/gzip/zlib.h
+PKG_CPE_ID:=cpe:/a:freetype:freetype2
 PKG_MAINTAINER:=Val Kulkov <val.kulkov@gmail.com>
 
 PKG_FIXUP:=autoreconf
index 3954a4525b081bee0a64f6206b0a08ded3e940be..4992b088f6544a3fa39a51075e8b413a2cdfffd3 100644 (file)
@@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=getdns
 PKG_VERSION:=1.4.2
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 PKG_LICENSE:=BSD-3-Clause
 PKG_LICENSE_FILES:=LICENSE
@@ -55,6 +55,11 @@ CONFIGURE_ARGS += \
                $(if $(CONFIG_GETDNS_ENABLE_IDN_LIBIDN2), , --without-libidn2 ) \
                --with-ssl="$(STAGING_DIR)/usr" \
 
+# This will make 'configure' think that our libbsd.so is missing the
+# functions inet_pton, inet_ntop, strlcpy and use the builtin. This 
+# removes the libbsd dependency
+CONFIGURE_VARS += LIBBSD_LIBS=-lc
+
 define Build/InstallDev
        $(INSTALL_DIR) $(1)/usr/include/getdns/
        $(CP) $(PKG_INSTALL_DIR)/usr/include/getdns/getdns*.h $(1)/usr/include/getdns/
index 9305fe420c25ca58ddb18ebc299c12352ae14b85..97646c834808cbb9e00827d4dd19fb7f8f939953 100644 (file)
@@ -19,6 +19,7 @@ PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>
 
 PKG_LICENSE:=MIT
 PKG_LICENSE_FILES:=COPYING
+PKG_CPE_ID:=cpe:/a:giflib_project:giflib
 
 PKG_FIXUP:=autoreconf
 PKG_REMOVE_FILES:=autogen.sh aclocal.m4
index 3f1d014482e08c9536ff5cdd4c611fdebec4f3d1..e69cc782c9566f9f10d767b0dacaaeaebe2bb542 100644 (file)
@@ -8,13 +8,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=glib2
-PKG_VERSION:=2.56.1
-PKG_RELEASE:=1
+PKG_VERSION:=2.58.1
+PKG_RELEASE:=2
 
 PKG_SOURCE:=glib-$(PKG_VERSION).tar.xz
 PKG_BUILD_DIR:=$(BUILD_DIR)/glib-$(PKG_VERSION)
-PKG_SOURCE_URL:=@GNOME/glib/2.56
-PKG_HASH:=40ef3f44f2c651c7a31aedee44259809b6f03d3d20be44545cd7d177221c0b8d
+PKG_SOURCE_URL:=@GNOME/glib/2.58
+PKG_HASH:=97d6a9d926b6aa3dfaadad3077cfb43eec74432ab455dff14250c769d526d7d6
 
 PKG_BUILD_PARALLEL:=1
 HOST_BUILD_PARALLEL:=1
@@ -44,19 +44,23 @@ define Package/glib2/description
   The GLib library of C routines
 endef
 
+TARGET_CFLAGS += -Wno-error=implicit-function-declaration
+
 HOST_CONFIGURE_ARGS += \
        --disable-selinux \
        --with-libiconv=gnu \
        --with-pcre=internal \
-       --enable-libmount=no
+       --disable-libmount
 
 CONFIGURE_ARGS += \
        --enable-shared \
        --enable-static \
-       --enable-debug=no \
+       --disable-debug \
        --disable-selinux \
-       --enable-libmount=no \
+       --disable-libmount \
        --disable-fam \
+       --disable-gtk-doc-html \
+       --disable-man \
        --with-libiconv=gnu \
        --with-pcre=internal
 
@@ -69,6 +73,11 @@ CONFIGURE_VARS += \
        ac_cv_func_posix_getgrgid_r=yes
 
 define Build/InstallDev
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(CP) \
+               $(PKG_INSTALL_DIR)/usr/bin/* \
+               $(1)/usr/bin/
+
        $(INSTALL_DIR) $(1)/usr/include
        $(CP) \
                $(PKG_INSTALL_DIR)/usr/include/glib-2.0 \
index 0b510675a42870935e8d7d89725b089f5341f87e..dec6f3c9ece8b87ecf0eafdb217ac655aa36a333 100644 (file)
@@ -1,11 +1,8 @@
---- a/gtk-doc.make
+diff --git a/gtk-doc.make b/gtk-doc.make
+new file mode 100644
+index 0000000..14f18fd
+--- /dev/null
 +++ b/gtk-doc.make
-@@ -298,7 +298,7 @@ uninstall-local:
- #
- # Require gtk-doc when making dist
- #
--if HAVE_GTK_DOC
-+if ENABLE_GTK_DOC
- dist-check-gtkdoc: docs
- else
- dist-check-gtkdoc:
+@@ -0,0 +1,2 @@
++EXTRA_DIST =
++CLEANFILES =
index b5bbd157c16f1c717a9ac002df41b56ad120a9e5..a4217d508aa71f123aca526756a068b68b7ffb80 100644 (file)
@@ -8,16 +8,17 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=gnutls
-PKG_VERSION:=3.5.16
+PKG_VERSION:=3.5.19
 PKG_RELEASE:=1
 PKG_USE_MIPS16:=0
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=https://www.gnupg.org/ftp/gcrypt/gnutls/v3.5
-PKG_HASH:=0924dec90c37c05f49fec966eba3672dab4d336d879e5c06e06e13325cbfec25
+PKG_HASH:=1936eb64f03aaefd6eb16cef0567457777618573826b94d03376bb6a4afadc44
 #PKG_FIXUP:=autoreconf gettext-version
 PKG_MAINTAINER:=Nikos Mavrogiannopoulos <nmav@gnutls.org>
 PKG_LICENSE:=LGPLv2.1+
+PKG_CPE_ID:=cpe:/a:gnu:gnutls
 
 PKG_INSTALL:=1
 PKG_LIBTOOL_PATHS:=. lib
diff --git a/libs/hwloc/Makefile b/libs/hwloc/Makefile
new file mode 100644 (file)
index 0000000..bf2dbfa
--- /dev/null
@@ -0,0 +1,92 @@
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=hwloc
+PKG_VERSION:=2.0.1
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://download.open-mpi.org/release/$(PKG_NAME)/v2.0/
+PKG_HASH:=f1156df22fc2365a31a3dc5f752c53aad49e34a5e22d75ed231cd97eaa437f9d
+
+PKG_LICENSE:=BSD-3-Clause
+PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org>
+PKG_INSTALL:=1
+
+PKG_FIXUP:=autoreconf
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/hwloc/Default
+  SECTION:=libs
+  CATEGORY:=Libraries
+  TITLE:=Portable Hardware Locality
+  URL:=https://www.open-mpi.org/projects/hwloc/
+endef
+
+define Package/hwloc/Default/description
+  The Portable Hardware Locality (hwloc) software package provides a
+  portable abstraction (across OS, versions, architectures, ...) of the
+  hierarchical topology of modern architectures, including NUMA memory
+  nodes, sockets, shared caches, cores and simultaneous multithreading. It
+  also gathers various system attributes such as cache and memory
+  information as well as the locality of I/O devices such as network
+  interfaces, InfiniBand HCAs or GPUs.
+endef
+
+define Package/hwloc-utils
+$(call Package/hwloc/Default)
+  SECTION:=utils
+  CATEGORY:=Utilities
+  TITLE+= utilities
+  DEPENDS+= +libhwloc
+endef
+
+define Package/hwloc-utils/description
+$(call Package/hwloc/Default/description)
+  This package contains the hwloc utilities.
+endef
+
+define Package/libhwloc
+$(call Package/hwloc/Default)
+  SECTION:=libs
+  CATEGORY:=Libraries
+  TITLE+= libraries
+endef
+
+define Package/libhwloc/description
+$(call Package/hwloc/Default/description)
+  This package contains the hwloc libraries.
+endef
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(STAGING_DIR)/usr/include
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/hwloc.h $(STAGING_DIR)/usr/include/
+       $(INSTALL_DIR) $(STAGING_DIR)/usr/include/hwloc
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/hwloc/*.h $(STAGING_DIR)/usr/include/hwloc/
+       $(INSTALL_DIR) $(STAGING_DIR)/usr/include/hwloc/autogen
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/hwloc/autogen/*.h $(STAGING_DIR)/usr/include/hwloc/autogen/
+       $(INSTALL_DIR) $(STAGING_DIR)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib* $(STAGING_DIR)/usr/lib/
+       $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
+       $(INSTALL_DATA) \
+               $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/*.pc \
+               $(1)/usr/lib/pkgconfig
+endef
+
+define Package/hwloc-utils/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(CP) $(PKG_INSTALL_DIR)/usr/bin/* $(1)/usr/bin/
+endef
+
+define Package/libhwloc/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/*.so* $(1)/usr/lib/
+endef
+
+$(eval $(call BuildPackage,hwloc-utils))
+$(eval $(call BuildPackage,libhwloc))
index 6cfd23b6cf4089b3996bf4c81261f87f07edb7cb..43f30d510f34935d669a0022385cab41816ed510 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=icu4c
-PKG_VERSION:=62.1
+PKG_VERSION:=63.1
 PKG_RELEASE:=1
 
-PKG_SOURCE:=$(PKG_NAME)-62_1-src.tgz
+PKG_SOURCE:=$(PKG_NAME)-63_1-src.tgz
 PKG_SOURCE_URL:=http://download.icu-project.org/files/$(PKG_NAME)/$(PKG_VERSION)
-PKG_HASH:=3dd9868d666350dda66a6e305eecde9d479fb70b30d5b55d78a1deffb97d5aa3
+PKG_HASH:=05c490b69454fce5860b7e8e2821231674af0a11d7ef2febea9a32512998cb9d
 
 PKG_LICENSE:=ICU-1.8.1+
 PKG_LICENSE_FILES:=LICENSE
@@ -40,6 +40,37 @@ define Package/icu
   DEPENDS:=+libstdcpp +libpthread
 endef
 
+define Package/icu/description
+  ICU is a mature, widely used set of C/C++ and Java libraries providing Unicode and Globalization support for software applications. ICU is widely portable and gives applications the same results on all platforms and between C/C++ and Java software.
+  This package supports C/C++.
+endef
+
+define Package/icu-full-data
+  SECTION:=libs
+  CATEGORY:=Libraries
+  TITLE:=Full ICU Data
+  URL:=http://icu-project.org
+  DEPENDS:=+icu
+endef
+
+define Package/icu-full-data/description
+  ICU makes use of a wide variety of data tables to provide many of its services. Examples include converter mapping tables, collation rules, transliteration rules, break iterator rules and dictionaries, and other locale data.
+  This package contains the complete data library provided by ICU.
+  A custom data library can be generated at http://apps.icu-project.org/datacustom/
+endef
+
+define Package/icu-data-tools
+  SECTION:=libs
+  CATEGORY:=Libraries
+  TITLE:=ICU Data manipulation tools
+  URL:=http://icu-project.org
+  DEPENDS:=+icu
+endef
+
+define Package/icu-data-tools/description
+ This package provides tools for manipulating ICU data.
+endef
+
 CONFIGURE_CMD:= ./runConfigureICU
 CONFIGURE_ARGS:= \
        Linux/gcc \
@@ -57,7 +88,7 @@ CONFIGURE_ARGS:= \
        --disable-tracing \
        --disable-extras \
        --enable-dyload \
-       --disable-tools \
+       --with-data-packaging=archive \
        --disable-tests \
        --disable-samples \
        --with-cross-build="$(STAGING_DIR_HOSTPKG)/share/icu/$(PKG_VERSION)" \
@@ -105,5 +136,20 @@ define Package/icu/install
        $(CP) $(PKG_INSTALL_DIR)/usr/lib/*.so* $(1)/usr/lib/
 endef
 
-$(eval $(call BuildPackage,icu))
+define Package/icu-full-data/install
+       $(INSTALL_DIR)  $(1)/usr/share/icu/$(PKG_VERSION)
+       $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/icu/$(PKG_VERSION)/icudt*.dat \
+               $(1)/usr/share/icu/$(PKG_VERSION)/
+endef
+
+define Package/icu-data-tools/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/* $(1)/usr/bin/
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/* $(1)/usr/sbin/
+endef
+
 $(eval $(call HostBuild))
+$(eval $(call BuildPackage,icu))
+$(eval $(call BuildPackage,icu-full-data))
+$(eval $(call BuildPackage,icu-data-tools))
index cada77ff23eb5c9506f746af82e836926c370d41..55dc4859da4eacfade57fd90f762c7e17821bbcc 100644 (file)
@@ -2,11 +2,11 @@ diff --git a/Makefile.in b/Makefile.in
 index 9db6c52..6aa2273 100644
 --- a/Makefile.in
 +++ b/Makefile.in
-@@ -186,7 +186,6 @@ install-icu: $(INSTALLED_BUILT_FILES)
+@@ -190,7 +190,6 @@ install-icu: $(INSTALLED_BUILT_FILES)
        $(INSTALL_SCRIPT) $(top_srcdir)/install-sh $(DESTDIR)$(pkgdatadir)/install-sh
        @$(MKINSTALLDIRS) $(DESTDIR)$(libdir)/pkgconfig
        $(INSTALL_DATA) $(ALL_PKGCONFIG_FILES) $(DESTDIR)$(libdir)/pkgconfig/
 -      $(INSTALL_DATA) $(top_srcdir)/../LICENSE $(DESTDIR)$(pkgdatadir)/LICENSE
+ ifeq ($(INSTALL_ICU_CONFIG),true)
        $(INSTALL_SCRIPT) $(top_builddir)/config/icu-config $(DESTDIR)$(bindir)/icu-config
-       $(INSTALL_DATA) $(top_builddir)/config/Makefile.inc $(DESTDIR)$(pkglibdir)/Makefile.inc
-       $(INSTALL_DATA) $(top_builddir)/config/pkgdata.inc $(DESTDIR)$(pkglibdir)/pkgdata.inc
+ endif
diff --git a/libs/keyutils/Makefile b/libs/keyutils/Makefile
new file mode 100644 (file)
index 0000000..91b5ca8
--- /dev/null
@@ -0,0 +1,47 @@
+# 
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=keyutils
+PKG_VERSION:=1.5.10
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
+PKG_SOURCE_URL:=http://people.redhat.com/dhowells/keyutils/
+PKG_HASH:=115c3deae7f181778fd0e0ffaa2dad1bf1fe2f5677cf2e0e348cdb7a1c93afb6
+
+PKG_FIXUP:=libtool
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/libkeyutils
+  SECTION:=libs
+  CATEGORY:=Libraries
+  TITLE:=Key utilities library
+  URL:=http://people.redhat.com/dhowells/keyutils/
+endef
+
+define Package/keyutils/description
+  Key utilities library
+endef
+
+define Build/Install
+       make -C $(PKG_BUILD_DIR) DESTDIR=$(PKG_INSTALL_DIR) LIBDIR=/usr/lib install
+endef
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(1)/usr/include
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/* $(1)/usr/include/
+       $(INSTALL_DIR) $(1)/usr/lib/
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libkeyutils.{a,so*} $(1)/usr/lib/
+endef
+
+define Package/libkeyutils/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libkeyutils.so* $(1)/usr/lib/
+endef
+
+$(eval $(call BuildPackage,libkeyutils))
diff --git a/libs/keyutils/patches/03-cifs.patch b/libs/keyutils/patches/03-cifs.patch
new file mode 100644 (file)
index 0000000..6d87633
--- /dev/null
@@ -0,0 +1,13 @@
+Author: Marcus Meissner <meissner@suse.de>
+Description: Added 2 cifs helpers to request-key.conf (for CIFS DFS support)
+
+diff -Naurp keyutils.orig/request-key.conf keyutils/request-key.conf
+--- keyutils.orig/request-key.conf     2011-08-22 11:46:30.332025250 +0200
++++ keyutils/request-key.conf  2011-08-22 11:49:40.096967441 +0200
+@@ -38,4 +38,6 @@ create  user    debug:*         expired
+ create  user    debug:*         revoked         /bin/keyctl reject %k 30 %c %S
+ create        user    debug:loop:*    *               |/bin/cat
+ create        user    debug:*         *               /usr/share/keyutils/request-key-debug.sh %k %d %c %S
++create        cifs.spnego     *       *               /usr/sbin/cifs.upcall -c %k
++create        dns_resolver    *       *               /usr/sbin/cifs.upcall %k
+ negate        *       *               *               /bin/keyctl negate %k 30 %S
diff --git a/libs/keyutils/patches/04-cflags.patch b/libs/keyutils/patches/04-cflags.patch
new file mode 100644 (file)
index 0000000..44f4baa
--- /dev/null
@@ -0,0 +1,19 @@
+Author: Nobuhiro Iwamatsu <iwamatsu@debian.org>
+Description: Avoid setting Intel Architecture specific CFLAGS (Closes: #638925).
+
+diff -Naurp keyutils.orig/Makefile keyutils/Makefile
+--- keyutils.orig/Makefile     2011-08-22 11:51:20.521464216 +0200
++++ keyutils/Makefile  2011-08-24 19:17:09.855361713 +0200
+@@ -56,12 +56,10 @@ BUILDFOR   := $(shell file /usr/bin/make |
+ LNS           := ln -sf
+ ifeq ($(BUILDFOR),32-bit)
+-CFLAGS                += -m32
+ LIBDIR                := /lib
+ USRLIBDIR     := /usr/lib
+ else
+ ifeq ($(BUILDFOR),64-bit)
+-CFLAGS                += -m64
+ LIBDIR                := /lib64
+ USRLIBDIR     := /usr/lib64
+ endif
index d2751c0d3b0e07bb2629785a04897d6e5057ec2d..845bfff40bc47d0db9394d049ab3eb914b04e675 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=ldns
 PKG_VERSION:=1.7.0
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=http://www.nlnetlabs.nl/downloads/ldns
@@ -17,7 +17,7 @@ PKG_HASH:=c19f5b1b4fb374cfe34f4845ea11b1e0551ddc67803bd6ddd5d2a20f0997a6cc
 
 PKG_LICENSE:=BSD-3-Clause
 PKG_LICENSE_FILES:=LICENSE
-PKG_MAINTAINER:=Nicolas Thill <nico@openwrt.org>
+PKG_MAINTAINER:=
 
 PKG_FIXUP:=autoreconf
 PKG_INSTALL:=1
diff --git a/libs/ldns/patches/100-CVE-2017-1000231.patch b/libs/ldns/patches/100-CVE-2017-1000231.patch
new file mode 100644 (file)
index 0000000..2c2abe8
--- /dev/null
@@ -0,0 +1,28 @@
+From c8391790c96d4c8a2c10f9ab1460fda83b509fc2 Mon Sep 17 00:00:00 2001
+From: Willem Toorop <willem@nlnetlabs.nl>
+Date: Thu, 27 Apr 2017 00:14:58 +0200
+Subject: [PATCH] Check parse limit before t increment
+
+Thanks Stephan Zeisberg
+---
+ parse.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/parse.c b/parse.c
+index e68627c..947dbb8 100644
+--- a/parse.c
++++ b/parse.c
+@@ -118,6 +118,10 @@ ldns_fget_token_l(FILE *f, char *token, const char *delim, size_t limit, int *li
+                       if (line_nr) {
+                               *line_nr = *line_nr + 1;
+                       }
++                      if (limit > 0 && (i >= limit || (size_t)(t-token) >= limit)) {
++                              *t = '\0';
++                              return -1;
++                      }
+                       *t++ = ' ';
+                       prev_c = c;
+                       continue;
+-- 
+2.9.5
+
diff --git a/libs/ldns/patches/101-CVE-2017-1000232.patch b/libs/ldns/patches/101-CVE-2017-1000232.patch
new file mode 100644 (file)
index 0000000..25be44d
--- /dev/null
@@ -0,0 +1,30 @@
+From 3bdeed02505c9bbacb3b64a97ddcb1de967153b7 Mon Sep 17 00:00:00 2001
+From: Willem Toorop <willem@nlnetlabs.nl>
+Date: Thu, 27 Apr 2017 00:25:20 +0200
+Subject: [PATCH] bugfix #1257: Free after reallocing to 0 size
+
+Thanks Stephan Zeisberg
+---
+ str2host.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/str2host.c b/str2host.c
+index b274b17..f2a317b 100644
+--- a/str2host.c
++++ b/str2host.c
+@@ -1525,8 +1525,10 @@ ldns_str2rdf_long_str(ldns_rdf **rd, const char *str)
+       if (! str) {
+               return LDNS_STATUS_SYNTAX_BAD_ESCAPE;
+       }
+-      length = (size_t)(dp - data);
+-
++      if (!(length = (size_t)(dp - data))) {
++              LDNS_FREE(data);
++              return LDNS_STATUS_SYNTAX_EMPTY;
++      }
+       /* Lose the overmeasure */
+       data = LDNS_XREALLOC(dp = data, uint8_t, length);
+       if (! data) {
+-- 
+2.9.5
+
diff --git a/libs/libcups/Makefile b/libs/libcups/Makefile
new file mode 100644 (file)
index 0000000..5755bd9
--- /dev/null
@@ -0,0 +1,93 @@
+#
+# Copyright (C) 2006-2012 OpenWrt.org
+# Copyright (C) 2017-2018 Luiz Angelo Daros de Luca <luizluca@gmail.com>
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=cups
+PKG_VERSION:=2.2.8
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-source.tar.gz
+PKG_SOURCE_URL:=https://github.com/apple/cups/releases/download/v$(PKG_VERSION)/
+PKG_HASH:=3968fc1d26fc48727508db1c1380e36c6694ab90177fd6920aec5f6cc73af9e4
+PKG_MAINTAINER:=Luiz Angelo Daros de Luca <luizluca@gmail.com>
+PKG_LICENSE:=GPL-2.0
+PKG_LICENSE_FILES:=LICENSE.txt
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/libcups/Default
+  URL:=http://www.cups.org/
+  SUBMENU:=Printing
+endef
+
+define Package/libcups
+$(call Package/cups/Default)
+  SECTION:=libs
+  CATEGORY:=Libraries
+  DEPENDS:=+zlib +libpthread +libpng +libjpeg +libusb-1.0
+  TITLE:=Common UNIX Printing System - Core library
+endef
+
+define Package/libcups/description
+       Common UNIX Printing System - Core library
+endef
+
+TARGET_LDFLAGS+=-Wl,-rpath-link=$(STAGING_DIR)/usr/lib
+
+CONFIGURE_ARGS+=--with-cups-user="nobody" \
+               --with-cups-group="nogroup" \
+               --with-components="core" \
+               --with-pdftops="none" \
+               --without-perl \
+               --without-python \
+               --without-php \
+               --enable-shared \
+               --enable-image \
+               --enable-libusb \
+               --disable-acl \
+               --disable-dbus \
+               --disable-dnssd \
+               --disable-launchd \
+               --disable-ldap \
+               --disable-pam \
+               --disable-slp \
+               --disable-gnutls \
+               --disable-openssl \
+               --disable-cdsassl \
+               --disable-ssl \
+               --disable-gssapi \
+               --disable-tiff \
+               UNAME="Linux" \
+               LIBS="$(TARGET_LDFLAGS) -lz -lpng -ljpeg"
+
+define Build/Compile
+       $(MAKE) -C $(PKG_BUILD_DIR)/cups \
+               $(TARGET_CONFIGURE_OPTS) \
+               DSTROOT="$(PKG_INSTALL_DIR)" \
+               STRIP="/bin/true" \
+               libcups.so.2 install-libs install-headers
+       $(MAKE) -C $(PKG_BUILD_DIR)/filter \
+               $(TARGET_CONFIGURE_OPTS) \
+               DSTROOT="$(PKG_INSTALL_DIR)" \
+               STRIP="/bin/true" \
+               libcupsimage.so.2 install-libs install-headers
+       $(INSTALL_DIR) $(PKG_INSTALL_DIR)/usr/bin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/cups-config $(PKG_INSTALL_DIR)/usr/bin
+endef
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(2)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/cups-config $(2)/usr/bin/
+       $(INSTALL_DIR) $(1)/usr/include
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/cups $(1)/usr/include/
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib*/libcups*.so* $(1)/usr/lib/
+endef
+
+$(eval $(call BuildPackage,libcups))
index 724f9150faff05b1f9618a03100afd063f64b82a..6750af629616517f22cb616608f5b549d5570e5f 100644 (file)
@@ -10,7 +10,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=libdmapsharing
-PKG_VERSION:=3.9.1
+PKG_VERSION:=3.9.3
 PKG_RELEASE:=1
 
 PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org>
@@ -20,7 +20,7 @@ PKG_LICENSE_FILES:=COPYING
 
 PKG_SOURCE:=libdmapsharing-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://www.flyn.org/projects/libdmapsharing/
-PKG_HASH:=7567888f588d0ee0a017385c09c68ceec0383b3e9b47f0df061a4386a69b1610
+PKG_HASH:=a19df4b6fbd669fc95824860c235aa4aed33b69ecc25eb9d9d6dccb4e98c3f18
 
 PKG_FIXUP:=autoreconf
 PKG_INSTALL:=1
@@ -36,7 +36,7 @@ define Package/libdmapsharing
   CATEGORY:=Libraries
   DEPENDS:=+libsoup +mdnsresponder +gstreamer1-libs +gstreamer1-plugins-base +gst1-mod-app
   TITLE:=libdmapsharing
-  URL:=http://www.flyn.org/projects/libdmapsharing/
+  URL:=https://www.flyn.org/projects/libdmapsharing/
 endef
 
 define Package/libdmapsharing/decription
diff --git a/libs/libdnet/patches/001-compile.patch b/libs/libdnet/patches/001-compile.patch
deleted file mode 100644 (file)
index 54223c9..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
---- a/config/config.sub
-+++ b/config/config.sub
-@@ -228,7 +228,7 @@ case $basic_machine in
-       | a29k \
-       | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
-       | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
--      | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
-+      | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
-       | c4x | clipper \
-       | d10v | d30v | dlx | dsp16xx \
-       | fr30 | frv \
-@@ -290,7 +290,7 @@ case $basic_machine in
-       | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
-       | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
-       | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
--      | avr-* \
-+      | avr-* | avr32-* \
-       | bs2000-* \
-       | c[123]* | c30-* | [cjt]90-* | c54x-* \
-       | clipper-* | cydra-* \
index cf9e111d188e4eee856f82ef84a686c3e39b81b0..b0e797abb70b2983f798a352215e651013f63811 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=libev
-PKG_VERSION:=4.22
+PKG_VERSION:=4.24
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=http://dist.schmorp.de/libev/Attic/
-PKG_HASH:=736079e8ac543c74d59af73f9c52737b3bfec9601f020bf25a87a4f4d0f01bd6
+PKG_HASH:=973593d3479abdf657674a55afe5f78624b0e440614e2b8cb3a07f16d4d7f821
 PKG_LICENSE:=BSD-2-Clause
 PKG_MAINTAINER:=Karl Palsson <karlp@tweak.net.au>
 
index e8974e02adb99af336e208b26f47d7e14f6ba7d4..c54e7efce6cf6f0e67b743d17757ae1e246f2772 100644 (file)
@@ -8,21 +8,18 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=libfastjson
-PKG_VERSION:=0.99.2
-PKG_RELEASE:=2
+PKG_VERSION:=0.99.8
+PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_MIRROR_HASH:=66676a4c8de8c5399dfe1cfd064d140afca58e3d8187bae0a3dccdf83165d9d1
-PKG_SOURCE_PROTO:=git
-PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_URL:=https://github.com/rsyslog/libfastjson.git
-PKG_SOURCE_VERSION:=v$(PKG_VERSION)
+PKG_SOURCE_URL:=http://download.rsyslog.com/libfastjson
+PKG_HASH:=3544c757668b4a257825b3cbc26f800f59ef3c1ff2a260f40f96b48ab1d59e07
 
 PKG_MAINTAINER:=Dov Murik <dmurik@us.ibm.com>
 PKG_LICENSE:=MIT
 PKG_LICENSE_FILES:=COPYING
 
-PKG_FIXUP:=autoreconf
+PKG_BUILD_PARALLEL:=1
 PKG_INSTALL:=1
 
 include $(INCLUDE_DIR)/package.mk
index 7e151a84072c0e63aafc962e7a8e6e64a2ba231f..b587eb9e7061022410f73f8661905236286bb2fd 100644 (file)
@@ -8,15 +8,14 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=libfmt
-PKG_VERSION:=5.1.0
-PKG_RELEASE:=1
-
-PKG_SOURCE_PROTO:=git
-PKG_SOURCE_URL:=https://github.com/fmtlib/fmt.git
-PKG_SOURCE_VERSION:=$(PKG_VERSION)
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_MIRROR_HASH:=458debd5a0fbfdc36715ce63a0c1b1be84140ee9fbe28232a27c90448630469c
+PKG_VERSION:=5.2.1
+PKG_RELEASE:=2
+
+PKG_SOURCE_NAME:=fmt
+PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://codeload.github.com/fmtlib/$(PKG_SOURCE_NAME)/tar.gz/$(PKG_VERSION)?
+PKG_HASH:=3c812a18e9f72a88631ab4732a97ce9ef5bcbefb3235e9fd465f059ba204359b
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
 
 PKG_MAINTAINER:=Othmar Truniger <github@truniger.ch>
 PKG_LICENSE:=BSD-2-Clause
index 35c3bf006145760947cb8eedf48c6d04b0c9daad..fddf4034134c85ac7efca0a4592c5d96e6bdfd11 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=libftdi1
 PKG_VERSION:=1.4
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
 PKG_SOURCE_URL:=http://www.intra2net.com/en/developer/libftdi/download/
diff --git a/libs/libftdi1/patches/101-use-findSWIG.patch b/libs/libftdi1/patches/101-use-findSWIG.patch
new file mode 100644 (file)
index 0000000..91542ca
--- /dev/null
@@ -0,0 +1,11 @@
+--- a/python/CMakeLists.txt
++++ b/python/CMakeLists.txt
+@@ -3,7 +3,7 @@ option ( LINK_PYTHON_LIBRARY "Link again
+ if ( PYTHON_BINDINGS )
+   # workaround for cmake bug #0013449
+-  if ( NOT DEFINED CMAKE_FIND_ROOT_PATH )
++  if ( NOT DEFINED CMAKE_FIND_ROOT_PATH OR CMAKE_VERSION VERSION_GREATER_EQUAL 3.0.0 )
+     find_package ( SWIG )
+   else ()
+     find_program ( SWIG_EXECUTABLE NAMES swig2.0 swig )
diff --git a/libs/libgabe/Makefile b/libs/libgabe/Makefile
new file mode 100644 (file)
index 0000000..e7db323
--- /dev/null
@@ -0,0 +1,49 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=libgabe
+PKG_VERSION:=0.99
+PKG_RELEASE:=1
+
+PKG_MAINTAINER:=Daniel Golle <daniel@makrotopia.org>
+
+PKG_LICENSE:=GPLv2
+PKG_LICENSE_FILES:=COPYING
+
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
+PKG_SOURCE_URL:=https://github.com/schanzen/libgabe.git
+PKG_SOURCE_VERSION:=f72c594eaed35d5a506e8f6c091200a73e17e702
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_VERSION).tar.xz
+PKG_MIRROR_HASH:=cc5527f7976d904d6c50f40612c5b3d0617342cfc8cf856434a305cfb42e27ff
+
+PKG_FIXUP:=autoreconf
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/libgabe
+  SECTION:=libs
+  CATEGORY:=Libraries
+  DEPENDS:=+glib2 +libgcrypt +libgmp +libpbc
+  TITLE:=Ciphertext-Policy Attribute-Based Encryption
+  URL:=https://github.com/schanzen/libgabe
+endef
+
+define Package/libgabe/description
+  This is a fork of the libbswabe library by John Bethencourt
+  (http://hms.isi.jhu.edu/acsc/cpabe/) replacing openssl with libgcrypt
+  and fixing some bugs.
+endef
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(1)/usr/include/
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/* $(1)/usr/include/
+       $(INSTALL_DIR) $(1)/usr/lib/
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/* $(1)/usr/lib/
+endef
+
+define Package/libgabe/install
+# static library only
+endef
+
+$(eval $(call BuildPackage,libgabe))
index 2ab3263a2cce9f9f775931af8784c1eb2de5c831..0c5ee7c41f3100a5c8de0a5dfa8d4309b652194b 100644 (file)
@@ -1,17 +1,21 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=glog
-PKG_RELEASE:=1
-PKG_SOURCE_PROTO:=git
-PKG_SOURCE_URL:=https://github.com/google/glog.git
-PKG_SOURCE_VERSION:=v0.3.5
-PKG_MIRROR_HASH:=4677fba927e2d9cdcbc518c34c88465260d506d88072ea16217a8171310b9a1c
+PKG_VERSION:=0.3.5
+PKG_RELEASE:=2
 
-PKG_FIXUP:=autoreconf
-PKG_INSTALL:=1
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://codeload.github.com/google/glog/tar.gz/v$(PKG_VERSION)?
+PKG_HASH:=7580e408a2c0b5a89ca214739978ce6ff480b5e7d8d7698a2aa92fadc484d1e0
 
+PKG_LICENSE:=BSD-3-Clause
 PKG_LICENSE_FILE:=COPYING
 
+PKG_FIXUP:=autoreconf
+
+PKG_BUILD_PARALLEL:=1
+PKG_INSTALL:=1
+
 include $(INCLUDE_DIR)/package.mk
 
 define Package/glog
@@ -28,6 +32,8 @@ define Package/glog/description
   module.  Documentation for the implementation is in doc/.
 endef
 
+CONFIGURE_VARS+=ac_cv_have_libunwind_h=0
+
 TARGET_CXXFLAGS+=-std=c++11
 TARGET_LDFLAGS+=-lpthread
 
index 2d47f75a54094f9dac36bb931a1ac1b8621969f1..45286781878d44ed73d3a72a6ed5fed33d04d79f 100644 (file)
@@ -8,46 +8,41 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=libical
-PKG_VERSION:=1.0
+PKG_VERSION:=3.0.4
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_HASH:=7c39b3448e4927a2de2775d853f52b3aaeb42400970a3db0b01a78987e6ec0b7
-PKG_SOURCE_URL:=@SF/freeassociation
+PKG_HASH:=72b216e10233c3f60cb06062facf41f3b0f70615e5a60b47f9853341a0d5d145
+PKG_SOURCE_URL:=https://github.com/libical/libical/releases/download/v$(PKG_VERSION)/
 
-PKG_LICENSE:=LGPL-2.1 MPL-1.0
+PKG_LICENSE:=LGPL-2.1 MPL-2.0
 PKG_LICENSE_FILES:=COPYING
-PKG_MAINTAINER:=Nicolas Thill <nico@openwrt.org>
-
-PKG_FIXUP:=libtool
-PKG_INSTALL:=1
+PKG_MAINTAINER:=Jose Zapater <jzapater@gmail.com>
 
 include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/cmake.mk
 
 define Package/libical
   SECTION:=libs
   CATEGORY:=Libraries
-  TITLE:=iCal (RFC 2445) library
-  URL:=http://www.nabber.org/projects/ical/
+  TITLE:=An implementation of iCalendar protocols and data formats
+  URL:=http://libical.github.io/libical/
   DEPENDS:=+libpthread
 endef
 
 define Package/libical/description
- This package provides a a read/write library of classes for object oriented
- languages (Initial goals of PHP and Python) that implement and enforce the iCal
- standard (RFC 2445).
+ Libical is an Open Source implementation of the iCalendar protocols and protocol
+ data units. The iCalendar specification describes how calendar clients can
+ communicate with calendar servers so users can store their calendar data and
+ arrange meetings with other users.
+ Libical implements RFC2445, RFC2446 and some of RFC2447.
 endef
 
-CONFIGURE_ARGS += \
-       --enable-shared \
-       --enable-static \
-       --disable-cxx \
-       --disable-java \
-       --disable-python \
+CMAKE_OPTIONS += -DWITH_CXX_BINDINGS=false -DICAL_BUILD_DOCS=false -DICAL_GLIB=false
 
 define Build/InstallDev
-       $(INSTALL_DIR) $(1)/usr/include
-       $(CP) $(PKG_INSTALL_DIR)/usr/include/{ical.h,libical} $(1)/usr/include/
+       $(INSTALL_DIR) $(1)/usr/include/libical
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/libical/* $(1)/usr/include/libical/
        $(INSTALL_DIR) $(1)/usr/lib
        $(CP) $(PKG_INSTALL_DIR)/usr/lib/libical{,ss,vcal}.{a,so*} $(1)/usr/lib/
        $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
diff --git a/libs/libical/patches/001-disable-icu-and-bdb-support.patch b/libs/libical/patches/001-disable-icu-and-bdb-support.patch
new file mode 100644 (file)
index 0000000..25598b7
--- /dev/null
@@ -0,0 +1,83 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 1cc7180..295bc20 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -161,43 +161,43 @@ endif()
+ # libicu is highly recommended for RSCALE support
+ #  libicu can be found at http://www.icu-project.org
+ #  RSCALE info at http://tools.ietf.org/html/rfc7529
+-find_package(ICU)
+-set_package_properties(ICU PROPERTIES
+-  TYPE RECOMMENDED
+-  PURPOSE "For RSCALE (RFC7529) support"
+-)
+-add_feature_info(
+-  "RSCALE support (RFC7529)"
+-  ICU_FOUND
+-  "build in RSCALE support"
+-)
+-if(ICU_FOUND)
+-  set(REQUIRES_PRIVATE_ICU "Requires.private: icu-i18n") #for libical.pc
+-  set(HAVE_LIBICU 1)
+-  if(ICU_MAJOR_VERSION VERSION_GREATER 50)
+-    set(HAVE_ICU_DANGI TRUE)
+-  else()
+-    set(HAVE_ICU_DANGI FALSE)
+-  endif()
+-endif()
+-if(ICU_I18N_FOUND)
+-  set(HAVE_LIBICU_I18N 1)
+-endif()
++# find_package(ICU)
++# set_package_properties(ICU PROPERTIES
++#   TYPE RECOMMENDED
++#   PURPOSE "For RSCALE (RFC7529) support"
++# )
++# add_feature_info(
++#   "RSCALE support (RFC7529)"
++#   ICU_FOUND
++#   "build in RSCALE support"
++# )
++# if(ICU_FOUND)
++#   set(REQUIRES_PRIVATE_ICU "Requires.private: icu-i18n") #for libical.pc
++#   set(HAVE_LIBICU 1)
++#   if(ICU_MAJOR_VERSION VERSION_GREATER 50)
++#     set(HAVE_ICU_DANGI TRUE)
++#   else()
++#     set(HAVE_ICU_DANGI FALSE)
++#   endif()
++# endif()
++# if(ICU_I18N_FOUND)
++#   set(HAVE_LIBICU_I18N 1)
++# endif()
+ # compile in Berkeley DB support
+-find_package(BDB)
+-set_package_properties(BDB PROPERTIES
+-  TYPE OPTIONAL
+-  PURPOSE "For Berkeley DB storage support"
+-)
+-add_feature_info(
+-  "Berkeley DB storage support"
+-  BDB_FOUND
+-  "build in support for Berkeley DB storage"
+-)
+-if(BDB_FOUND)
+-  set(HAVE_BDB True)
+-endif()
++# find_package(BDB)
++# set_package_properties(BDB PROPERTIES
++#   TYPE OPTIONAL
++#   PURPOSE "For Berkeley DB storage support"
++# )
++# add_feature_info(
++#   "Berkeley DB storage support"
++#   BDB_FOUND
++#   "build in support for Berkeley DB storage"
++# )
++# if(BDB_FOUND)
++#   set(HAVE_BDB True)
++# endif()
+ # MSVC specific definitions
+ if(WIN32)
index 2d450d745b3dab686a94dcbc7f290d25194ba628..a513dcc8ad5e0c4d188b9fe570f52de79d3bca02 100644 (file)
@@ -52,6 +52,7 @@ define Package/libiio
   TITLE:=Library for interfacing with Linux IIO devices
   URL:=https://github.com/analogdevicesinc/libiio
   DEPENDS:=\
+           +zlib \
            +LIBIIO_USB_BACKEND:libusb-1.0 \
            +LIBIIO_NETWORK_BACKEND:libavahi-client \
            +LIBIIO_XML_BACKEND:libxml2
index 3160d9c0108dfd605e8da640ff4122734e2695a7..14bff561d9eb939c840f1661b529ec997c30bb7c 100644 (file)
@@ -8,27 +8,20 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=libnetconf2
+PKG_VERSION:=0.12-r1
 
 PKG_LICENSE:=BSD-3-Clause
 PKG_MAINTAINER:=Mislav Novakovic <mislav.novakovic@sartura.hr>
 
-PKG_VERSION:=0.11.37
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://codeload.github.com/CESNET/libnetconf2/tar.gz/v$(PKG_VERSION)?
+PKG_HASH:=86269d3f1bc85bb17d8823d214f9a676ee3b14ee18a0b87a230380df8503e8f5
 
-PKG_SOURCE_PROTO:=git
-PKG_SOURCE_VERSION:=46d56e08b161eb60f37410dae4d5e1a8a1bedd58
-PKG_MIRROR_HASH:=e12007b69eee42d1eb9925a93bcac7a71139583a76a59c78039b48cc20fc431f
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.xz
-PKG_SOURCE_URL:=https://github.com/cesnet/libnetconf2/
-PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION)
-
-PKG_BUILD_ROOT:=$(BUILD_DIR)/$(PKG_SOURCE_SUBDIR)
-PKG_BUILD_DIR:=$(PKG_BUILD_ROOT)
+CMAKE_INSTALL:=1
 
 PKG_BUILD_PARALLEL:=1
 PKG_INSTALL:=1
 
-CMAKE_INSTALL:=1
-
 include $(INCLUDE_DIR)/package.mk
 include $(INCLUDE_DIR)/cmake.mk
 
@@ -37,7 +30,7 @@ define Package/libnetconf2
   CATEGORY:=Libraries
   TITLE:=NETCONF library
   URL:=$(PKG_SOURCE_URL)
-  DEPENDS:= +libyang +libssh +libopenssl
+  DEPENDS:= +libyang +libssh +libopenssl +libpthread
 endef
 
 define Package/libnetconf2/description
diff --git a/libs/libnetconf2/patches/001-fix-pthread-error b/libs/libnetconf2/patches/001-fix-pthread-error
new file mode 100644 (file)
index 0000000..b15893e
--- /dev/null
@@ -0,0 +1,47 @@
+Index: libnetconf2-0.12-r1/CMakeLists.txt
+===================================================================
+--- libnetconf2-0.12-r1.orig/CMakeLists.txt
++++ libnetconf2-0.12-r1/CMakeLists.txt
+@@ -172,8 +172,10 @@ target_link_libraries(netconf2 ${CMAKE_T
+ # check availability for some pthread functions
+ set(CMAKE_REQUIRED_LIBRARIES pthread)
++include(CheckFunctionExists)
+ check_function_exists(pthread_spin_lock HAVE_SPINLOCK)
+ check_function_exists(pthread_mutex_timedlock HAVE_PTHREAD_MUTEX_TIMEDLOCK)
++check_function_exists(pthread_rwlockattr_setkind_np HAVE_PTHREAD_RWLOCKATTR_SETKIND_NP)
+ # dependencies - openssl
+ if(ENABLE_TLS OR ENABLE_DNSSEC OR ENABLE_SSH)
+Index: libnetconf2-0.12-r1/src/config.h.in
+===================================================================
+--- libnetconf2-0.12-r1.orig/src/config.h.in
++++ libnetconf2-0.12-r1/src/config.h.in
+@@ -65,4 +65,7 @@
+  */
+ #define NC_PS_QUEUE_SIZE @MAX_PSPOLL_THREAD_COUNT@
++/* Portability feature-check macros. */
++#cmakedefine HAVE_PTHREAD_RWLOCKATTR_SETKIND_NP
++
+ #endif /* NC_CONFIG_H_ */
+Index: libnetconf2-0.12-r1/src/session_server.c
+===================================================================
+--- libnetconf2-0.12-r1.orig/src/session_server.c
++++ libnetconf2-0.12-r1/src/session_server.c
+@@ -520,6 +520,7 @@ nc_server_init(struct ly_ctx *ctx)
+     errno=0;
+     if (pthread_rwlockattr_init(&attr) == 0) {
++#if defined(HAVE_PTHREAD_RWLOCKATTR_SETKIND_NP)
+         if (pthread_rwlockattr_setkind_np(&attr, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP) == 0) {
+             if (pthread_rwlock_init(&server_opts.endpt_lock, &attr) != 0) {
+                 ERR("%s: failed to init rwlock(%s).", __FUNCTION__, strerror(errno));
+@@ -530,6 +531,7 @@ nc_server_init(struct ly_ctx *ctx)
+         } else {
+             ERR("%s: failed set attribute (%s).", __FUNCTION__, strerror(errno));
+         }
++#endif
+         pthread_rwlockattr_destroy(&attr);
+     } else {
+         ERR("%s: failed init attribute (%s).", __FUNCTION__, strerror(errno));
index 448521260a37a802175093873ab317063e335b4f..559a229c9d11f680c5eaec0d86aad82ed319bbb7 100644 (file)
@@ -8,17 +8,18 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=libp11
-PKG_VERSION:=0.4.7
+PKG_VERSION:=0.4.9
 PKG_RELEASE:=1
-PKG_HASH:=32e486d4279e09174b63eb263bc840016ebfa80b0b154390c0539b211aec0452
+
+PKG_SOURCE_URL:=https://github.com/OpenSC/libp11/releases/download/$(PKG_NAME)-$(PKG_VERSION)/
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_HASH:=9d1c76d74c21ca224f96204982097ebc6b956f645b2b0b5f9c502a20e9ffcfd8
 
 PKG_MAINTAINER:=Daniel Golle <daniel@makrotopia.org>
 PKG_LICENSE:=LGPL-2.1+
 PKG_LICENSE_FILES:=COPYING
 
-PKG_SOURCE_URL:=https://github.com/OpenSC/libp11/releases/download/$(PKG_NAME)-$(PKG_VERSION)/
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-
+PKG_BUILD_PARALLEL:=1
 PKG_FIXUP:=libtool
 PKG_INSTALL:=1
 
index 9766b804555033b683cc99902eb5511424db2e09..a062c1b897793c8687d231c9ea7d2801c0008772 100644 (file)
@@ -1,6 +1,6 @@
 --- a/src/Makefile.am
 +++ b/src/Makefile.am
-@@ -47,13 +47,6 @@ pkcs11_la_LIBADD = $(libp11_la_OBJECTS)
+@@ -49,13 +49,6 @@ pkcs11_la_LIBADD = $(libp11_la_OBJECTS) $(OPENSSL_LIBS)
  pkcs11_la_LDFLAGS = $(AM_LDFLAGS) -module -shared -shrext $(SHARED_EXT) \
        -avoid-version -export-symbols "$(srcdir)/pkcs11.exports"
  
@@ -16,7 +16,7 @@
  mylibdir=$(libdir)
 --- a/src/Makefile.in
 +++ b/src/Makefile.in
-@@ -844,7 +844,7 @@ distdir: $(DISTFILES)
+@@ -872,7 +872,7 @@ distdir: $(DISTFILES)
          fi; \
        done
  check-am: all-am
@@ -25,7 +25,7 @@
  check: check-am
  all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) config.h
  installdirs:
-@@ -915,7 +915,7 @@ install-dvi-am:
+@@ -944,7 +944,7 @@ install-dvi-am:
  
  install-exec-am: install-enginesexecLTLIBRARIES install-libLTLIBRARIES
        @$(NORMAL_INSTALL)
@@ -34,7 +34,7 @@
  install-html: install-html-am
  
  install-html-am:
-@@ -960,7 +960,7 @@ uninstall-am: uninstall-enginesexecLTLIB
+@@ -989,7 +989,7 @@ uninstall-am: uninstall-enginesexecLTLIBRARIES \
  
  .MAKE: all check-am install-am install-exec-am install-strip
  
@@ -43,7 +43,7 @@
        clean-enginesexecLTLIBRARIES clean-generic \
        clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \
        ctags-am distclean distclean-compile distclean-generic \
-@@ -968,7 +968,7 @@ uninstall-am: uninstall-enginesexecLTLIB
+@@ -997,7 +997,7 @@ uninstall-am: uninstall-enginesexecLTLIBRARIES \
        dvi-am html html-am info info-am install install-am \
        install-data install-data-am install-dvi install-dvi-am \
        install-enginesexecLTLIBRARIES install-exec install-exec-am \
diff --git a/libs/libpbc/Makefile b/libs/libpbc/Makefile
new file mode 100644 (file)
index 0000000..5a72b6b
--- /dev/null
@@ -0,0 +1,49 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=libpbc
+PKG_VERSION:=0.5.14
+PKG_RELEASE:=1
+PKG_HASH:=772527404117587560080241cedaf441e5cac3269009cdde4c588a1dce4c23d2
+
+PKG_SOURCE:=pbc-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://crypto.stanford.edu/pbc/files/
+PKG_BUILD_DIR:=$(BUILD_DIR)/pbc-$(PKG_VERSION)
+PKG_INSTALL:=1
+
+PKG_MAINTAINER:=Daniel Golle <daniel@makrotopia.org>
+PKG_LICENSE:=LGPL-3.0+
+PKG_LICENSE_FILES:=COPYING
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/libpbc
+  SECTION:=libs
+  CATEGORY:=Libraries
+  TITLE:=The Pairing-Based Cryptography Library
+  URL:=https://crypto.stanford.edu/pbc/
+  DEPENDS:=+libgmp
+endef
+
+define Package/libpbc/description
+  Pairing-based cryptography is a relatively young area of cryptography
+  that revolves around a certain function with special properties.
+
+  The PBC (Pairing-Based Cryptography) library is a free C library
+  (released under the GNU Lesser General Public License) built on the GMP
+  library that performs the mathematical operations underlying
+  pairing-based cryptosystems.
+endef
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(1)/usr/include/pbc
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/pbc/*.h $(1)/usr/include/pbc
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpbc* $(1)/usr/lib/
+endef
+
+define Package/libpbc/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpbc.so.*  $(1)/usr/lib/
+endef
+
+$(eval $(call BuildPackage,libpbc))
diff --git a/libs/libpfring/Makefile b/libs/libpfring/Makefile
new file mode 100644 (file)
index 0000000..e7bedbd
--- /dev/null
@@ -0,0 +1,70 @@
+#
+# Copyright (C) 2017 Banglang Huang
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=libpfring
+PKG_VERSION:=7.2.0
+PKG_RELEASE:=1
+PKG_MAINTAINER:=Banglang Huang <banglang.huang@foxmail.com>
+
+PKG_LICENSE:=LGPL-2.1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://codeload.github.com/ntop/PF_RING/tar.gz/$(PKG_VERSION)?
+PKG_HASH:=5d349ac37a6ece5966bf606a6f131d628b98d88654c2f502d3c4b8bbf6ef9796
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/PF_RING-$(PKG_VERSION)
+
+PKG_INSTALL:=1
+PKG_FIXUP:=patch-libtool
+
+include $(INCLUDE_DIR)/package.mk
+
+CONFIGURE_PATH:=userland
+MAKE_PATH:=userland/lib
+
+define Package/libpfring
+  SECTION:=libs
+  CATEGORY:=Libraries
+  TITLE:=Library for PR_RING (package process framework)
+  URL:=https://github.com/ntop/pf_ring
+  DEPENDS:=+kmod-pf-ring +libpcap +libpthread
+endef
+
+define Package/libpfring/description
+  PF_RING is a high speed packet capture library that turns a commodity PC into an efficient and cheap
+  network measurement box suitable for both packet and active traffic analysis and manipulation.
+  Moreover, PF_RING opens totally new markets as it enables the creation of efficient application such as
+  traffic balancers or packet filters in a matter of lines of codes.
+endef
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(1)/usr/include/
+       $(CP) \
+               $(PKG_INSTALL_DIR)/usr/include/* \
+               $(1)/usr/include/
+
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) \
+               $(PKG_INSTALL_DIR)/usr/lib/libpfring.so* \
+               $(1)/usr/lib/
+endef
+
+CONFIGURE_VARS += \
+       MACHINE="$(ARCH)" \
+       ac_cv_lib_nl_3_nl_socket_alloc=no
+
+define Package/libpfring/install
+       $(INSTALL_DIR) $(1)/usr/lib/
+       $(CP) \
+               $(PKG_INSTALL_DIR)/usr/lib/libpfring.so* \
+               $(1)/usr/lib/
+       $(LN) libpfring.so $(1)/usr/lib/libpfring.so.1
+endef
+
+$(eval $(call BuildPackage,libpfring))
diff --git a/libs/libpfring/patches/0001-fix-cross-compiling.patch b/libs/libpfring/patches/0001-fix-cross-compiling.patch
new file mode 100644 (file)
index 0000000..5af3fb9
--- /dev/null
@@ -0,0 +1,32 @@
+--- a/userland/configure
++++ b/userland/configure
+@@ -3745,12 +3745,6 @@ fi
+ if test "$IS_FREEBSD" != "1"; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if r/w locks are supported" >&5
+ $as_echo_n "checking if r/w locks are supported... " >&6; }
+-  if test "$cross_compiling" = yes; then :
+-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-as_fn_error $? "cannot run test program while cross compiling
+-See \`config.log' for more details" "$LINENO" 5; }
+-else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+@@ -3763,7 +3757,7 @@ else
+ _ACEOF
+-if ac_fn_c_try_run "$LINENO"; then :
++if ac_fn_c_try_compile "$LINENO"; then :
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+ cat >>confdefs.h <<_ACEOF
+@@ -3777,7 +3771,6 @@ $as_echo "no" >&6; }
+ fi
+ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+   conftest.$ac_objext conftest.beam conftest.$ac_ext
+-fi
+ fi
diff --git a/libs/libpfring/patches/0002-fix-march-native.patch b/libs/libpfring/patches/0002-fix-march-native.patch
new file mode 100644 (file)
index 0000000..69bfde7
--- /dev/null
@@ -0,0 +1,21 @@
+--- a/userland/configure
++++ b/userland/configure
+@@ -3296,14 +3296,16 @@ fi
+ done
+-MACHINE=`uname -m`
++if test -z "$MACHINE"; then
++  MACHINE=`uname -m`
++fi
+ CFLAGS=""
+ SYS_LIBS=""
+ VER=`cat ../kernel/linux/pf_ring.h | grep RING_VERSION | head -1 | cut -d '"' -f 2`
+ MAJOR_VER=`cat ../kernel/linux/pf_ring.h | grep RING_VERSION | head -1 | cut -d '"' -f 2 | cut -d '.' -f 1`
+-NATIVE=`$CC -c -Q -march=native --help=target| grep "march" | xargs | cut -d ' ' -f 2`
++NATIVE=`$CC -c -Q --help=target| grep "march" | xargs | cut -d ' ' -f 2`
+ if test -f "lib/libs/libpfring_zc_x86_64_$NATIVE.a"; then
+   CFLAGS="-march=native -mtune=native $CFLAGS"
+   LIBARCH="_$NATIVE"
diff --git a/libs/libpfring/patches/0003-fix-strncpy.patch b/libs/libpfring/patches/0003-fix-strncpy.patch
new file mode 100644 (file)
index 0000000..f42c4e5
--- /dev/null
@@ -0,0 +1,10 @@
+--- a/userland/lib/pfring_mod.c
++++ b/userland/lib/pfring_mod.c
+@@ -24,6 +24,7 @@
+ #include <ifaddrs.h>
+ #ifdef ENABLE_BPF
++#include <string.h>
+ #include <pcap/pcap.h>
+ #include <pcap/bpf.h>
+ #include <pcap-int.h>
index fc48925c2775d3b76b25ec048bccfbae59b61277..18126dbfe74bc1b62e1d671ee00976a6d78532c4 100644 (file)
@@ -8,16 +8,17 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=libpng
-PKG_VERSION:=1.6.34
+PKG_VERSION:=1.6.35
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=@SF/libpng
-PKG_HASH:=2f1e960d92ce3b3abd03d06dfec9637dfbd22febf107a536b44f7a47c60659f6
+PKG_HASH:=23912ec8c9584917ed9b09c5023465d71709dce089be503c7867fec68a93bcd7
 PKG_MAINTAINER:=Jo-Philipp Wich <jo@mein.io>
 
 PKG_LICENSE:=Libpng GPL-2.0+ BSD-3-Clause
 PKC_LICENSE_FILES:=LICENSE contrib/gregbook/COPYING contrib/gregbook/LICENSE
+PKG_CPE_ID:=cpe:/a:libpng:libpng
 
 PKG_FIXUP:=autoreconf
 PKG_INSTALL:=1
index 71a1e02b672122c1f6c293aa22106db3e2ea7cc2..c9677c9ed20783bcc5d42f107826ffbe9c8c5daa 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=libpsl
 PKG_VERSION:=0.20.2
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org>
 
@@ -20,6 +20,7 @@ PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://github.com/rockdaboot/libpsl/releases/download/$(PKG_NAME)-$(PKG_VERSION)/
 PKG_HASH:=f8fd0aeb66252dfcc638f14d9be1e2362fdaf2ca86bde0444ff4d5cc961b560f
 
+PKG_BUILD_PARALLEL:=1
 PKG_INSTALL:=1
 
 include $(INCLUDE_DIR)/package.mk
@@ -36,7 +37,10 @@ define Package/libpsl/description
   C library to handle the Public Suffix List
 endef
 
-CONFIGURE_ARGS += --disable-rpath
+CONFIGURE_ARGS += \
+       --disable-gtk-doc-html \
+       --disable-man \
+       --disable-rpath
 
 define Build/InstallDev
        $(INSTALL_DIR) \
index 4b0b576a28c78060a4de6dabca331691d9849c05..9817f0eb57085c46eeb76886c35d2c8038783042 100644 (file)
@@ -8,18 +8,18 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=libseccomp
-PKG_VERSION:=2.2.1
+PKG_VERSION:=2.3.3
 PKG_RELEASE:=1
 PKG_USE_MIPS16:=0
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://github.com/seccomp/libseccomp/releases/download/v$(PKG_VERSION)/
-PKG_HASH:=0ba1789f54786c644af54cdffc9fd0dd0a8bb2b2ee153933f658855d2851a740
+PKG_HASH:=7fc28f4294cc72e61c529bedf97e705c3acf9c479a8f1a3028d4cd2ca9f3b155
 PKG_MAINTAINER:=Nikos Mavrogiannopoulos <nmav@gnutls.org>
 
+PKG_BUILD_PARALLEL:=1
 PKG_INSTALL:=1
 PKG_LIBTOOL_PATHS:=. lib
-PKG_CHECK_FORMAT_SECURITY:=0
 
 PKG_CONFIG_DEPENDS:= \
        CONFIG_KERNEL_SECCOMP
diff --git a/libs/libseccomp/patches/100-dont-use-linux-prctl.h-with-musl.patch b/libs/libseccomp/patches/100-dont-use-linux-prctl.h-with-musl.patch
deleted file mode 100644 (file)
index 4093ca3..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-Index: libseccomp-2.2.1/src/system.h
-===================================================================
---- libseccomp-2.2.1.orig/src/system.h
-+++ libseccomp-2.2.1/src/system.h
-@@ -23,7 +23,9 @@
- #define _SYSTEM_H
- #include <linux/filter.h>
-+#ifdef __GLIBC__
- #include <linux/prctl.h>
-+#endif
- #include "configure.h"
index 696ef761f2389d31d949fb5c86796e23dc713580..a7f949810b2e909d0ba2d5bdcd8f0be5a43255ed 100644 (file)
@@ -29,7 +29,6 @@ define Package/libsndfile
   TITLE:=Library for reading/writing audio files
   URL:=http://www.mega-nerd.com/libsndfile/
   MAINTAINER:=Peter Wagner <tripolar@gmx.at>
-  DEPENDS:=@!avr32
 endef
 
 define Package/libsndfile/description
index cc410c058d39e43766a883dad9b7974d7824e9fd..e6a372ee4c22fd6b814e7117af9312795a668da1 100644 (file)
@@ -32,7 +32,7 @@ define Package/libssh
   CATEGORY:=Libraries
   URL:=$(PKG_SOURCE_URL)
   TITLE:=SSH library
-  DEPENDS:=+libpthread +librt +zlib +libopenssl
+  DEPENDS:=+libpthread +librt +zlib +libopenssl @BROKEN
 endef
 
 define Package/libssh/description
index e5ca3e59856c1a9335d86892ebf1a8d4c932951a..5c0e4917cdd1fb3cec9d24622278647cfef71edd 100644 (file)
@@ -1,6 +1,4 @@
 #
-# Copyright (C) 2016 OpenWrt.org
-#
 # This is free software, licensed under the GNU General Public License v2.
 # See /LICENSE for more information.
 #
@@ -10,13 +8,13 @@ include $(TOPDIR)/rules.mk
 PKG_NAME:=talloc
 PKG_VERSION:=2.1.14
 MAJOR_VERSION:=2
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://www.samba.org/ftp/talloc
 PKG_HASH:=b185602756a628bac507fa8af8b9df92ace69d27c0add5dab93190ad7c3367ce
 
-PKG_MAINTAINER:=Lucile Quirion <lucile.quirion@savoirfairelinux.com>
+PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>
 PKG_LICENSE:=LGPL-3.0+
 
 PKG_BUILD_PARALLEL:=0
@@ -28,7 +26,7 @@ define Package/libtalloc
   SECTION:=libs
   CATEGORY:=Libraries
   TITLE:=Core memory allocator used in Samba
-  DEPENDS:=+USE_GLIBC:libbsd $(ICONV_DEPENDS) +libattr
+  DEPENDS:=$(ICONV_DEPENDS) +libattr
   URL:=https://talloc.samba.org/talloc/doc/html/index.html
 endef
 
diff --git a/libs/libtalloc/patches/100-Remove_libbsd_dependency_check.patch b/libs/libtalloc/patches/100-Remove_libbsd_dependency_check.patch
new file mode 100644 (file)
index 0000000..c98435a
--- /dev/null
@@ -0,0 +1,58 @@
+--- a/lib/replace/wscript
++++ b/lib/replace/wscript
+@@ -340,22 +340,13 @@ def configure(conf):
+     conf.CHECK_FUNCS('prctl dirname basename')
+-    strlcpy_in_bsd = False
++    # Not checking for libbsd
++    conf.CHECK_FUNCS('strlcpy strlcat')
++    conf.CHECK_FUNCS('getpeereid')
++    conf.CHECK_FUNCS_IN('setproctitle', 'setproctitle', headers='setproctitle.h')
++    conf.CHECK_FUNCS('setproctitle_init')
+-    # libbsd on some platforms provides strlcpy and strlcat
+-    if not conf.CHECK_FUNCS('strlcpy strlcat'):
+-        if conf.CHECK_FUNCS_IN('strlcpy strlcat', 'bsd', headers='bsd/string.h',
+-                               checklibc=True):
+-            strlcpy_in_bsd = True
+-    if not conf.CHECK_FUNCS('getpeereid'):
+-        conf.CHECK_FUNCS_IN('getpeereid', 'bsd', headers='sys/types.h bsd/unistd.h')
+-    if not conf.CHECK_FUNCS_IN('setproctitle', 'setproctitle', headers='setproctitle.h'):
+-        conf.CHECK_FUNCS_IN('setproctitle', 'bsd', headers='sys/types.h bsd/unistd.h')
+-    if not conf.CHECK_FUNCS('setproctitle_init'):
+-        conf.CHECK_FUNCS_IN('setproctitle_init', 'bsd', headers='sys/types.h bsd/unistd.h')
+-
+-    if not conf.CHECK_FUNCS('closefrom'):
+-        conf.CHECK_FUNCS_IN('closefrom', 'bsd', headers='bsd/unistd.h')
++    conf.CHECK_FUNCS('closefrom')
+     conf.CHECK_CODE('''
+                 struct ucred cred;
+@@ -698,9 +689,6 @@ def configure(conf):
+     # look for a method of finding the list of network interfaces
+     for method in ['HAVE_IFACE_GETIFADDRS', 'HAVE_IFACE_AIX', 'HAVE_IFACE_IFCONF', 'HAVE_IFACE_IFREQ']:
+-        bsd_for_strlcpy = ''
+-        if strlcpy_in_bsd:
+-            bsd_for_strlcpy = ' bsd'
+         if conf.CHECK_CODE('''
+                            #define %s 1
+                            #define NO_CONFIG_H 1
+@@ -713,7 +701,7 @@ def configure(conf):
+                            #include "test/getifaddrs.c"
+                            ''' % method,
+                            method,
+-                           lib='nsl socket' + bsd_for_strlcpy,
++                           lib='nsl socket',
+                            addmain=False,
+                            execute=True):
+             break
+@@ -761,7 +749,6 @@ def build(bld):
+                 break
+     extra_libs = ''
+-    if bld.CONFIG_SET('HAVE_LIBBSD'): extra_libs += ' bsd'
+     bld.SAMBA_SUBSYSTEM('LIBREPLACE_HOSTCC',
+         REPLACE_HOSTCC_SOURCE,
index 9e50f0b4f8105f22123151ef7d461d8454d23275..d7c8cd25bbec78e266fc35df10bc7dbf6163c15c 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=libtirpc
-PKG_VERSION:=1.0.3
-PKG_RELEASE:=2
+PKG_VERSION:=1.1.4
+PKG_RELEASE:=1
 
 PKG_SOURCE_URL:=@SF/libtirpc
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
-PKG_HASH:=86c3a78fc1bddefa96111dd233124c703b22a78884203c55c3e06b3be6a0fd5e
+PKG_HASH:=2ca529f02292e10c158562295a1ffd95d2ce8af97820e3534fe1b0e3aec7561d
 
 PKG_MAINTAINER:=Andy Walsh <andy.walsh44+github@gmail.com>
 PKG_LICENSE:=BSD-3-Clause
diff --git a/libs/libtirpc/patches/002-libtirpc-1.0.4-rc2.patch b/libs/libtirpc/patches/002-libtirpc-1.0.4-rc2.patch
deleted file mode 100644 (file)
index 35b38cf..0000000
+++ /dev/null
@@ -1,274 +0,0 @@
-diff --git a/src/clnt_dg.c b/src/clnt_dg.c
-index 04a2aba..eb5467f 100644
---- a/src/clnt_dg.c
-+++ b/src/clnt_dg.c
-@@ -160,15 +160,22 @@ clnt_dg_create(fd, svcaddr, program, version, sendsz, recvsz)
-       thr_sigsetmask(SIG_SETMASK, &newmask, &mask);
-       mutex_lock(&clnt_fd_lock);
-       if (dg_fd_locks == (int *) NULL) {
--              int cv_allocsz;
--              size_t fd_allocsz;
--              int dtbsize = __rpc_dtbsize();
-+              size_t cv_allocsz, fd_allocsz;
-+              unsigned int dtbsize = __rpc_dtbsize();
-+
-+              if ( (size_t) dtbsize > SIZE_MAX/sizeof(cond_t)) {
-+                      mutex_unlock(&clnt_fd_lock);
-+                      thr_sigsetmask(SIG_SETMASK, &(mask), NULL);
-+                      errno = EOVERFLOW;
-+                      goto err1;
-+              }
-               fd_allocsz = dtbsize * sizeof (int);
-               dg_fd_locks = (int *) mem_alloc(fd_allocsz);
-               if (dg_fd_locks == (int *) NULL) {
-                       mutex_unlock(&clnt_fd_lock);
-                       thr_sigsetmask(SIG_SETMASK, &(mask), NULL);
-+                      errno = ENOMEM;
-                       goto err1;
-               } else
-                       memset(dg_fd_locks, '\0', fd_allocsz);
-@@ -180,6 +187,7 @@ clnt_dg_create(fd, svcaddr, program, version, sendsz, recvsz)
-                       dg_fd_locks = (int *) NULL;
-                       mutex_unlock(&clnt_fd_lock);
-                       thr_sigsetmask(SIG_SETMASK, &(mask), NULL);
-+                      errno = ENOMEM;
-                       goto err1;
-               } else {
-                       int i;
-diff --git a/src/clnt_generic.c b/src/clnt_generic.c
-index e5a314f..3f3dabf 100644
---- a/src/clnt_generic.c
-+++ b/src/clnt_generic.c
-@@ -47,7 +47,6 @@
- extern bool_t __rpc_is_local_host(const char *);
- int __rpc_raise_fd(int);
--extern int __binddynport(int fd);
- #ifndef NETIDLEN
- #define       NETIDLEN 32
-@@ -341,8 +340,7 @@ clnt_tli_create(int fd, const struct netconfig *nconf,
-               servtype = nconf->nc_semantics;
-               if (!__rpc_fd2sockinfo(fd, &si))
-                       goto err;
--              if (__binddynport(fd) == -1)
--                      goto err;
-+              bindresvport(fd, NULL);
-       } else {
-               if (!__rpc_fd2sockinfo(fd, &si))
-                       goto err;
-diff --git a/src/clnt_vc.c b/src/clnt_vc.c
-index 6098c3a..3d775c7 100644
---- a/src/clnt_vc.c
-+++ b/src/clnt_vc.c
-@@ -63,6 +63,7 @@
- #include <string.h>
- #include <unistd.h>
- #include <signal.h>
-+#include <stdint.h>
- #include <rpc/rpc.h>
- #include "rpc_com.h"
-@@ -201,14 +202,25 @@ clnt_vc_create(fd, raddr, prog, vers, sendsz, recvsz)
-       thr_sigsetmask(SIG_SETMASK, &newmask, &mask);
-       mutex_lock(&clnt_fd_lock);
-       if (vc_fd_locks == (int *) NULL) {
--              int cv_allocsz, fd_allocsz;
--              int dtbsize = __rpc_dtbsize();
-+              size_t cv_allocsz, fd_allocsz;
-+              unsigned int dtbsize = __rpc_dtbsize();
-+              struct rpc_createerr *ce = &get_rpc_createerr();
-+
-+              if ( (size_t) dtbsize > SIZE_MAX/sizeof(cond_t)) {
-+                      mutex_unlock(&clnt_fd_lock);
-+                      thr_sigsetmask(SIG_SETMASK, &(mask), NULL);
-+                      ce->cf_stat = RPC_SYSTEMERROR;
-+                      ce->cf_error.re_errno = EOVERFLOW;
-+                      goto err;
-+              }
-               fd_allocsz = dtbsize * sizeof (int);
-               vc_fd_locks = (int *) mem_alloc(fd_allocsz);
-               if (vc_fd_locks == (int *) NULL) {
-                       mutex_unlock(&clnt_fd_lock);
-                       thr_sigsetmask(SIG_SETMASK, &(mask), NULL);
-+                      ce->cf_stat = RPC_SYSTEMERROR;
-+                      ce->cf_error.re_errno = ENOMEM;
-                       goto err;
-               } else
-                       memset(vc_fd_locks, '\0', fd_allocsz);
-@@ -221,6 +233,8 @@ clnt_vc_create(fd, raddr, prog, vers, sendsz, recvsz)
-                       vc_fd_locks = (int *) NULL;
-                       mutex_unlock(&clnt_fd_lock);
-                       thr_sigsetmask(SIG_SETMASK, &(mask), NULL);
-+                      ce->cf_stat = RPC_SYSTEMERROR;
-+                      ce->cf_error.re_errno = ENOMEM;
-                       goto err;
-               } else {
-                       int i;
-diff --git a/src/rpc_soc.c b/src/rpc_soc.c
-index af6c482..5a6eeb7 100644
---- a/src/rpc_soc.c
-+++ b/src/rpc_soc.c
-@@ -67,8 +67,6 @@
- extern mutex_t        rpcsoc_lock;
--extern int __binddynport(int fd);
--
- static CLIENT *clnt_com_create(struct sockaddr_in *, rpcprog_t, rpcvers_t,
-     int *, u_int, u_int, char *, int);
- static SVCXPRT *svc_com_create(int, u_int, u_int, char *);
-@@ -147,8 +145,7 @@ clnt_com_create(raddr, prog, vers, sockp, sendsz, recvsz, tp, flags)
-       bindaddr.maxlen = bindaddr.len =  sizeof (struct sockaddr_in);
-       bindaddr.buf = raddr;
--      if (__binddynport(fd) == -1)
--              goto err;
-+      bindresvport(fd, NULL);
-       cl = clnt_tli_create(fd, nconf, &bindaddr, prog, vers,
-                               sendsz, recvsz);
-       if (cl) {
-diff --git a/src/rpcb_clnt.c b/src/rpcb_clnt.c
-index a94fc73..e45736a 100644
---- a/src/rpcb_clnt.c
-+++ b/src/rpcb_clnt.c
-@@ -752,7 +752,7 @@ __try_protocol_version_2(program, version, nconf, host, tp)
-       client = getpmaphandle(nconf, host, &parms.r_addr);
-       if (client == NULL)
--              return (NULL);
-+              goto error;
-       /*
-        * Set retry timeout.
-@@ -771,11 +771,11 @@ __try_protocol_version_2(program, version, nconf, host, tp)
-       if (clnt_st != RPC_SUCCESS) {
-               rpc_createerr.cf_stat = RPC_PMAPFAILURE;
-               clnt_geterr(client, &rpc_createerr.cf_error);
--              return (NULL);
-+              goto error;
-       } else if (port == 0) {
-               pmapaddress = NULL;
-               rpc_createerr.cf_stat = RPC_PROGNOTREGISTERED;
--              return (NULL);
-+              goto error;
-       }
-       port = htons(port);
-       CLNT_CONTROL(client, CLGET_SVC_ADDR, (char *)&remote);
-@@ -789,14 +789,24 @@ __try_protocol_version_2(program, version, nconf, host, tp)
-                       free(pmapaddress);
-                       pmapaddress = NULL;
-               }
--              return (NULL);
-+              goto error;
-       }
-       memcpy(pmapaddress->buf, remote.buf, remote.len);
-       memcpy(&((char *)pmapaddress->buf)[sizeof (short)],
-                       (char *)(void *)&port, sizeof (short));
-       pmapaddress->len = pmapaddress->maxlen = remote.len;
-+      CLNT_DESTROY(client);
-       return pmapaddress;
-+
-+error:
-+      if (client) {
-+              CLNT_DESTROY(client);
-+              client = NULL;
-+
-+      }
-+      return (NULL);
-+
- }
- #endif
-@@ -836,6 +846,7 @@ __rpcb_findaddr_timed(program, version, nconf, host, clpp, tp)
-       struct netbuf *address = NULL;
-       rpcvers_t start_vers = RPCBVERS4;
-       struct netbuf servaddr;
-+      struct rpc_err rpcerr;
-       /* parameter checking */
-       if (nconf == NULL) {
-@@ -892,7 +903,8 @@ __rpcb_findaddr_timed(program, version, nconf, host, clpp, tp)
-               clnt_st = CLNT_CALL(client, (rpcproc_t)RPCBPROC_GETADDR,
-                   (xdrproc_t) xdr_rpcb, (char *)(void *)&parms,
-                   (xdrproc_t) xdr_wrapstring, (char *)(void *) &ua, *tp);
--              if (clnt_st == RPC_SUCCESS) {
-+              switch (clnt_st) {
-+              case RPC_SUCCESS:
-                       if ((ua == NULL) || (ua[0] == 0)) {
-                               /* address unknown */
-                               rpc_createerr.cf_stat = RPC_PROGNOTREGISTERED;
-@@ -914,12 +926,15 @@ __rpcb_findaddr_timed(program, version, nconf, host, clpp, tp)
-                           (char *)(void *)&servaddr);
-                       __rpc_fixup_addr(address, &servaddr);
-                       goto done;
--              } else if (clnt_st == RPC_PROGVERSMISMATCH) {
--                      struct rpc_err rpcerr;
-+              case RPC_PROGVERSMISMATCH:
-                       clnt_geterr(client, &rpcerr);
-                       if (rpcerr.re_vers.low > RPCBVERS4)
-                               goto error;  /* a new version, can't handle */
--              } else if (clnt_st != RPC_PROGUNAVAIL) {
-+                      /* Try the next lower version */
-+              case RPC_PROGUNAVAIL:
-+              case RPC_CANTDECODEARGS:
-+                      break;
-+              default:
-                       /* Cant handle this error */
-                       rpc_createerr.cf_stat = clnt_st;
-                       clnt_geterr(client, &rpc_createerr.cf_error);
-@@ -929,7 +944,7 @@ __rpcb_findaddr_timed(program, version, nconf, host, clpp, tp)
- #ifdef PORTMAP        /* Try version 2 for TCP or UDP */
-       if (strcmp(nconf->nc_protofmly, NC_INET) == 0) {
--              address = __try_protocol_version_2(program, 2, nconf, host, tp);
-+              address = __try_protocol_version_2(program, version, nconf, host, tp);
-               if (address == NULL)
-                       goto error;
-       }
-diff --git a/src/xdr_stdio.c b/src/xdr_stdio.c
-index 4410262..846c7bf 100644
---- a/src/xdr_stdio.c
-+++ b/src/xdr_stdio.c
-@@ -38,6 +38,7 @@
-  */
- #include <stdio.h>
-+#include <stdint.h>
- #include <arpa/inet.h>
- #include <rpc/types.h>
-@@ -103,10 +104,12 @@ xdrstdio_getlong(xdrs, lp)
-       XDR *xdrs;
-       long *lp;
- {
-+      int32_t mycopy;
--      if (fread(lp, sizeof(int32_t), 1, (FILE *)xdrs->x_private) != 1)
-+      if (fread(&mycopy, sizeof(int32_t), 1, (FILE *)xdrs->x_private) != 1)
-               return (FALSE);
--      *lp = (long)ntohl((u_int32_t)*lp);
-+
-+      *lp = (long)ntohl(mycopy);
-       return (TRUE);
- }
-@@ -115,8 +118,14 @@ xdrstdio_putlong(xdrs, lp)
-       XDR *xdrs;
-       const long *lp;
- {
--      long mycopy = (long)htonl((u_int32_t)*lp);
-+      int32_t mycopy;
-+
-+#if defined(_LP64)
-+      if ((*lp > UINT32_MAX) || (*lp < INT32_MIN))
-+              return (FALSE);
-+#endif
-+      mycopy = (int32_t)htonl((int32_t)*lp);
-       if (fwrite(&mycopy, sizeof(int32_t), 1, (FILE *)xdrs->x_private) != 1)
-               return (FALSE);
-       return (TRUE);
index 035b6400a58825c9f1d238b9fdfccc491ab68d20..8dd2cea15f3ac7ea95b0907266d4080057e81727 100644 (file)
@@ -1,22 +1,16 @@
-#
-# Copyright (C) 2006-2014 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=libupnp
-PKG_VERSION:=1.6.19
-PKG_RELEASE:=2
+PKG_VERSION:=1.6.25
+PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
 PKG_SOURCE_URL:=@SF/pupnp
-PKG_HASH:=b3142b39601243b50532eec90f4a27dba85eb86f58d4b849ac94edeb29d9b22a
+PKG_HASH:=c5a300b86775435c076d58a79cc0d5a977d76027d2a7d721590729b7f369fa43
 PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>
 
 PKG_FIXUP:=autoreconf
+PKG_BUILD_PARALLEL:=1
 PKG_INSTALL:=1
 
 include $(INCLUDE_DIR)/package.mk
index 063c478b51cae72341738dd579e4434d781b0174..08dc939fa7c61d8e3a7891410a375eab7ac10b08 100644 (file)
@@ -8,19 +8,18 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=libuvc
 
-PKG_VERSION=0.0.5-20140812-$(PKG_SOURCE_VERSION)
+PKG_VERSION:=0.0.6
 PKG_RELEASE:=1
 PKG_MAINTAINER:=Roger D <rogerdammit@gmail.com>
 
-PKG_SOURCE_PROTO:=git
-PKG_SOURCE_URL:=https://github.com/ktossell/libuvc.git
-PKG_SOURCE_VERSION:=2c6403405872aa865999b95ba15944295adf6c38
-
-PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_MIRROR_HASH:=93f33620e00276989211d9c129a6d8b5e0f45df8d23235ff0c53c823c52a5ef5
+PKG_SOURCE_URL:=https://codeload.github.com/ktossell/libuvc/tar.gz/v$(PKG_VERSION)?
+PKG_HASH:=42175a53c1c704365fdc782b44233925e40c9344fbb7f942181c1090f06e2873
+
 PKG_LICENSE:=BSD
+PKG_LICENSE_FILES:=LICENSE.txt
 
+PKG_BUILD_PARALLEL:=1
 PKG_INSTALL:=1
 CMAKE_INSTALL:=1
 
@@ -32,11 +31,11 @@ define Package/libuvc
        CATEGORY:=Libraries
        TITLE:=libuvc
        DEPENDS:=+libusb-1.0 +libjpeg
-       URL:=https://int80k.com/libuvc
+       URL:=https://int80k.com/libuvc
 endef
 
 define Package/libuvc/description
- This package contains libuvc is a cross-platform library for USB video devices, 
+ This package contains libuvc is a cross-platform library for USB video devices,
  built atop libusb.
 endef
 
old mode 100755 (executable)
new mode 100644 (file)
index ebf2cf0..b56f9d2
@@ -8,13 +8,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=libuwsc
-PKG_VERSION:=2.0.4
+PKG_VERSION:=3.1.0
 PKG_RELEASE:=1
 
-PKG_SOURCE_PROTO:=git
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_VERSION:=v$(PKG_VERSION)
-PKG_SOURCE_URL=https://github.com/zhaojh329/libuwsc.git
-PKG_MIRROR_HASH:=91c5964088d6df591e10c40deffef0be47f5c06896fcf27a7afe83c8e49b1a74
+PKG_SOURCE_URL=https://codeload.github.com/zhaojh329/libuwsc/tar.gz/v$(PKG_VERSION)?
+PKG_HASH:=13355ee4194716843c6cc773e9e616bb97cf64a4dd201dd1a5e3e9f8bd0de1dc
 CMAKE_INSTALL:=1
 
 PKG_BUILD_DIR=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_SOURCE_SUBDIR)
@@ -27,56 +27,38 @@ PKG_MAINTAINER:=Jianhui Zhao <jianhuizhao329@gmail.com>
 include $(INCLUDE_DIR)/package.mk
 include $(INCLUDE_DIR)/cmake.mk
 
-define Package/libuwsc/default
+define Package/libuwsc/Default
+  TITLE:=A lightweight WebSocket client library based on libev
   SECTION:=libs
   CATEGORY:=Libraries
   SUBMENU:=Networking
-  TITLE:=Lightweight WebSocket client library
-  DEPENDS:=+libubox
+  URL:=https://github.com/zhaojh329/libuwsc
+  DEPENDS:=+libev $(2)
+  VARIANT:=$(1)
+  PROVIDES:=libuwsc
 endef
 
-define Package/libuwsc-nossl
-  $(Package/libuwsc/default)
-  TITLE += (NO SSL)
-  VARIANT:=nossl
-endef
-
-define Package/libuwsc-openssl
-  $(Package/libuwsc/default)
-  TITLE += (openssl)
-  DEPENDS += +libustream-openssl
-  VARIANT:=openssl
-endef
-
-define Package/libuwsc-wolfssl
-  $(Package/libuwsc/default)
-  TITLE += (wolfssl)
-  DEPENDS += +libustream-wolfssl
-  VARIANT:=wolfssl
-endef
-
-define Package/libuwsc-mbedtls
-  $(Package/libuwsc/default)
-  TITLE += (mbedtls)
-  DEPENDS += +libustream-mbedtls
-  VARIANT:=mbedtls
-endef
-
-ifeq ($(BUILD_VARIANT),nossl)
-  CMAKE_OPTIONS += -DUWSC_SSL_SUPPORT=off
+Package/libuwsc-openssl=$(call Package/libuwsc/Default,openssl,+PACKAGE_libuwsc-openssl:libopenssl)
+Package/libuwsc-wolfssl=$(call Package/libuwsc/Default,wolfssl,+PACKAGE_libuwsc-wolfssl:libwolfssl)
+Package/libuwsc-mbedtls=$(call Package/libuwsc/Default,mbedtls,+PACKAGE_libuwsc-mbedtls:libmbedtls)
+Package/libuwsc-nossl=$(call Package/libuwsc/Default,nossl)
+
+ifeq ($(BUILD_VARIANT),openssl)
+  CMAKE_OPTIONS += -DUWSC_USE_OPENSSL=ON
+else ifeq ($(BUILD_VARIANT),wolfssl)
+  CMAKE_OPTIONS += -DUWSC_USE_WOLFSSL=ON
+else ifeq ($(BUILD_VARIANT),mbedtls)
+  CMAKE_OPTIONS += -DUWSC_USE_MBEDTLS=ON
+else
+  CMAKE_OPTIONS += -DUWSC_SSL_SUPPORT=OFF
 endif
 
-define Package/libuwsc/default/install
+define Package/libuwsc-$(BUILD_VARIANT)/install
        $(INSTALL_DIR) $(1)/usr/lib/
-       $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/libuwsc.so* $(1)/usr/lib/
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libuwsc.so* $(1)/usr/lib/
 endef
 
-Package/libuwsc-nossl/install = $(Package/libuwsc/default/install)
-Package/libuwsc-openssl/install = $(Package/libuwsc/default/install)
-Package/libuwsc-wolfssl/install = $(Package/libuwsc/default/install)
-Package/libuwsc-mbedtls/install = $(Package/libuwsc/default/install)
-
-$(eval $(call BuildPackage,libuwsc-nossl))
-$(eval $(call BuildPackage,libuwsc-mbedtls))
-$(eval $(call BuildPackage,libuwsc-wolfssl))
 $(eval $(call BuildPackage,libuwsc-openssl))
+$(eval $(call BuildPackage,libuwsc-wolfssl))
+$(eval $(call BuildPackage,libuwsc-mbedtls))
+$(eval $(call BuildPackage,libuwsc-nossl))
index d9a4d8c68dcc8aa09472a239cd195e82a554b33a..fb4ded82c895c9b7221da2d9f7f865da2eddce29 100644 (file)
@@ -1,7 +1,4 @@
 #
-# Copyright (C) 2009-2015 OpenWrt.org
-# Copyright (C) 2009 David Cooper <dave@kupesoft.com>
-#
 # This is free software, licensed under the GNU General Public License v2.
 # See /LICENSE for more information.
 #
@@ -9,12 +6,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=v4l-utils
-PKG_VERSION:=1.10.0
+PKG_VERSION:=1.14.2
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
-PKG_SOURCE_URL:=http://www.linuxtv.org/downloads/v4l-utils
-PKG_HASH:=78ead27ee58a701d7c6342303cf4520bdd4a2b88a7813bc99a0b389307e4336b
+PKG_SOURCE_URL:=https://www.linuxtv.org/downloads/v4l-utils
+PKG_HASH:=e6b962c4b1253cf852c31da13fd6b5bb7cbe5aa9e182881aec55123bae680692
 
 PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>
 
@@ -89,14 +86,14 @@ define Build/InstallDev
        $(INSTALL_DIR) $(1)/usr/include
        $(CP) $(PKG_INSTALL_DIR)/usr/include/*.h $(1)/usr/include/
        $(INSTALL_DIR) $(1)/usr/lib
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libv4l{1,2,convert}.{a,so*} $(1)/usr/lib/
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libv4l{1,2,convert,2rds}.{a,so*} $(1)/usr/lib/
        $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libv4l{1,2,convert}.pc $(1)/usr/lib/pkgconfig/
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libv4l{1,2,convert,2rds}.pc $(1)/usr/lib/pkgconfig/
 endef
 
 define Package/libv4l/install
        $(INSTALL_DIR) $(1)/usr/lib
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libv4l{1,2,convert}.so.* $(1)/usr/lib/
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libv4l{1,2,convert,2rds}.so.* $(1)/usr/lib/
        $(INSTALL_DIR) $(1)/usr/lib/libv4l
        $(CP) $(PKG_INSTALL_DIR)/usr/lib/libv4l/v4l{1compat,2convert}.so $(1)/usr/lib/libv4l/
 endef
@@ -106,10 +103,11 @@ define Package/v4l-utils/install
        $(CP) $(PKG_INSTALL_DIR)/etc/rc_maps.cfg $(1)/etc/
        $(CP) $(PKG_INSTALL_DIR)/etc/rc_keymaps $(1)/etc/
        $(INSTALL_DIR) $(1)/usr/bin
-       $(CP) $(PKG_INSTALL_DIR)/usr/bin/{cx18,ivtv}-ctl $(1)/usr/bin/
+       $(CP) $(PKG_INSTALL_DIR)/usr/bin/{rds,media,cx18,ivtv}-ctl $(1)/usr/bin/
        $(CP) $(PKG_INSTALL_DIR)/usr/bin/decode_tm6000 $(1)/usr/bin/
-       $(CP) $(PKG_INSTALL_DIR)/usr/bin/ir-keytable $(1)/usr/bin/
+       $(CP) $(PKG_INSTALL_DIR)/usr/bin/ir-{ctl,keytable} $(1)/usr/bin/
        $(CP) $(PKG_INSTALL_DIR)/usr/bin/v4l2-{compliance,ctl,sysfs-path} $(1)/usr/bin/
+       $(CP) $(PKG_INSTALL_DIR)/usr/bin/cec-{compliance,ctl,follower} $(1)/usr/bin/
 endef
 
 $(eval $(call BuildPackage,libv4l))
index 34e0511ab7c5fa4a1257370722da10670368a63b..0885fe42aa591b4ffc146585197e878e8ce510e4 100644 (file)
@@ -1,3 +1,13 @@
+--- a/utils/v4l2-ctl/v4l2-ctl.cpp
++++ b/utils/v4l2-ctl/v4l2-ctl.cpp
+@@ -46,6 +46,7 @@
+ #include <vector>
+ #include <map>
+ #include <algorithm>
++#include <string_iostream>
+ #include <fstream>
+ char options[OptLast];
 --- a/utils/rds-ctl/rds-ctl.cpp
 +++ b/utils/rds-ctl/rds-ctl.cpp
 @@ -29,6 +29,7 @@
  #include <libv4l2.h>
 --- a/utils/v4l2-ctl/v4l2-ctl-streaming.cpp
 +++ b/utils/v4l2-ctl/v4l2-ctl-streaming.cpp
-@@ -14,6 +14,7 @@
+@@ -17,6 +17,7 @@
  #include <sys/mman.h>
  #include <dirent.h>
  #include <math.h>
 +#include <time.h>
  
  #include "v4l2-ctl.h"
+ #include "v4l-stream.h"
+--- a/utils/cec-ctl/cec-ctl.cpp
++++ b/utils/cec-ctl/cec-ctl.cpp
+@@ -30,6 +30,7 @@
+ #include <errno.h>
+ #include <sys/ioctl.h>
+ #include <stdarg.h>
++#include <time.h>
+ #include <cerrno>
+ #include <string>
+ #include <vector>
+--- a/utils/cec-compliance/cec-compliance.h
++++ b/utils/cec-compliance/cec-compliance.h
+@@ -21,6 +21,7 @@
+ #define _CEC_COMPLIANCE_H_
  
+ #include <stdarg.h>
++#include <time.h>
+ #include <cerrno>
+ #include <string>
+ #include <linux/cec-funcs.h>
+--- a/utils/cec-follower/cec-follower.h
++++ b/utils/cec-follower/cec-follower.h
+@@ -37,6 +37,7 @@
+ #define _CEC_FOLLOWER_H_
+ #include <stdarg.h>
++#include <time.h>
+ #include <cerrno>
+ #include <string>
+ #include <linux/cec-funcs.h>
diff --git a/libs/libv4l/patches/030-dont-call-getsubopt.patch b/libs/libv4l/patches/030-dont-call-getsubopt.patch
deleted file mode 100644 (file)
index 5824c70..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
---- a/utils/v4l2-ctl/v4l2-ctl-common.cpp
-+++ b/utils/v4l2-ctl/v4l2-ctl-common.cpp
-@@ -671,15 +671,18 @@ static bool parse_subset(char *optarg)
- static bool parse_next_subopt(char **subs, char **value)
- {
--      static char *const subopts[] = {
--          NULL
--      };
--      int opt = getsubopt(subs, subopts, value);
-+      char *stmp = *subs;
-+      *value = NULL;
--      if (opt < 0 || *value)
-+      if (*subs) {
-+              *subs = strchr(stmp, ',');
-+              if (*subs)
-+                      *(*subs)++ = 0;
-+              else *subs = stmp + strlen(stmp);
-+
-+              *value = stmp;
-               return false;
--      fprintf(stderr, "No value given to suboption <%s>\n",
--                      subopts[opt]);
-+      }
-       return true;
- }
index b8aba66022095ed4024c71cecc7b7148438cff11..cca247856c74b2fe013cf86cec76b4269c3edaef 100644 (file)
@@ -19,6 +19,7 @@ PKG_SOURCE_URL:=https://chromium.googlesource.com/webm/libvpx
 PKG_SOURCE_PROTO:=git
 PKG_SOURCE_VERSION:=$(PKG_REV)
 PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
+PKG_CPE_ID:=cpe:/a:john_koleszar:libvpx
 
 PKG_MAINTAINER:=Luiz Angelo Daros de Luca <luizluca@gmail.com>
 
index b7025681f14de3708468ee50b1ad04e5e5e8f854..26dc23f54a103ca0e6ef59a71091c8d5f69d65b5 100644 (file)
@@ -8,13 +8,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=libwebsockets
-PKG_VERSION:=3.0.0
+PKG_VERSION:=3.0.1
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
 PKG_SOURCE_URL:=https://codeload.github.com/warmcat/libwebsockets/tar.gz/v$(PKG_VERSION)?
-PKG_HASH:=a6b611c212c52f161f70556339fdaa199b7e9b6a167c4638e086d19db75d6290
+PKG_HASH:=cb0cdd8d0954fcfd97a689077568f286cdbb44111883e0a85d29860449c47cbf
 
 PKG_SOURCE_VERSION:=v$(PKG_VERSION)
 
index 96c3235ad97a57e2ef762ff7f924b3e94739cc96..345dec0aab16a5d525125b464b81bb64e9492935 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=libxml2
 PKG_VERSION:=2.9.8
-PKG_RELEASE:=2
+PKG_RELEASE:=3
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=http://xmlsoft.org/sources/
diff --git a/libs/libxml2/patches/010-CVE-2018-14404.patch b/libs/libxml2/patches/010-CVE-2018-14404.patch
new file mode 100644 (file)
index 0000000..a8bcdaf
--- /dev/null
@@ -0,0 +1,54 @@
+From a436374994c47b12d5de1b8b1d191a098fa23594 Mon Sep 17 00:00:00 2001
+From: Nick Wellnhofer <wellnhofer@aevum.de>
+Date: Mon, 30 Jul 2018 12:54:38 +0200
+Subject: [PATCH 12/13] Fix nullptr deref with XPath logic ops
+
+If the XPath stack is corrupted, for example by a misbehaving extension
+function, the "and" and "or" XPath operators could dereference NULL
+pointers. Check that the XPath stack isn't empty and optimize the
+logic operators slightly.
+
+Closes: https://gitlab.gnome.org/GNOME/libxml2/issues/5
+
+Also see
+https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=901817
+https://bugzilla.redhat.com/show_bug.cgi?id=1595985
+
+This is CVE-2018-14404.
+
+Thanks to Guy Inbar for the report.
+---
+ xpath.c | 10 ++++------
+ 1 file changed, 4 insertions(+), 6 deletions(-)
+
+diff --git a/xpath.c b/xpath.c
+index 3fae0bf4..5e3bb9ff 100644
+--- a/xpath.c
++++ b/xpath.c
+@@ -13297,9 +13297,8 @@ xmlXPathCompOpEval(xmlXPathParserContextPtr ctxt, xmlXPathStepOpPtr op)
+               return(0);
+           }
+             xmlXPathBooleanFunction(ctxt, 1);
+-            arg1 = valuePop(ctxt);
+-            arg1->boolval &= arg2->boolval;
+-            valuePush(ctxt, arg1);
++            if (ctxt->value != NULL)
++                ctxt->value->boolval &= arg2->boolval;
+           xmlXPathReleaseObject(ctxt->context, arg2);
+             return (total);
+         case XPATH_OP_OR:
+@@ -13323,9 +13322,8 @@ xmlXPathCompOpEval(xmlXPathParserContextPtr ctxt, xmlXPathStepOpPtr op)
+               return(0);
+           }
+             xmlXPathBooleanFunction(ctxt, 1);
+-            arg1 = valuePop(ctxt);
+-            arg1->boolval |= arg2->boolval;
+-            valuePush(ctxt, arg1);
++            if (ctxt->value != NULL)
++                ctxt->value->boolval |= arg2->boolval;
+           xmlXPathReleaseObject(ctxt->context, arg2);
+             return (total);
+         case XPATH_OP_EQUAL:
+-- 
+2.18.0
+
diff --git a/libs/libxml2/patches/010-CVE-2018-9251.patch b/libs/libxml2/patches/010-CVE-2018-9251.patch
deleted file mode 100644 (file)
index 285bc43..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-From 2240fbf5912054af025fb6e01e26375100275e74 Mon Sep 17 00:00:00 2001
-From: Nick Wellnhofer <wellnhofer@aevum.de>
-Date: Mon, 30 Jul 2018 13:14:11 +0200
-Subject: [PATCH 13/13] Fix infinite loop in LZMA decompression
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Check the liblzma error code more thoroughly to avoid infinite loops.
-
-Closes: https://gitlab.gnome.org/GNOME/libxml2/issues/13
-Closes: https://bugzilla.gnome.org/show_bug.cgi?id=794914
-
-This is CVE-2018-9251 and CVE-2018-14567.
-
-Thanks to Dongliang Mu and Simon Wörner for the reports.
----
- xzlib.c | 9 +++++++++
- 1 file changed, 9 insertions(+)
-
-diff --git a/xzlib.c b/xzlib.c
-index a839169e..0ba88cfa 100644
---- a/xzlib.c
-+++ b/xzlib.c
-@@ -562,6 +562,10 @@ xz_decomp(xz_statep state)
-                          "internal error: inflate stream corrupt");
-                 return -1;
-             }
-+            /*
-+             * FIXME: Remapping a couple of error codes and falling through
-+             * to the LZMA error handling looks fragile.
-+             */
-             if (ret == Z_MEM_ERROR)
-                 ret = LZMA_MEM_ERROR;
-             if (ret == Z_DATA_ERROR)
-@@ -587,6 +591,11 @@ xz_decomp(xz_statep state)
-             xz_error(state, LZMA_PROG_ERROR, "compression error");
-             return -1;
-         }
-+        if ((state->how != GZIP) &&
-+            (ret != LZMA_OK) && (ret != LZMA_STREAM_END)) {
-+            xz_error(state, ret, "lzma error");
-+            return -1;
-+        }
-     } while (strm->avail_out && ret != LZMA_STREAM_END);
-     /* update available output and crc check value */
--- 
-2.18.0
-
diff --git a/libs/libxml2/patches/020-CVE-2018-9251.patch b/libs/libxml2/patches/020-CVE-2018-9251.patch
new file mode 100644 (file)
index 0000000..285bc43
--- /dev/null
@@ -0,0 +1,50 @@
+From 2240fbf5912054af025fb6e01e26375100275e74 Mon Sep 17 00:00:00 2001
+From: Nick Wellnhofer <wellnhofer@aevum.de>
+Date: Mon, 30 Jul 2018 13:14:11 +0200
+Subject: [PATCH 13/13] Fix infinite loop in LZMA decompression
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Check the liblzma error code more thoroughly to avoid infinite loops.
+
+Closes: https://gitlab.gnome.org/GNOME/libxml2/issues/13
+Closes: https://bugzilla.gnome.org/show_bug.cgi?id=794914
+
+This is CVE-2018-9251 and CVE-2018-14567.
+
+Thanks to Dongliang Mu and Simon Wörner for the reports.
+---
+ xzlib.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/xzlib.c b/xzlib.c
+index a839169e..0ba88cfa 100644
+--- a/xzlib.c
++++ b/xzlib.c
+@@ -562,6 +562,10 @@ xz_decomp(xz_statep state)
+                          "internal error: inflate stream corrupt");
+                 return -1;
+             }
++            /*
++             * FIXME: Remapping a couple of error codes and falling through
++             * to the LZMA error handling looks fragile.
++             */
+             if (ret == Z_MEM_ERROR)
+                 ret = LZMA_MEM_ERROR;
+             if (ret == Z_DATA_ERROR)
+@@ -587,6 +591,11 @@ xz_decomp(xz_statep state)
+             xz_error(state, LZMA_PROG_ERROR, "compression error");
+             return -1;
+         }
++        if ((state->how != GZIP) &&
++            (ret != LZMA_OK) && (ret != LZMA_STREAM_END)) {
++            xz_error(state, ret, "lzma error");
++            return -1;
++        }
+     } while (strm->avail_out && ret != LZMA_STREAM_END);
+     /* update available output and crc check value */
+-- 
+2.18.0
+
index c0f8aad1a8dfc1fe3a67e855a85505dcac0d983a..b6a7d17a5e7be57bfa8bb35a71a69a1e477f7757 100644 (file)
@@ -8,21 +8,16 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=libyang
-PKG_VERSION:=0.15.130
-PKG_RELEASE=$(PKG_SOURCE_VERSION)
+PKG_VERSION:=0.16-r1
 
 PKG_LICENSE:=GPL-2.0+
 PKG_MAINTAINER:=Mislav Novakovic <mislav.novakovic@sartura.hr>
 
-PKG_SOURCE_PROTO:=git
-PKG_SOURCE_VERSION:=d6baaf90e24af3b07649e9dda6fc0d9b272b2ebc
-PKG_MIRROR_HASH:=eace667ae787ac27b7c717a52f672d05e55608c47d9e54d39d60f8ab5e47f0c9
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.xz
-PKG_SOURCE_URL:=https://github.com/CESNET/libyang.git
-PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION)
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://codeload.github.com/CESNET/libyang/tar.gz/v$(PKG_VERSION)?
+PKG_HASH:=43ab396fc7529251dc9cf02fbd8da48dcf476b998ea0f9e66197632988969074
 
-PKG_BUILD_ROOT:=$(BUILD_DIR)/$(PKG_SOURCE_SUBDIR)
-PKG_BUILD_DIR:=$(PKG_BUILD_ROOT)
+CMAKE_INSTALL:=1
 
 PKG_BUILD_PARALLEL:=1
 PKG_INSTALL:=1
index 89456916948a1855bafeb72c68bc7db42bd59d12..f336a878d07ef8c8955df4f0d29190caf290ebca 100644 (file)
@@ -8,17 +8,19 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=opus
-PKG_VERSION:=1.2.1
+PKG_VERSION:=1.3
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://archive.mozilla.org/pub/opus/
-PKG_HASH:=cfafd339ccd9c5ef8d6ab15d7e1a412c054bf4cb4ecbbbcc78c12ef2def70732
+PKG_SOURCE_URL:=https://archive.mozilla.org/pub/opus
+PKG_HASH:=4f3d69aefdf2dbaf9825408e452a8a414ffc60494c70633560700398820dc550
 
+PKG_MAINTAINER:=Ted Hess <thess@kitchensync.net>, Ian Leonard <antonlacon@gmail.com>
 PKG_LICENSE:=BSD-3-Clause
 PKG_LICENSE_FILES:=COPYING
-PKG_MAINTAINER:=Ted Hess <thess@kitchensync.net>, Ian Leonard <antonlacon@gmail.com>
+PKG_CPE_ID:=cpe:/a:opus-codec:opus
 
+PKG_BUILD_PARALLEL:=1
 PKG_INSTALL:=1
 
 include $(INCLUDE_DIR)/package.mk
@@ -27,7 +29,7 @@ define Package/libopus
   SECTION:=libs
   CATEGORY:=Libraries
   TITLE:=OPUS Audio Codec
-  URL:=http://opus-codec.org/
+  URL:=https://opus-codec.org
 endef
 
 define Package/libopus/description
@@ -51,7 +53,6 @@ ifneq ($(findstring neon,$(CONFIG_TARGET_OPTIMIZATION)),)
 endif
 
 CPU_ASM_BLACKLIST:=xscale arm926ej-s
-
 ifneq ($(findstring $(call qstrip,$(CONFIG_CPU_TYPE)),$(CPU_ASM_BLACKLIST)),)
        CONFIGURE_ARGS+= --disable-asm
 endif
index 0c128817c03cdb29cd644ac3b50cb361dca2160c..7fc1f03c83e149ca826f708384fa1d3526f94725 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=p11-kit
-PKG_VERSION:=0.23.13
+PKG_VERSION:=0.23.14
 PKG_RELEASE:=1
 PKG_MAINTAINER:=Nikos Mavrogiannopoulos <n.mavrogiannopoulos@gmail.com>
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_HASH:=aa65403e3ac7c3aba17ca60f28db17b9c76d988b66b91789b8e8c145ae9922f1
+PKG_HASH:=1cb9fa6d237539f25f62f4c3d4ec71a1c8e0772957ec45ec5af92134129e0d70
 PKG_SOURCE_URL:=https://github.com/p11-glue/$(PKG_NAME)/releases/download/$(PKG_VERSION)
 
 PKG_BUILD_PARALLEL:=1
index 3b3b25c5881b31b7847fb1335cda4f39180e7bbf..6199766c37859676ef757b731b7d692a7e35fbba 100644 (file)
@@ -8,25 +8,23 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=libprotobuf-c
-PKG_VERSION:=v1.3.0
+PKG_VERSION:=1.3.1
 PKG_RELEASE:=1
 
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
-PKG_MIRROR_HASH:=596b8cfa47d66cf4278229b780125e199bc0df08defe849654b1ffb5e52b0c03
-PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_URL:=git://github.com/protobuf-c/protobuf-c.git
-PKG_SOURCE_PROTO:=git
-PKG_SOURCE_VERSION:=$(PKG_VERSION)
+PKG_SOURCE:=protobuf-c-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://github.com/protobuf-c/protobuf-c/releases/download/v$(PKG_VERSION)
+PKG_HASH:=51472d3a191d6d7b425e32b612e477c06f73fe23e07f6a6a839b11808e9d2267
+PKG_BUILD_DIR:=$(BUILD_DIR)/protobuf-c-$(PKG_VERSION)
+HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/protobuf-c-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Rosen Penev <rosenp@gmail.com>
+PKG_LICENSE:=BSD-2c
 
 PKG_BUILD_DEPENDS:=protobuf-c/host
 HOST_BUILD_DEPENDS:=protobuf/host
 
 PKG_INSTALL:=1
-PKG_FIXUP:=autoreconf
-
-PKG_LICENSE:=BSD-2c
-
-PKG_MAINTAINER:=Jacob Siverskog <jacob@teenageengineering.com>
+PKG_BUILD_PARALLEL:=1
 
 include $(INCLUDE_DIR)/package.mk
 include $(INCLUDE_DIR)/host-build.mk
@@ -35,7 +33,7 @@ define Package/libprotobuf-c
   TITLE:=Protocol Buffers library
   SECTION:=libs
   CATEGORY:=Libraries
-  URL:=http://code.google.com/p/protobuf-c/
+  URL:=https://github.com/protobuf-c/protobuf-c
 endef
 
 define Package/libprotobuf-c/description
index 684fcc5ea1be92491722ba70ba323a2dc01b65ae..5cb9bf5c7b59e112f3834d6e3d5a50a0e5955578 100644 (file)
@@ -8,16 +8,16 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=sbc
-PKG_VERSION:=1.3
-PKG_RELEASE:=2
+PKG_VERSION:=1.4
+PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=@KERNEL/linux/bluetooth/
-PKG_HASH:=e61022cf576f14190241e7071753fdacdce5d1dea89ffd704110fc50be689309
+PKG_HASH:=518bf46e6bb3dc808a95e1eabad26fdebe8a099c1e781c27ed7fca6c2f4a54c9
 
 PKG_LICENSE:=LGPL-2.1+
 PKG_LICENSE_FILES:=COPYING.LIB
-PKG_MAINTAINER:=Dirk Neukirchen <dirkneukirchen@web.de>
+PKG_MAINTAINER:=
 
 PKG_FIXUP:=autoreconf
 PKG_INSTALL:=1
index 8f85f302b669f1044c7591044f3cd192ac0033fa..da6623920c571da6633aaa493ce12d789b950d4f 100644 (file)
@@ -8,11 +8,11 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=sqlite
-PKG_VERSION:=3230100
+PKG_VERSION:=3240000
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-autoconf-$(PKG_VERSION).tar.gz
-PKG_HASH:=92842b283e5e744eff5da29ed3c69391de7368fccc4d0ee6bf62490ce555ef25
+PKG_HASH:=d9d14e88c6fb6d68de9ca0d1f9797477d82fc3aed613558f87ffbdbbc5ceb74a
 PKG_SOURCE_URL:=http://www.sqlite.org/2018/
 
 PKG_LICENSE:=PUBLICDOMAIN
index 43131a16a4de11a53b8aab472699d4f9f75a0285..12558de0754d31834828b3930138a1f3998c630d 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=tdb
 PKG_VERSION:=1.3.16
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 PKG_LICENSE:=GPL-2.0
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
diff --git a/libs/tdb/patches/100-Remove_libbsd_dependency_check.patch b/libs/tdb/patches/100-Remove_libbsd_dependency_check.patch
new file mode 100644 (file)
index 0000000..150d17b
--- /dev/null
@@ -0,0 +1,61 @@
+diff --git a/lib/replace/wscript b/lib/replace/wscript
+index fd00a42..337d559 100644
+--- a/lib/replace/wscript
++++ b/lib/replace/wscript
+@@ -340,22 +340,13 @@ def configure(conf):
+     conf.CHECK_FUNCS('prctl dirname basename')
+-    strlcpy_in_bsd = False
+-
+-    # libbsd on some platforms provides strlcpy and strlcat
+-    if not conf.CHECK_FUNCS('strlcpy strlcat'):
+-        if conf.CHECK_FUNCS_IN('strlcpy strlcat', 'bsd', headers='bsd/string.h',
+-                               checklibc=True):
+-            strlcpy_in_bsd = True
+-    if not conf.CHECK_FUNCS('getpeereid'):
+-        conf.CHECK_FUNCS_IN('getpeereid', 'bsd', headers='sys/types.h bsd/unistd.h')
+-    if not conf.CHECK_FUNCS_IN('setproctitle', 'setproctitle', headers='setproctitle.h'):
+-        conf.CHECK_FUNCS_IN('setproctitle', 'bsd', headers='sys/types.h bsd/unistd.h')
+-    if not conf.CHECK_FUNCS('setproctitle_init'):
+-        conf.CHECK_FUNCS_IN('setproctitle_init', 'bsd', headers='sys/types.h bsd/unistd.h')
+-
+-    if not conf.CHECK_FUNCS('closefrom'):
+-        conf.CHECK_FUNCS_IN('closefrom', 'bsd', headers='bsd/unistd.h')
++    # Not checking for libbsd
++    conf.CHECK_FUNCS('strlcpy strlcat')
++    conf.CHECK_FUNCS('getpeereid')
++    conf.CHECK_FUNCS_IN('setproctitle', 'setproctitle', headers='setproctitle.h')
++    conf.CHECK_FUNCS('setproctitle_init')
++
++    conf.CHECK_FUNCS('closefrom')
+     conf.CHECK_CODE('''
+                 struct ucred cred;
+@@ -698,9 +689,6 @@ def configure(conf):
+     # look for a method of finding the list of network interfaces
+     for method in ['HAVE_IFACE_GETIFADDRS', 'HAVE_IFACE_AIX', 'HAVE_IFACE_IFCONF', 'HAVE_IFACE_IFREQ']:
+-        bsd_for_strlcpy = ''
+-        if strlcpy_in_bsd:
+-            bsd_for_strlcpy = ' bsd'
+         if conf.CHECK_CODE('''
+                            #define %s 1
+                            #define NO_CONFIG_H 1
+@@ -713,7 +701,7 @@ def configure(conf):
+                            #include "test/getifaddrs.c"
+                            ''' % method,
+                            method,
+-                           lib='nsl socket' + bsd_for_strlcpy,
++                           lib='nsl socket',
+                            addmain=False,
+                            execute=True):
+             break
+@@ -761,7 +749,6 @@ def build(bld):
+                 break
+     extra_libs = ''
+-    if bld.CONFIG_SET('HAVE_LIBBSD'): extra_libs += ' bsd'
+     bld.SAMBA_SUBSYSTEM('LIBREPLACE_HOSTCC',
+         REPLACE_HOSTCC_SOURCE,
index 59d6ee8f1b6fcdd30a755a78892406f6e3715e61..9830c33d1541d9bb941388ba0f6e4e126ff4c3a6 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=tiff
 PKG_VERSION:=4.0.9
-PKG_RELEASE:=4
+PKG_RELEASE:=5
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://download.osgeo.org/libtiff
diff --git a/libs/tiff/patches/027-CVE-2017-17095.patch b/libs/tiff/patches/027-CVE-2017-17095.patch
new file mode 100644 (file)
index 0000000..04dd635
--- /dev/null
@@ -0,0 +1,40 @@
+From 9171da596c88e6a2dadcab4a3a89dddd6e1b4655 Mon Sep 17 00:00:00 2001
+From: Nathan Baker <elitebadger@gmail.com>
+Date: Thu, 25 Jan 2018 21:28:15 +0000
+Subject: [PATCH] Add workaround to pal2rgb buffer overflow.
+
+---
+ tools/pal2rgb.c | 17 +++++++++++++++--
+ 1 file changed, 15 insertions(+), 2 deletions(-)
+
+diff --git a/tools/pal2rgb.c b/tools/pal2rgb.c
+index 0423598..01fcf94 100644
+--- a/tools/pal2rgb.c
++++ b/tools/pal2rgb.c
+@@ -184,8 +184,21 @@ main(int argc, char* argv[])
+       { unsigned char *ibuf, *obuf;
+         register unsigned char* pp;
+         register uint32 x;
+-        ibuf = (unsigned char*)_TIFFmalloc(TIFFScanlineSize(in));
+-        obuf = (unsigned char*)_TIFFmalloc(TIFFScanlineSize(out));
++        tmsize_t tss_in = TIFFScanlineSize(in);
++        tmsize_t tss_out = TIFFScanlineSize(out);
++        if (tss_out / tss_in < 3) {
++              /*
++               * BUG 2750: The following code does not know about chroma
++               * subsampling of JPEG data. It assumes that the output buffer is 3x
++               * the length of the input buffer due to exploding the palette into
++               * RGB tuples. If this assumption is incorrect, it could lead to a
++               * buffer overflow. Go ahead and fail now to prevent that.
++               */
++              fprintf(stderr, "Could not determine correct image size for output. Exiting.\n");
++              return -1;
++      }
++        ibuf = (unsigned char*)_TIFFmalloc(tss_in);
++        obuf = (unsigned char*)_TIFFmalloc(tss_out);
+         switch (config) {
+         case PLANARCONFIG_CONTIG:
+               for (row = 0; row < imagelength; row++) {
+--
+libgit2 0.27.0
+
index 6a1ca0dffdd63e6addc9b7bcbe38b9759ea9be78..966848ac3cb89ee462dc36c7d94030e24138a6a5 100644 (file)
@@ -8,18 +8,23 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=unixodbc
-PKG_VERSION:=2.3.4
-PKG_RELEASE:=5
+PKG_VERSION:=2.3.7
+PKG_RELEASE:=1
 
-PKG_SOURCE_URL:=ftp://ftp.unixodbc.org/pub/unixODBC/
 PKG_SOURCE:=unixODBC-$(PKG_VERSION).tar.gz
-PKG_HASH:=2e1509a96bb18d248bf08ead0d74804957304ff7c6f8b2e5965309c632421e39
-PKG_BUILD_DIR:=$(BUILD_DIR)/unixODBC-$(PKG_VERSION)
-HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/unixODBC-$(PKG_VERSION)
+PKG_SOURCE_URL:=http://www.unixodbc.org
+PKG_HASH:=45f169ba1f454a72b8fcbb82abd832630a3bf93baa84731cf2949f449e1e3e77
+
 PKG_MAINTAINER:=Thomas Heil <heil@terminal-consulting.de>
 PKG_LICENSE:=prog GPL libs LGPL
+PKG_CPE_ID:=cpe:/a:unixodbc:unixodbc
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/unixODBC-$(PKG_VERSION)
+HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/unixODBC-$(PKG_VERSION)
 HOST_BUILD_DEPENDS:=unixodbc
 
+PKG_FIXUP:=autoreconf
+
 # if your other package depends on unixodbc and needs
 # odbc_config, add to your other Makefile
 #  PKG_BUILD_DEPENDS:=unixodbc/host
@@ -36,7 +41,7 @@ CONFIGURE_ARGS += \
 define Package/unixodbc/Default
   SUBMENU:=database
   TITLE:=unixODBC
-  URL:=http://www.unixodbc.org/
+  URL:=http://www.unixodbc.org
 endef
 
 define Package/unixodbc
index 7050e475e9439694912e0e22b5da6a7ddd054236..1af312c88cdb23355ba3107925bef9a77ea41ac2 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=vips
-PKG_VERSION:=8.6.4
-PKG_RELEASE:=2
+PKG_VERSION:=8.6.5
+PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://github.com/jcupitt/libvips/releases/download/v8.6.4/
-PKG_HASH:=4631a080c92b2b371379252e451818604858942b754c924b09843a7f528a8af4
+PKG_SOURCE_URL:=https://github.com/jcupitt/libvips/releases/download/v8.6.5/
+PKG_HASH:=8702af0e340e220e0c08f8ded6c8248b18e7043938d9e8a2426631fd37a9d5db
 PKG_FIXUP:=autoreconf
 PKG_CHECK_FORMAT_SECURITY:=0
 
index fdaff771dddd0feb8e72591e4bc4e5f9938e17e4..d9bc8ed0efc0d29f39df10929e165659d3fc08a0 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=xmlrpc-c
-PKG_VERSION:=1.39.13
-PKG_RELEASE:=2
+PKG_VERSION:=1.43.08
+PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tgz
 PKG_SOURCE_URL:=@SF/xmlrpc-c/Xmlrpc-c%20Super%20Stable/$(PKG_VERSION)
-PKG_HASH:=491e44cae3763d285fc2a75fe6574882964f16451adbb7e6f3293916e120fca9
+PKG_HASH:=c9f5b584a42493877ae0f09ed680d94e035ab389e8fa1873b1ec42118d5cfca3
 
 PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>
 PKG_LICENSE:=VARIOUS
index e190ebb8100adda6676e932c830508aa66b869e2..165c3eed8075fe57888e1414d12fb3e4cc8b0d76 100644 (file)
@@ -1,6 +1,6 @@
 --- a/config.mk.in
 +++ b/config.mk.in
-@@ -175,7 +175,7 @@ ifeq ($(patsubst linux-gnu%,linux-gnu,$(
+@@ -176,7 +176,7 @@ ifeq ($(patsubst linux-gnu%,linux-gnu,$(
    shlibfn = $(1:%=%.$(SHLIB_SUFFIX).$(MAJ).$(MIN))
    shliblefn = $(1:%=%.$(SHLIB_SUFFIX))
  #  SHLIB_CLIB = -lc
index be69611d1b1d330ea37b5646b8db24dffe7e10dd..d5a25750ed7a326f3bd67b7282160d3f89f319bd 100644 (file)
@@ -1,6 +1,6 @@
 --- a/configure.in
 +++ b/configure.in
-@@ -224,9 +224,7 @@ dnl Checks for programs.
+@@ -223,9 +223,7 @@ dnl Checks for programs.
  dnl =======================================================================
  
  AC_PROG_CC
index 449594b35b19cbc04acb74a81f7f88cea35d48d8..aa3e31e4f2daa45d4c4e94d3f5687f27b8042538 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=clamsmtp
 PKG_VERSION:=1.10
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 PKG_SOURCE_URL:=http://thewalter.net/stef/software/clamsmtp/
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
diff --git a/mail/clamsmtp/patches/010-fix-build.patch b/mail/clamsmtp/patches/010-fix-build.patch
new file mode 100644 (file)
index 0000000..a3d88dc
--- /dev/null
@@ -0,0 +1,12 @@
+diff --git a/common/sock_any.h b/common/sock_any.h
+index 77c3841..1e30974 100644
+--- a/common/sock_any.h
++++ b/common/sock_any.h
+@@ -39,7 +39,6 @@
+ #ifndef __SOCK_ANY_H__
+ #define __SOCK_ANY_H__
+-#include <sys/socket.h>
+ #include <sys/un.h>
+ #include <netinet/in.h>
index 33d77caa31b3b6fd0c30aedfbf1dc50ba57cc2b5..17bccd1b22b0da6a7bc918f9615a98b685eca8b2 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=dovecot
 PKG_VERSION:=2.3.2.1
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://www.dovecot.org/releases/2.3
@@ -98,8 +98,8 @@ define Package/dovecot-utils
 endef
 
 CONFIGURE_ARGS += \
+       --libexecdir=/usr/libexec \
        --without-pam \
-       --with-moduledir=/usr/lib/dovecot/modules \
        --with-notify=dnotify \
        --without-lzma \
        --without-lz4 \
@@ -137,10 +137,12 @@ define Package/dovecot/install
                        $(1)/etc/dovecot \
                        $(1)/usr/share/doc/dovecot \
                        $(1)/usr/lib/dovecot \
+                       $(1)/usr/libexec/dovecot \
                        $(1)/usr/bin \
                        $(1)/usr/sbin
        $(CP) $(PKG_INSTALL_DIR)/etc/dovecot/* $(1)/etc/dovecot/
        $(CP) $(PKG_INSTALL_DIR)/usr/lib/dovecot/* $(1)/usr/lib/dovecot/
+       $(CP) $(PKG_INSTALL_DIR)/usr/libexec/dovecot/* $(1)/usr/libexec/dovecot/
        $(CP) $(PKG_INSTALL_DIR)/usr/share/doc/dovecot/example-config $(1)/usr/share/doc/dovecot/
        $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/doveconf $(1)/usr/bin/
        $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/* $(1)/usr/sbin/
diff --git a/mail/dovecot/patches/050-fix-dovecot-config-for-cross-compile.patch b/mail/dovecot/patches/050-fix-dovecot-config-for-cross-compile.patch
new file mode 100644 (file)
index 0000000..6c0bc74
--- /dev/null
@@ -0,0 +1,58 @@
+pigeonhole: Fix managesieve-login needs libdovecot-login
+
+When trying to use managesieve my MUA complained sieve wasn't supported.
+On investigation dovecot logs the following could be seen:
+
+    Aug 16 00:28:44 managesieve-login: Fatal: master:
+      service(managesieve-login): child 1430 returned error 127
+    Aug 16 00:31:32 managesieve-login: Error: Error loading shared
+      library libdovecot-login.so.0: No such file or directory
+      (needed by /usr/lib/dovecot/managesieve-login)
+    Aug 16 00:31:32 managesieve-login: Error: Error loading
+      shared library libdovecot.so.0: No such file or directory
+      (needed by /usr/lib/dovecot/managesieve-login)
+    Aug 16 00:31:32 managesieve-login: Error: Error relocating
+      /usr/lib/dovecot/managesieve-login: net_ip2addr: symbol not found
+
+The issue (verified with readelf on non-working build and build with my fix)
+is that there is no RPATH information in the pigeonhole binaries (like
+managesieve-login).
+
+The dovecot-config that is 'installed' in the staging dir
+assumes that plugins will be built on the same host as the installed files.
+The 'installed' dovecot-config (partial) looks like:
+
+LIBDOVECOT='-L/usr/lib/dovecot -ldovecot'
+LIBDOVECOT_LOGIN='-ldovecot-login -L/home/user/Build/openwrt/openwrt-ath79/staging_dir/target-mips_24kc_musl/usr/lib -lssl -lcrypto'
+LIBDOVECOT_SQL=-ldovecot-sql
+LIBDOVECOT_COMPRESS=-ldovecot-compression
+LIBDOVECOT_LDA=-ldovecot-lda
+LIBDOVECOT_STORAGE='-ldovecot-storage '
+LIBDOVECOT_DSYNC=-ldovecot-dsync
+LIBDOVECOT_LIBFTS=-ldovecot-fts
+
+This patch modifed dovecot-config that gets installed on the assumption
+that users of libdovecot will also be cross-compiled (a safe bet).
+Index: dovecot-2.3.2.1/Makefile.am
+===================================================================
+--- dovecot-2.3.2.1.orig/Makefile.am
++++ dovecot-2.3.2.1/Makefile.am
+@@ -73,7 +73,7 @@ install-exec-hook:
+       grep -v '^LIBDOVECOT_.*_INCLUDE' dovecot-config | \
+       grep -v '^LIBDOVECOT.*_DEPS' | sed \
+       -e "s|^\(DOVECOT_INSTALLED\)=.*$$|\1=yes|" \
+-      -e "s|^\(LIBDOVECOT\)=.*$$|\1='-L$(pkglibdir) -ldovecot'|" \
++      -e "s|^\(LIBDOVECOT\)=.*$$|\1='-L$(STAGING_DIR)$(pkglibdir) -ldovecot'|" \
+       -e "s|^\(LIBDOVECOT_LOGIN\)=.*$$|\1='-ldovecot-login $(SSL_LIBS)'|" \
+       -e "s|^\(LIBDOVECOT_SQL\)=.*$$|\1=-ldovecot-sql|" \
+       -e "s|^\(LIBDOVECOT_COMPRESS\)=.*$$|\1=-ldovecot-compression|" \
+@@ -81,7 +81,8 @@ install-exec-hook:
+       -e "s|^\(LIBDOVECOT_LDA\)=.*$$|\1=-ldovecot-lda|" \
+       -e "s|^\(LIBDOVECOT_LIBFTS\)=.*$$|\1=-ldovecot-fts|" \
+       -e "s|^\(LIBDOVECOT_STORAGE\)=.*$$|\1='-ldovecot-storage $(LINKED_STORAGE_LDADD)'|" \
+-      -e "s|^\(LIBDOVECOT_INCLUDE\)=.*$$|\1=-I$(pkgincludedir)|" \
++      -e "s|^\(LIBDOVECOT_INCLUDE\)=.*$$|\1=-I$(STAGING_DIR)$(pkgincludedir)|" \
++      -e "s|^\(DOVECOT_BINARY_LDFLAGS=\".*\)\"$$|\1 -Wl,-rpath -Wl,$(pkglibdir)\"|" \
+       > $(DESTDIR)$(pkglibdir)/dovecot-config
+ uninstall-hook:
index 6b61380fdb218f1a5b273944dc45bcad45c6688e..616a1efa1b4119328faeb7f1c42237729a1a5a96 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=emailrelay
 PKG_VERSION:=2.0
-PKG_RELEASE:=2
+PKG_RELEASE:=3
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-src.tar.gz
 PKG_SOURCE_URL:=@SF/emailrelay/$(PKG_VERSION)
index 1a4eb6758f1a7faedeae172f1eec61dc6d87a032..7b73de89608107a6403ff629c6abb02643d8a5e1 100644 (file)
@@ -3,6 +3,9 @@ config emailrelay 'server'
        option mode 'server'
        option port '25'
        option remote_clients '0'
+#      option address_verifier '/usr/local/bin/address-verifier.sh'
+#      option domain 'my.example.com'
+#      option anonymous '1'
 #      option server_tls '/etc/path/to/certificate'
 #      option server_auth '/etc/emailrelay.auth'
 #      option extra_cmdline ''
@@ -13,6 +16,9 @@ config emailrelay 'proxy'
        option smarthost '192.0.2.1:25'
        option port '25'
        option remote_clients '0'
+#      option address_verifier '/usr/local/bin/address-verifier.sh'
+#      option domain 'my.example.com'
+#      option anonymous '1'
 #      option server_tls '/etc/path/to/certificate'
 #      option server_auth '/etc/emailrelay.auth'
 #      option client_tls '1'
index 5b78f2170a60869bc9723234d5e8560ca5a11444..28f1fdd04987d4244b350f7b70cd5795957d1523 100644 (file)
@@ -9,7 +9,7 @@ NAME=emailrelay
 
 emailrelay_instance()
 {
-       local enabled mode port remote_clients server_tls server_auth extra_cmdline smarthost client_tls client_auth
+       local enabled mode port remote_clients server_tls server_auth extra_cmdline smarthost client_tls client_auth address_verifier domain anonymous
 
        config_get_bool enabled "$1" enabled
        config_get mode "$1" mode
@@ -21,7 +21,9 @@ emailrelay_instance()
        config_get smarthost "$1" smarthost
        config_get_bool client_tls "$1" client_tls
        config_get client_auth "$1" client_auth
-
+       config_get address_verifier "$1" address_verifier
+       config_get domain "$1" domain
+       config_get_bool anonymous "$1" anonymous
 
        [ "$enabled" = 0 ] && return 1
 
@@ -39,6 +41,9 @@ emailrelay_instance()
                        [ -n "$server_auth" ] && procd_append_param command --server-auth "$server_auth"
                        [ "$client_tls" = 1 ] && procd_append_param command --client-tls
                        [ -n "$client_auth" ] && procd_append_param command --client-auth "$client_auth"
+                       [ -n "$address_verifier" ] && procd_append_param command --address-verifier "$address_verifier"
+                       [ -n "$domain" ] && procd_append_param command --domain "$domain"
+                       [ "$anonymous" = 1 ] && procd_append_param command --anonymous
                        ;;
                "cmdline")
                        # empty by intention (just append extra_cmdline)
index 8875b5ad290302af301eb8c1d8c6cfec67a42afb..3f3796bb454e824a68c82ff58712d437bb5b0abd 100644 (file)
@@ -1,4 +1,4 @@
-# 
+#
 # Copyright (C) 2014 OpenWrt.org
 #
 # This is free software, licensed under the GNU General Public License v2.
@@ -8,14 +8,17 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=mailman
+PKG_VERSION:=2.1.29
 PKG_RELEASE:=1
-PKG_SOURCE_URL:=@GNU/$(PKG_NAME)
-PKG_VERSION:=2.1.23
-PKG_HASH:=b022ca6f8534621c9dbe50c983948688bc4623214773b580c2c78e4a7ae43e69
+
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tgz
+PKG_SOURCE_URL:=@GNU/$(PKG_NAME)
+PKG_HASH:=838872713601e8a124146e550f53709482c1ef168f1e16d201465c651cbf0d2c
+
 PKG_MAINTAINER:=Denis Shulyaka <Shulyaka@gmail.com>
 PKG_LICENSE:=GPL-2.0+
 PKG_LICENSE_FILES:=gnu-COPYING-GPL
+PKG_CPE_ID:=cpe:2.3:a:gnu:mailman
 
 include $(INCLUDE_DIR)/package.mk
 
@@ -23,7 +26,7 @@ define Package/mailman
   SECTION:=mail
   CATEGORY:=Mail
   TITLE:=The GNU Mailing List Manager
-  URL:=http://www.gnu.org/software/mailman/
+  URL:=https://www.gnu.org/software/mailman/
   DEPENDS:=+postfix +python +uhttpd +python-dns
 endef
 
index 5bbf5b27ed728f9451dd2730de0e04bd27923c21..318991148db8337684aec81f8c5919e3f27e29e8 100644 (file)
@@ -1,7 +1,6 @@
-diff -rupN mailman-2.1.14-1/Mailman/Defaults.py.in mailman-2.1.14-1_patched/Mailman/Defaults.py.in
---- mailman-2.1.14-1/Mailman/Defaults.py.in    2011-03-01 23:35:57.000000000 +0300
-+++ mailman-2.1.14-1_patched/Mailman/Defaults.py.in    2011-03-09 12:26:10.000000000 +0300
-@@ -489,7 +489,7 @@ DELIVERY_MODULE = 'SMTPDirect'
+--- a/Mailman/Defaults.py.in
++++ b/Mailman/Defaults.py.in
+@@ -506,7 +506,7 @@ SMTPLIB_DEBUG_LEVEL = 0
  # standard out (or send an email to the site list owner) for manual twiddling
  # of an /etc/aliases style file.  Use 'Postfix' if you are using the Postfix
  # MTA -- but then also see POSTFIX_STYLE_VIRTUAL_DOMAINS.
index e32110665b7d031d3df6da96407856579612d8ca..abadeb8c042bf01cebf670e5967b20b8447a25be 100644 (file)
@@ -1,7 +1,6 @@
-diff -Naur mailman-2.1.18-1/configure mailman-2.1.18-1_patched/configure
---- mailman-2.1.18-1/configure 2014-10-26 12:00:38.090360119 +0300
-+++ mailman-2.1.18-1_patched/configure 2014-10-26 12:00:21.323016430 +0300
-@@ -2236,35 +2236,35 @@
+--- a/configure
++++ b/configure
+@@ -2255,35 +2255,35 @@ fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $version" >&5
  $as_echo "$version" >&6; }
  
index 1dd2859f2ebac1b94768f45f331c7c4e4b30fe67..49957c05d6e8fdf526d16007ac9a14d3c74f31d6 100644 (file)
@@ -1,7 +1,6 @@
-diff -Naur mailman-2.1.18-1/configure mailman-2.1.18-1_patched/configure
---- mailman-2.1.18-1/configure 2014-05-06 20:43:56.000000000 +0400
-+++ mailman-2.1.18-1_patched/configure 2014-11-04 15:02:32.892666331 +0300
-@@ -3927,6 +3927,8 @@
+--- a/configure
++++ b/configure
+@@ -3957,6 +3957,8 @@ fi
  $as_echo "$URLHOST" >&6; }
  rm -f conftest.out conftest.py
  
index 9fa72a26e003f222ffc714e5ddbe38dfd0312f6c..63cc8f9daed22180b5e22550283875d05f0842dd 100644 (file)
@@ -1,7 +1,6 @@
-diff -Naur mailman-2.1.18-1/Mailman/MailList.py mailman-2.1.18-1_patched/Mailman/MailList.py
---- mailman-2.1.18-1/Mailman/MailList.py       2014-05-06 20:43:56.000000000 +0400
-+++ mailman-2.1.18-1_patched/Mailman/MailList.py       2014-11-04 15:57:06.832636147 +0300
-@@ -30,7 +30,7 @@
+--- a/Mailman/MailList.py
++++ b/Mailman/MailList.py
+@@ -30,7 +30,7 @@ import re
  import shutil
  import socket
  import urllib
@@ -10,10 +9,9 @@ diff -Naur mailman-2.1.18-1/Mailman/MailList.py mailman-2.1.18-1_patched/Mailman
  
  from cStringIO import StringIO
  from UserDict import UserDict
-diff -Naur mailman-2.1.18-1/misc/paths.py.in mailman-2.1.18-1_patched/misc/paths.py.in
---- mailman-2.1.18-1/misc/paths.py.in  2014-05-06 20:43:56.000000000 +0400
-+++ mailman-2.1.18-1_patched/misc/paths.py.in  2014-11-04 15:55:49.594941540 +0300
-@@ -66,14 +66,14 @@
+--- a/misc/paths.py.in
++++ b/misc/paths.py.in
+@@ -71,14 +71,14 @@ sys.path.append(distdir)
  # In a normal interactive Python environment, the japanese.pth and korean.pth
  # files would be imported automatically.  But because we inhibit the importing
  # of the site module, we need to be explicit about importing these codecs.
index 91ae6de2e7ad9f1d235fb9ac7ed30904520e2604..83c02f310282dcd516a594bdf133d82674d652b4 100644 (file)
@@ -9,18 +9,18 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=msmtp
-PKG_VERSION:=1.6.6
+PKG_VERSION:=1.6.8
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
-PKG_SOURCE_URL:=@SF/msmtp
-PKG_HASH:=da15db1f62bd0201fce5310adb89c86188be91cd745b7cb3b62b81a501e7fb5e
+PKG_SOURCE_URL:=https://marlam.de/msmtp/releases
+PKG_HASH:=55ff95a304d888b56d07d9c62327ab9bfe26532c9c2a2ed6aefc43bea1b659fb
 
 PKG_LICENSE:=GPL-3.0+
 PKG_LICENSE_FILES:=COPYING
-PKG_MAINTAINER:=Nicolas Thill <nico@openwrt.org>
+PKG_MAINTAINER:=
 
-PKG_FIXUP:=autoreconf
+PKG_BUILD_PARALLEL:=1
 PKG_INSTALL:=1
 
 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)
@@ -33,7 +33,7 @@ define Package/msmtp/Default
   CATEGORY:=Mail
   DEPENDS:=$(INTL_DEPENDS)
   TITLE:=Simple sendmail SMTP forwarding
-  URL:=http://msmtp.sourceforge.net/
+  URL:=https://marlam.de/msmtp
 endef
 
 define Package/msmtp/Default/description
index 206af81b372a6b930111ee8818e0216d32998968..ecfbd8915c7c38c17990773313cebd81e64ff52b 100644 (file)
@@ -8,13 +8,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=mutt
-PKG_VERSION:=1.10.0
+PKG_VERSION:=1.10.1
 PKG_RELEASE:=1
 
 PKG_SOURCE_URL:=ftp://ftp.mutt.org/pub/mutt/ \
                https://bitbucket.org/mutt/mutt/downloads/
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_HASH:=0215b5f90ef9cc33441a6ca842379b64412ed7f8da83ed68bfaa319179f5535b
+PKG_HASH:=734a3883158ec3d180cf6538d8bd7f685ce641d2cdef657aa0038f76e79a54a0
 
 PKG_LICENSE:=GPL-2.0+
 PKG_LICENSE_FILES:=GPL
index e7418c595e6d7683126abeab034fb3c2d975722e..9956483e3214c148e9e630f794b55268e9c258d4 100644 (file)
@@ -11,7 +11,7 @@ PKG_NAME:=dovecot-pigeonhole
 PKG_VERSION_PLUGIN:=0.5.2
 PKG_VERSION_DOVECOT:=$(shell make --no-print-directory -C ../dovecot/ val.PKG_VERSION V=s)
 PKG_VERSION:=$(PKG_VERSION_DOVECOT)-$(PKG_VERSION_PLUGIN)
-PKG_RELEASE:=3
+PKG_RELEASE:=4
 
 DOVECOT_VERSION:=2.3
 
@@ -50,9 +50,10 @@ CONFIGURE_VARS += \
   CPPFLAGS="$(TARGET_CPPFLAGS) -I$(STAGING_DIR)/usr/include/dovecot/"
 
 define Package/dovecot-pigeonhole/install
-       $(INSTALL_DIR) $(1)/usr/bin $(1)/usr/lib/dovecot/
+       $(INSTALL_DIR) $(1)/usr/bin $(1)/usr/lib/dovecot/ $(1)/usr/libexec/dovecot/
        $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/* $(1)/usr/bin/
        $(CP) $(PKG_INSTALL_DIR)/usr/lib/dovecot/* $(1)/usr/lib/dovecot/
+       $(CP) $(PKG_INSTALL_DIR)/usr/libexec/dovecot/* $(1)/usr/libexec/dovecot/
        find $(1)/usr/lib/dovecot/ -name "*.a" -o -name "*.la" | xargs rm
 endef
 
index f8a96e06e9ae8080291529a97aa0817516f37bf2..e8a7c2620cd5f9a44a24cc4dad0325879c311fcd 100644 (file)
@@ -8,7 +8,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=postfix
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 PKG_VERSION:=3.3.1
 PKG_SOURCE_URL:= \
        https://cdn.postfix.johnriley.me/mirrors/postfix-release/official/ \
@@ -27,6 +27,7 @@ PKG_CONFIG_DEPENDS:= \
        CONFIG_POSTFIX_CDB \
        CONFIG_POSTFIX_DB \
        CONFIG_POSTFIX_SQLITE \
+       CONFIG_POSTFIX_MYSQL \
        CONFIG_POSTFIX_PGSQL \
        CONFIG_POSTFIX_PCRE \
        CONFIG_POSTFIX_EAI \
@@ -41,7 +42,7 @@ define Package/postfix
        postfix=25:postfix=25 \
        postdrop=26:postdrop=26
   URL:=http://www.postfix.org/
-  DEPENDS:=+POSTFIX_TLS:libopenssl +POSTFIX_SASL:libsasl2 +POSTFIX_LDAP:libopenldap +POSTFIX_DB:libdb47 +POSTFIX_SQLITE:libsqlite3 +POSTFIX_PGSQL:libpq +POSTFIX_EAI:icu +POSTFIX_PCRE:libpcre
+  DEPENDS:=+POSTFIX_TLS:libopenssl +POSTFIX_SASL:libsasl2 +POSTFIX_LDAP:libopenldap +POSTFIX_DB:libdb47 +POSTFIX_SQLITE:libsqlite3 +POSTFIX_MYSQL:libmysqlclient +POSTFIX_PGSQL:libpq +POSTFIX_EAI:icu +POSTFIX_PCRE:libpcre
 endef
 
 define Package/postfix/description
@@ -80,6 +81,11 @@ define Package/postfix/config
                        default y
                        help
                          Implements support for SQLite3 DB
+               config POSTFIX_MYSQL
+                       bool "MYSQL support"
+                       default n
+                       help
+                         Implements support for MySQL
                config POSTFIX_PGSQL
                        bool "PostgreSQL support"
                        default n
@@ -144,6 +150,11 @@ ifdef CONFIG_POSTFIX_SQLITE
   AUXLIBS+=-L$(STAGING_DIR)/usr/lib -lsqlite3 -lpthread
 endif
 
+ifdef CONFIG_POSTFIX_MYSQL
+  CCARGS+=-DHAS_MYSQL -I$(STAGING_DIR)/usr/include/mysql
+  AUXLIBS+=-L$(STAGING_DIR)/usr/lib -lmysqlclient -lz -lm
+endif
+
 ifdef CONFIG_POSTFIX_PGSQL
   CCARGS+=-DHAS_PGSQL -I$(STAGING_DIR)/usr/include/
   AUXLIBS+=-L$(STAGING_DIR)/usr/lib -lpq
index e33c3cfab8cbf52cc3d64a39968da8939b5e6a3a..27b79aae3edec2c940bd1c0520e4b9e5682020f6 100644 (file)
@@ -1,7 +1,7 @@
 #!/bin/sh /etc/rc.common
 # Copyright (C) 2014 OpenWrt.org
 
-START=50
+START=72
 STOP=50
 EXTRA_COMMANDS="status abort flush postinst"
 EXTRA_HELP="   status  Display the service status
index 818fb1e6a36d5cbd14d82fcbcc0868105fc59808..824ea976026e37a535f2f9cfa81e878393fa41ca 100644 (file)
@@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=sendmail
 PKG_VERSION:=8.15.2
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 PKG_SOURCE:=$(PKG_NAME).$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=http://artfiles.org/sendmail.org/pub/sendmail/ \
@@ -102,6 +102,7 @@ define Build/Prepare
        $(CP) $(PKG_BUILD_DIR)/cf/cf/generic-linux.mc $(PKG_BUILD_DIR)/cf/cf/sendmail.mc
        $(SED) 's@TARGET_CC@$(TARGET_CC)@g' $(PKG_BUILD_DIR)/devtools/Site/$(SITECONFIG)
        $(SED) 's@TARGET_CFLAGS@$(TARGET_CFLAGS)@g' $(PKG_BUILD_DIR)/devtools/Site/$(SITECONFIG)
+       $(SED) 's@STAGING_DIR@$(STAGING_DIR)@g' $(PKG_BUILD_DIR)/devtools/OS/$(TARGET_OS)
 endef
 
 define Build/Compile
index bdcaad2832ce7d64159113adb383f17d78f00c97..00865f01881b44eef36b9e2a68bd44127cd4ec40 100644 (file)
@@ -7,7 +7,8 @@ define(`confSM_OS_HEADER', `sm_os_linux')
 define(`confLIBS', `-ldl')
 define(`confEBINDIR', `/usr/sbin')
 define(`confMKDIR', `mkdir')
-APPENDDEF(`confLIBSEARCH', `crypt nsl')
+define(`confLIBSEARCHPATH', `STAGING_DIR/lib STAGING_DIR/usr/lib')
+APPENDDEF(`confLIBSEARCH', `crypt')
 
 define(`confMTCCOPTS', `-D_REENTRANT')
 define(`confMTLDOPTS', `-lpthread')
index 9aaf14287d60f19bacaa3ec3eaaccc2931ce0dce..6d3d87618aa4b80efeb9ca7ac4a2f7135e217a16 100644 (file)
@@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=ffmpeg
 PKG_VERSION:=3.2.12
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=https://ffmpeg.org/releases/
@@ -20,6 +20,7 @@ PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>, \
 
 PKG_LICENSE:=LGPL-2.1+ GPL-2+ LGPL-3
 PKG_LICENSE_FILES:=COPYING.GPLv2 COPYING.GPLv3 COPYING.LGPLv2.1 COPYING.LGPLv3
+PKG_CPE_ID:=cpe:/a:ffmpeg:ffmpeg
 
 FFMPEG_CUSTOM_ENCODERS:= \
        ac3 \
@@ -341,13 +342,10 @@ endef
 define Package/libffmpeg-full
 $(call Package/libffmpeg/Default)
  TITLE+= (full)
- DEPENDS+= +alsa-lib +PACKAGE_libopus:libopus
- ifeq ($(CONFIG_SOFT_FLOAT),y)
-       DEPENDS+= +PACKAGE_shine:shine
- else
-       DEPENDS+= +PACKAGE_lame-lib:lame-lib +PACKAGE_libx264:libx264 +PACKAGE_fdk-aac:fdk-aac
-
- endif
+ DEPENDS+= +alsa-lib +PACKAGE_libopus:libopus \
+    $(if $$(CONFIG_SOFT_FLOAT),\
+       +PACKAGE_shine:shine,\
+       +PACKAGE_lame-lib:lame-lib +PACKAGE_libx264:libx264 +PACKAGE_fdk-aac:fdk-aac)
  VARIANT:=full
 endef
 
@@ -655,11 +653,13 @@ define Build/InstallDev/full
        $(CP) $(PKG_INSTALL_DIR)/usr/include/lib{avcodec,avdevice,avfilter,avformat,avresample,avutil,swresample,swscale} $(1)/usr/include/
        $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{avcodec,avdevice,avfilter,avformat,avresample,avutil,swresample,swscale}.{a,so*} $(1)/usr/lib/
        $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/lib{avcodec,avdevice,avfilter,avformat,avresample,avutil,swresample,swscale}.pc $(1)/usr/lib/pkgconfig/
+ifneq ($(CONFIG_SOFT_FLOAT),y)
 ifneq ($(CONFIG_PACKAGE_libx264),)
        $(CP) $(PKG_INSTALL_DIR)/usr/include/libpostproc $(1)/usr/include/
        $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpostproc.{a,so*} $(1)/usr/lib/
        $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libpostproc.pc $(1)/usr/lib/pkgconfig/
 endif
+endif
 endef
 
 define Build/InstallDev/mini
@@ -721,9 +721,11 @@ endef
 define Package/libffmpeg-full/install
        $(INSTALL_DIR) $(1)/usr/lib
        $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{avcodec,avdevice,avfilter,avformat,avresample,avutil,swresample,swscale}.so.* $(1)/usr/lib/
+ifneq ($(CONFIG_SOFT_FLOAT),y)
 ifneq ($(CONFIG_PACKAGE_libx264),)
        $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpostproc.so.* $(1)/usr/lib/
 endif
+endif
 endef
 
 define Package/libffmpeg-mini/install
index 67e05f1689264b1574deae4a8f3d6112fa756d3e..a538215bae79ff40b0027a5daa740a732431abb9 100644 (file)
@@ -8,7 +8,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=grilo
-PKG_VERSION:=0.3.4
+PKG_VERSION:=0.3.6
 PKG_RELEASE:=1
 
 PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org>
@@ -18,7 +18,7 @@ PKG_LICENSE_FILES:=COPYING
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=@GNOME/grilo/0.3/
-PKG_HASH:=7c6964053b42574c2f14715d2392a02ea5cbace955eb73e067c77aa3e43b066e
+PKG_HASH:=1e65ca82dd58020451417fde79310d4b940adc3f63ab59997419c52ed3bc9c91
 
 PKG_BUILD_DEPENDS:=glib2 libsoup libxml2
 
index 4c2822a6042211fe75066b0a5d751e6efed698cc..f6e5069ae8cded9e33745842914a951d755aecca 100644 (file)
@@ -8,7 +8,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=gst1-libav
-PKG_VERSION:=1.14.1
+PKG_VERSION:=1.14.2
 PKG_RELEASE:=1
 
 PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org> \
@@ -16,7 +16,7 @@ PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org> \
 
 PKG_SOURCE:=gst-libav-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=http://gstreamer.freedesktop.org/src/gst-libav
-PKG_HASH:=eff80a02d2f2fb9f34b67e9a26e9954d3218c7aa18e863f2a47805fa7066029d
+PKG_HASH:=8a351c39c5cfc2bbd31ca434ec4a290a730a26efbdea962fdd8306dce5c576de
 
 PKG_LICENSE:=GPL-2.0 LGPL-2.0
 PKG_LICENSE_FILES:=COPYING COPYING.LIB
index 3e0f7cfcba4a139f4a6e733b76d13a961f6bfb73..70b16e4fb30b58b53b2571c4bf9ce4289ee3a503 100644 (file)
@@ -8,7 +8,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=gst1-plugins-bad
-PKG_VERSION:=1.14.1
+PKG_VERSION:=1.14.2
 PKG_RELEASE:=1
 
 PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org> \
@@ -20,7 +20,7 @@ PKG_LICENSE_FILES:=COPYING.LIB COPYING
 PKG_BUILD_DIR:=$(BUILD_DIR)/gst-plugins-bad-$(PKG_VERSION)
 PKG_SOURCE:=gst-plugins-bad-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=http://gstreamer.freedesktop.org/src/gst-plugins-bad/
-PKG_HASH:=2a77c6908032aafdf2cd2e5823fec948f16a25c2d1497a953828d762dc20d61a
+PKG_HASH:=34fab7da70994465a64468330b2168a4a0ed90a7de7e4c499b6d127c6c1b1eaf
 
 PKG_FIXUP:=autoreconf
 PKG_INSTALL:=1
index 7c445995de9707dcf6e717cb1a82a98843c571d1..b251be39bbf624f714efb1c7e85f717cca426ee9 100644 (file)
@@ -8,7 +8,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=gst1-plugins-base
-PKG_VERSION:=1.14.1
+PKG_VERSION:=1.14.2
 PKG_RELEASE:=1
 
 PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org> \
@@ -20,7 +20,7 @@ PKG_LICENSE_FILES:=COPYING.LIB COPYING
 PKG_BUILD_DIR:=$(BUILD_DIR)/gst-plugins-base-$(PKG_VERSION)
 PKG_SOURCE:=gst-plugins-base-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=http://gstreamer.freedesktop.org/src/gst-plugins-base/
-PKG_HASH:=1026c7c3082d825d9b5d034c1a6dd8a4ebab60eb3738b0a0afde4ad2dc0b0db5
+PKG_HASH:=a4b7e80ba869f599307449b17c9e00b5d1e94d3ba1d8a1a386b8770b2ef01c7c
 
 PKG_CONFIG_DEPENDS:= \
        CONFIG_PACKAGE_gst1-mod-alsa \
index 3f01575face97ec7a7029dab70214ebc053f483e..c9b87be501d38f8b480deb51e5061a7fc10ac41c 100644 (file)
@@ -8,7 +8,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=gst1-plugins-good
-PKG_VERSION:=1.14.1
+PKG_VERSION:=1.14.2
 PKG_RELEASE:=1
 
 PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org> \
@@ -20,7 +20,7 @@ PKG_LICENSE_FILES:=COPYING
 PKG_BUILD_DIR:=$(BUILD_DIR)/gst-plugins-good-$(PKG_VERSION)
 PKG_SOURCE:=gst-plugins-good-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=http://gstreamer.freedesktop.org/src/gst-plugins-good/
-PKG_HASH:=34ec062ddb766a32377532e039781f4a16fbc3e8b449e642605bacab26a99172
+PKG_HASH:=c0575e2811860bfff59b865b8d125153859a01f0615fa41e279b64d88d25caad
 
 PKG_CONFIG_DEPENDS:= \
        CONFIG_PACKAGE_gst1-mod-lame \
index bc89f92e876e31fc8c0c5fe682eb370c9ff4bccd..b42103e21575d881c66c687e9baf2d33b17620b9 100644 (file)
@@ -8,7 +8,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=gst1-plugins-ugly
-PKG_VERSION:=1.14.1
+PKG_VERSION:=1.14.2
 PKG_RELEASE:=1
 
 PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org> \
@@ -20,7 +20,7 @@ PKG_LICENSE_FILES:=COPYING
 PKG_BUILD_DIR:=$(BUILD_DIR)/gst-plugins-ugly-$(PKG_VERSION)
 PKG_SOURCE:=gst-plugins-ugly-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=http://gstreamer.freedesktop.org/src/gst-plugins-ugly/
-PKG_HASH:=cff2430bb13f54ef81409a0b3d65ce409a376d4a7bab57a14a97d602539fe1d3
+PKG_HASH:=55e097d9d93921fdcf7abb0ff92d23b21dd9098e632f1ba433603b3bd1cf3d69
 
 PKG_CONFIG_DEPENDS:= \
        CONFIG_PACKAGE_gst1-mod-asf \
index 61fc98a6f7f8ce0a1f25fe4cdb03cd7e6da248eb..2abe86483f2b9fe291d25ab621636bf419f09a38 100644 (file)
@@ -8,7 +8,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=gstreamer1
-PKG_VERSION:=1.14.1
+PKG_VERSION:=1.14.2
 PKG_RELEASE:=1
 
 PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org> \
@@ -20,7 +20,7 @@ PKG_LICENSE_FILES:=COPYING
 PKG_BUILD_DIR:=$(BUILD_DIR)/gstreamer-$(PKG_VERSION)
 PKG_SOURCE:=gstreamer-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=http://gstreamer.freedesktop.org/src/gstreamer/
-PKG_HASH:=28d82b0d261544a9bf85b429399929e4986eb00efcf1ce16cc71d269a4c3186c
+PKG_HASH:=4bd6127299f3f29379046bbd58a526e6353b569e0e72f7b4df2ae70df6882e09
 
 PKG_FIXUP:=autoreconf
 PKG_REMOVE_FILES:=autogen.sh aclocal.m4
index 1f0fca7b8a643825d30dcbe888760bbfc05035ca..8b3ca6fd47309ef3a2b787ffe94613c8eb7fee1d 100644 (file)
@@ -8,22 +8,20 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=motion
-PKG_VERSION=3.4.0-20141018-$(PKG_SOURCE_VERSION)
-PKG_RELEASE:=3
+PKG_VERSION:=4.1.1
+PKG_RELEASE:=2
 
 PKG_MAINTAINER:=Roger D <rogerdammit@gmail.com>
 PKG_LICENSE:=GPLv2
 PKG_LICENSE_FILES:=COPYING
 
-PKG_SOURCE_PROTO:=git
-PKG_SOURCE_URL:=https://github.com/Mr-Dave/motion.git
-PKG_SOURCE_VERSION:=9479d910f2149b5558788bb86f97f26522794212
+PKG_SOURCE:=$(PKG_NAME)-release-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://codeload.github.com/Motion-Project/motion/tar.gz/release-$(PKG_VERSION)?
+PKG_HASH:=2074b935bdfe28f84c2c3233274b06908336778f303bb13530d4299c3f8aa4e2
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-release-$(PKG_VERSION)
 
-PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE:=$(PKG_SOURCE_SUBDIR).tar.gz
-PKG_MIRROR_HASH:=02602c775ec3829dac59aed16ea6b0d78f77a435b9c360db1a05cb27227da97e
-PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_SOURCE_SUBDIR)
 PKG_BUILD_PARALLEL:=1
+PKG_FIXUP:=autoreconf
 
 include $(INCLUDE_DIR)/package.mk
 
@@ -32,7 +30,7 @@ define Package/motion
   CATEGORY:=Multimedia
   DEPENDS:=+libjpeg +libpthread
   TITLE:=webcam motion sensing and logging
-  URL:=http://www.lavrsen.dk/twiki/bin/view/Motion/WebHome
+  URL:=https://motion-project.github.io/
 endef
 
 define Package/motion/conffiles
diff --git a/multimedia/motion/patches/010-Initialize-the-thread-at-start-of-main.patch b/multimedia/motion/patches/010-Initialize-the-thread-at-start-of-main.patch
new file mode 100644 (file)
index 0000000..5e8eafa
--- /dev/null
@@ -0,0 +1,94 @@
+From 3c7cbd685017c1bf9ba2eaa811b63842bec28f64 Mon Sep 17 00:00:00 2001
+From: Mr-DaveDev <MotionMrDaveDev@gmail.com>
+Date: Mon, 1 Jan 2018 13:07:08 -0700
+Subject: [PATCH] Initialize the thread at start of main
+
+Closes #589
+---
+ logger.c |  5 -----
+ motion.c | 30 ++++++++++++++++--------------
+ 2 files changed, 16 insertions(+), 19 deletions(-)
+
+diff --git a/logger.c b/logger.c
+index c55044b..5ef2f85 100644
+--- a/logger.c
++++ b/logger.c
+@@ -193,11 +193,6 @@ void motion_log(int level, unsigned int type, int errno_flag, const char *fmt, .
+     //printf("log_type %d, type %d level %d\n", log_type, type, level);
+-    /*
+-     * If pthread_getspecific fails (e.g., because the thread's TLS doesn't
+-     * contain anything for thread number, it returns NULL which casts to zero,
+-     * which is nice because that's what we want in that case.
+-     */
+     threadnr = (unsigned long)pthread_getspecific(tls_key_threadnr);
+     /*
+diff --git a/motion.c b/motion.c
+index 985d4b2..9fe58c1 100644
+--- a/motion.c
++++ b/motion.c
+@@ -2886,10 +2886,6 @@ static void motion_startup(int daemonize, int argc, char *argv[])
+     }
+-    //set_log_level(cnt_list[0]->log_level);
+-
+-    MOTION_LOG(NTC, TYPE_ALL, NO_ERRNO, "Motion "VERSION" Started");
+-
+     if ((cnt_list[0]->conf.log_file) && (strncmp(cnt_list[0]->conf.log_file, "syslog", 6))) {
+         set_log_mode(LOGMODE_FILE);
+         ptr_logfile = set_logfile(cnt_list[0]->conf.log_file);
+@@ -2908,6 +2904,8 @@ static void motion_startup(int daemonize, int argc, char *argv[])
+         MOTION_LOG(NTC, TYPE_ALL, NO_ERRNO, "Logging to syslog");
+     }
++    MOTION_LOG(NTC, TYPE_ALL, NO_ERRNO, "Motion "VERSION" Started");
++
+     if ((cnt_list[0]->conf.log_type_str == NULL) ||
+         !(cnt_list[0]->log_type = get_log_type(cnt_list[0]->conf.log_type_str))) {
+         cnt_list[0]->log_type = TYPE_DEFAULT;
+@@ -3053,8 +3051,22 @@ int main (int argc, char **argv)
+      */
+     struct sigaction sig_handler_action;
+     struct sigaction sigchild_action;
++
++
+     setup_signals(&sig_handler_action, &sigchild_action);
++    /*
++     * Create and a thread attribute for the threads we spawn later on.
++     * PTHREAD_CREATE_DETACHED means to create threads detached, i.e.
++     * their termination cannot be synchronized through 'pthread_join'.
++     */
++    pthread_attr_init(&thread_attr);
++    pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED);
++
++    /* Create the TLS key for thread number. */
++    pthread_key_create(&tls_key_threadnr, NULL);
++    pthread_setspecific(tls_key_threadnr, (void *)(0));
++
+     motion_startup(1, argc, argv);
+     ffmpeg_global_init();
+@@ -3102,16 +3114,6 @@ int main (int argc, char **argv)
+     if (cnt_list[0]->conf.setup_mode)
+         MOTION_LOG(NTC, TYPE_ALL, NO_ERRNO, "Motion running in setup mode.");
+-    /*
+-     * Create and a thread attribute for the threads we spawn later on.
+-     * PTHREAD_CREATE_DETACHED means to create threads detached, i.e.
+-     * their termination cannot be synchronized through 'pthread_join'.
+-     */
+-    pthread_attr_init(&thread_attr);
+-    pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED);
+-
+-    /* Create the TLS key for thread number. */
+-    pthread_key_create(&tls_key_threadnr, NULL);
+     do {
+         if (restart) {
+-- 
+2.7.4
+
diff --git a/multimedia/motion/patches/100-musl-compat.patch b/multimedia/motion/patches/100-musl-compat.patch
deleted file mode 100644 (file)
index b788e26..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
---- a/motion.c
-+++ b/motion.c
-@@ -2630,6 +2630,17 @@ int main (int argc, char **argv)
-     struct sigaction sigchild_action;
-     setup_signals(&sig_handler_action, &sigchild_action);
-+    /*
-+     * Create and a thread attribute for the threads we spawn later on.
-+     * PTHREAD_CREATE_DETACHED means to create threads detached, i.e.
-+     * their termination cannot be synchronized through 'pthread_join'.
-+     */
-+    pthread_attr_init(&thread_attr);
-+    pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED);
-+
-+    /* Create the TLS key for thread number. */
-+    pthread_key_create(&tls_key_threadnr, NULL);
-+
-     motion_startup(1, argc, argv);
- #ifdef HAVE_FFMPEG
-@@ -2648,17 +2659,6 @@ int main (int argc, char **argv)
-     if (cnt_list[0]->conf.setup_mode)
-         MOTION_LOG(NTC, TYPE_ALL, NO_ERRNO, "%s: Motion running in setup mode.");
--    /*
--     * Create and a thread attribute for the threads we spawn later on.
--     * PTHREAD_CREATE_DETACHED means to create threads detached, i.e.
--     * their termination cannot be synchronized through 'pthread_join'.
--     */
--    pthread_attr_init(&thread_attr);
--    pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED);
--
--    /* Create the TLS key for thread number. */
--    pthread_key_create(&tls_key_threadnr, NULL);
--
-     do {
-         if (restart) {
-             /*
---- a/motion.h
-+++ b/motion.h
-@@ -84,7 +84,7 @@
- #endif
- /* strerror_r() XSI vs GNU */
--#if (defined(BSD)) || ((_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && ! _GNU_SOURCE)
-+#if (defined(BSD)) || ((_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && ! _GNU_SOURCE) || (!defined(__GLIBC__))
- #define XSI_STRERROR_R
- #endif
index a97173c4d6747a723dcaf47fd0d2c487c700d659..69742edf703e9e520d373dc5f3ec15053e81bb24 100644 (file)
@@ -8,16 +8,14 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=xupnpd
-PKG_REV:=7ff74b2d5288fbc35c4f6fcb94466d408b1f853c
-PKG_VERSION:=2017-10-31
+PKG_REV:=fe39cdc41c84d5b365e3da766167c7c9551e3b2f
+PKG_VERSION:=2018-09-24
 PKG_RELEASE:=1
 
-PKG_SOURCE_PROTO:=git
-PKG_SOURCE_VERSION:=$(PKG_REV)
-PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_URL:=https://github.com/clark15b/xupnpd.git
-PKG_SOURCE:=$(PKG_SOURCE_SUBDIR).tar.gz
-PKG_MIRROR_HASH:=bba5aae63bb5c70af831a0f2ecbed3b0e39aa814ae383929b8eaef4ca1a8f421
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://codeload.github.com/clark15b/xupnpd/tar.gz/$(PKG_REV)?
+PKG_HASH:=5ce2f3423b86e8de4dcd5c46da28a51707c21b234a4b356608902534c3160c84
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_REV)
 
 PKG_LICENSE:=GPLv2
 PKG_LICENSE_FILES:=LICENSE
diff --git a/net/Netopeer2/Config_keystored.in b/net/Netopeer2/Config_keystored.in
new file mode 100644 (file)
index 0000000..7325250
--- /dev/null
@@ -0,0 +1,7 @@
+if PACKAGE_netopeer2-keystored
+
+config SSH_KEYS
+       bool "Generate default ssh keys"
+       default y
+
+endif
diff --git a/net/Netopeer2/Makefile b/net/Netopeer2/Makefile
new file mode 100644 (file)
index 0000000..81c21cd
--- /dev/null
@@ -0,0 +1,131 @@
+#
+# Copyright (C) 2017 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+# Warning by default OpenWrt does not have a root password which is necessery for NETCONF server.
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=Netopeer2
+PKG_VERSION:=0.6-r1
+
+PKG_LICENSE:=BSD-3-Clause
+PKG_MAINTAINER:=Mislav Novakovic <mislav.novakovic@sartura.hr>
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://codeload.github.com/CESNET/Netopeer2/tar.gz/v$(PKG_VERSION)?
+PKG_HASH:=5f38db43f6021e389cf1f3c5c70e432586d8ba7f2d64ed5bd2bea8c7ea6b39e6
+
+CMAKE_INSTALL:=1
+
+PKG_BUILD_PARALLEL:=1
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/cmake.mk
+
+define Package/netopeer2-keystored/config
+  source "$(SOURCE)/Config_keystored.in"
+endef
+
+define Package/netopeer2-server
+  SECTION:=utils
+  CATEGORY:=Utilities
+  TITLE:=NETCONF server
+  URL:=$(PKG_SOURCE_URL)
+  DEPENDS:=+libpthread +libyang +libnetconf2 +netopeer2-keystored +libsysrepo +sysrepocfg +sysrepoctl +sysrepo
+  MENU:=1
+endef
+
+define Package/netopeer2-cli
+  SECTION:=utils
+  CATEGORY:=Utilities
+  TITLE:=Netopeer2 cli tool
+  URL:=$(PKG_SOURCE_URL)
+  DEPENDS:=+libpthread +libyang +libnetconf2 +libopenssl
+endef
+
+define Package/netopeer2-keystored
+  SECTION:=utils
+  CATEGORY:=Utilities
+  TITLE:=Netopeer2 key store management
+  URL:=$(PKG_SOURCE_URL)
+  DEPENDS:=+libopenssl +libsysrepo +sysrepo +sysrepocfg +sysrepoctl +SSH_KEYS:openssh-keygen
+  MENU:=1
+endef
+
+define Package/netopeer2/description
+ Netopeer2 is a set of tools implementing network configuration tools based on the NETCONF
+ Protocol. This is the second generation of the toolset, originally available as the Netopeer
+ project. Netopeer2 is based on the new generation of the NETCONF and YANG libraries -
+ libyang and libnetconf2. The Netopeer server uses sysrepo as a NETCONF datastore implementation.
+endef
+
+CMAKE_OPTIONS += \
+       -DCMAKE_INSTALL_PREFIX:PATH=/usr \
+       -DCMAKE_BUILD_TYPE:STRING=Release \
+       -DKEYSTORED_KEYS_DIR:STRING=/etc/keystored/keys \
+       -DENABLE_CONFIGURATION:BOOL=OFF \
+       -DMODEL_INSTALL:BOOL=OFF \
+       -DSSH_KEY_INSTALL:BOOL=OFF
+
+define Package/netopeer2-server/install
+       $(INSTALL_DIR) $(1)/bin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/server/netopeer2-server $(1)/bin/
+
+       $(INSTALL_DIR) $(1)/etc/sysrepo/yang
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/modules/ietf-ssh-server.yang $(1)/etc/sysrepo/yang/ietf-ssh-server@2016-11-02.yang
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/modules/ietf-tls-server.yang $(1)/etc/sysrepo/yang/ietf-tls-server@2016-11-02.yang
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/modules/iana-crypt-hash.yang $(1)/etc/sysrepo/yang/iana-crypt-hash@2014-08-06.yang
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/modules/ietf-x509-cert-to-name.yang $(1)/etc/sysrepo/yang/ietf-x509-cert-to-name@2014-12-10.yang
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/modules/ietf-netconf-server.yang $(1)/etc/sysrepo/yang/ietf-netconf-server@2016-11-02.yang
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/modules/ietf-netconf-monitoring.yang $(1)/etc/sysrepo/yang/ietf-netconf-monitoring@2010-10-04.yang
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/modules/ietf-netconf-with-defaults.yang $(1)/etc/sysrepo/yang/ietf-netconf-with-defaults@2011-06-01.yang
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/modules/ietf-system.yang $(1)/etc/sysrepo/yang/ietf-system@2014-08-06.yang
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/modules/ietf-datastores.yang $(1)/etc/sysrepo/yang/ietf-datastores@2017-08-17.yang
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/modules/ietf-yang-library.yang $(1)/etc/sysrepo/yang/ietf-yang-library@2018-01-17.yang
+
+       $(INSTALL_DIR) $(1)/etc/uci-defaults
+       $(INSTALL_BIN) ./files/netopeer2-server.default $(1)/etc/uci-defaults/98_netopeer2-server
+
+       $(INSTALL_DIR) $(1)/etc/init.d/
+       $(INSTALL_BIN) ./files/netopeer2-server.init $(1)/etc/init.d/netopeer2-server
+
+       $(INSTALL_DIR) $(1)/usr/share/netopeer2-server
+       $(INSTALL_DATA) ./files/stock_config.xml $(1)/usr/share/netopeer2-server
+endef
+
+define Package/netopeer2-cli/install
+       $(INSTALL_DIR) $(1)/bin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/cli/netopeer2-cli $(1)/bin/
+endef
+
+define Package/netopeer2-keystored/install
+       $(INSTALL_DIR) $(1)/usr/lib/sysrepo/plugins/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/keystored/libkeystored.so $(1)/usr/lib/sysrepo/plugins/
+
+       $(INSTALL_DIR) $(1)/etc/sysrepo/yang
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/modules/ietf-keystore.yang $(1)/etc/sysrepo/yang/ietf-keystore@2016-10-31.yang
+
+       $(INSTALL_DIR) $(1)/etc/uci-defaults
+
+       $(INSTALL_DIR) $(1)/etc/keystored/keys
+ifeq ($(CONFIG_SSH_KEYS),y)
+       $(INSTALL_BIN) ./files/netopeer2-keystored-keygen.default $(1)/etc/uci-defaults/97_netopeer2-keystored
+else
+       $(INSTALL_BIN) ./files/netopeer2-keystored.default $(1)/etc/uci-defaults/97_netopeer2-keystored
+       #ssh key name is specified in ./files/stock_config.xml file, you will need to provide the ssh keys yourself.
+       $(INSTALL_DATA) ./files/ssh_host_rsa_key.pem $(1)/etc/keystored/keys
+       $(INSTALL_DATA) ./files/ssh_host_rsa_key.pub.pem $(1)/etc/keystored/keys
+endif
+
+       $(INSTALL_DIR) $(1)/usr/share/netopeer2-keystored
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/keystored/stock_key_config.xml $(1)/usr/share/netopeer2-keystored
+endef
+
+$(eval $(call BuildPackage,netopeer2-server))
+$(eval $(call BuildPackage,netopeer2-cli))
+$(eval $(call BuildPackage,netopeer2-keystored))
diff --git a/net/Netopeer2/files/netopeer2-keystored-keygen.default b/net/Netopeer2/files/netopeer2-keystored-keygen.default
new file mode 100644 (file)
index 0000000..30e06a1
--- /dev/null
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+# Warning, problems can occur if the device restarts in the middle of this uci-default script
+
+if [ -x /bin/sysrepoctl ]; then
+       match=$(sysrepoctl -l | grep "ietf-keystore ")
+       if [ ! "$match" ]; then
+               sysrepoctl --install --yang=/etc/sysrepo/yang/ietf-keystore@2016-10-31.yang -o root:root -p 600
+               if [ -x /bin/sysrepocfg ]; then
+                       sysrepocfg -f xml -d startup -i /usr/share/netopeer2-keystored/stock_key_config.xml ietf-keystore
+                       rm /usr/share/netopeer2-keystored/stock_key_config.xml
+               fi
+
+               #generate ssh keys
+               if [ ! -f "/etc/keystored/keys/ssh_host_rsa_key.pem" ]; then
+                       ssh-keygen -m pem -t rsa -q -N "" -f /etc/keystored/keys/ssh_host_rsa_key.pem
+                       chmod go-rw /etc/keystored/keys/ssh_host_rsa_key.pem
+               fi
+       fi
+fi
+
+exit 0
diff --git a/net/Netopeer2/files/netopeer2-keystored.default b/net/Netopeer2/files/netopeer2-keystored.default
new file mode 100644 (file)
index 0000000..5257e53
--- /dev/null
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+# Warning, problems can occur if the device restarts in the middle of this uci-default script
+
+if [ -x /bin/sysrepoctl ]; then
+       match=$(sysrepoctl -l | grep "ietf-keystore ")
+       if [ ! "$match" ]; then
+               sysrepoctl --install --yang=/etc/sysrepo/yang/ietf-keystore@2016-10-31.yang -o root:root -p 600
+               if [ -x /bin/sysrepocfg ]; then
+                       sysrepocfg -f xml -d startup -i /usr/share/netopeer2-keystored/stock_key_config.xml ietf-keystore
+                       rm /usr/share/netopeer2-keystored/stock_key_config.xml
+               fi
+       fi
+fi
+
+exit 0
diff --git a/net/Netopeer2/files/netopeer2-server.default b/net/Netopeer2/files/netopeer2-server.default
new file mode 100644 (file)
index 0000000..1cabba7
--- /dev/null
@@ -0,0 +1,65 @@
+#!/bin/sh
+
+# Warning, problems can occur if the device restarts in the middle of this uci-default script
+
+if [ -x /bin/sysrepoctl ]; then
+       match=$(sysrepoctl -l | grep "ietf-ssh-server ")
+       if [ ! "$match" ]; then
+               sysrepoctl --install --yang=/etc/sysrepo/yang/ietf-ssh-server@2016-11-02.yang -p 600
+       fi
+
+       match=$(sysrepoctl -l | grep "ietf-tls-server ")
+       if [ ! "$match" ]; then
+               sysrepoctl --install --yang=/etc/sysrepo/yang/ietf-tls-server@2016-11-02.yang -p 600
+       fi
+
+       match=$(sysrepoctl -l | grep "iana-crypt-hash ")
+       if [ ! "$match" ]; then
+               sysrepoctl --install --yang=/etc/sysrepo/yang/iana-crypt-hash@2014-08-06.yang -p 600
+       fi
+
+       match=$(sysrepoctl -l | grep "ietf-x509-cert-to-name ")
+       if [ ! "$match" ]; then
+               sysrepoctl --install --yang=/etc/sysrepo/yang/ietf-x509-cert-to-name@2014-12-10.yang -p 600
+       fi
+
+       match=$(sysrepoctl -l | grep "ietf-netconf-server ")
+       if [ ! "$match" ]; then
+               sysrepoctl --install --yang=/etc/sysrepo/yang/ietf-netconf-server@2016-11-02.yang -o root:root -p 600
+               sysrepoctl -m ietf-netconf-server -e listen
+               sysrepoctl -m ietf-netconf-server -e ssh-listen
+               if [ -x /bin/sysrepocfg ]; then
+                       sysrepocfg -f xml -d startup -i /usr/share/netopeer2-server/stock_config.xml ietf-netconf-server
+                       rm /usr/share/netopeer2-server/stock_config.xml
+               fi
+       fi
+
+       match=$(sysrepoctl -l | grep "ietf-netconf-monitoring ")
+       if [ ! "$match" ]; then
+               sysrepoctl --install --yang=/etc/sysrepo/yang/ietf-netconf-monitoring@2010-10-04.yang -o root:root -p 600
+       fi
+
+       match=$(sysrepoctl -l | grep "ietf-netconf-with-defaults ")
+       if [ ! "$match" ]; then
+               sysrepoctl --install --yang=/etc/sysrepo/yang/ietf-netconf-with-defaults@2011-06-01.yang -o root:root -p 600
+       fi
+
+       match=$(sysrepoctl -l | grep "ietf-system ")
+       if [ ! "$match" ]; then
+               sysrepoctl --install --yang=/etc/sysrepo/yang/ietf-system@2014-08-06.yang -o root:root -p 600
+               sysrepoctl -m ietf-system -e authentication
+               sysrepoctl -m ietf-system -e local-users
+       fi
+
+       match=$(sysrepoctl -l | grep "ietf-datastores ")
+       if [ ! "$match" ]; then
+               sysrepoctl --install --yang=/etc/sysrepo/yang/ietf-datastores@2017-08-17.yang -o root:root -p 600
+       fi
+
+       match=$(sysrepoctl -l | grep "ietf-yang-library ")
+       if [ ! "$match" ]; then
+               sysrepoctl --install --yang=/etc/sysrepo/yang/ietf-yang-library@2018-01-17.yang -o root:root -p 600
+       fi
+fi
+
+exit 0
diff --git a/net/Netopeer2/files/netopeer2-server.init b/net/Netopeer2/files/netopeer2-server.init
new file mode 100644 (file)
index 0000000..6b2c133
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh /etc/rc.common
+
+START=99
+STOP=11
+
+USE_PROCD=1
+PROG=/bin/netopeer2-server
+
+start_service() {
+    procd_open_instance
+    procd_set_param command $PROG
+    procd_append_param command -d -v 0
+    procd_set_param respawn
+    procd_close_instance
+}
+
+stop_service()
+{
+    service_stop ${PROG}
+    rm /var/run/netopeer2-server.pid
+}
diff --git a/net/Netopeer2/files/stock_config.xml b/net/Netopeer2/files/stock_config.xml
new file mode 100644 (file)
index 0000000..4576684
--- /dev/null
@@ -0,0 +1,17 @@
+<netconf-server xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-server">
+  <listen>
+    <endpoint>
+      <name>test_ssh_listen_endpt</name>
+      <ssh>
+        <address>::</address>
+        <port>830</port>
+        <host-keys>
+          <host-key>
+            <name>test_ssh_listen_key</name>
+            <public-key>ssh_host_rsa_key</public-key>
+          </host-key>
+        </host-keys>
+      </ssh>
+    </endpoint>
+  </listen>
+</netconf-server>
diff --git a/net/Netopeer2/patches/001-fix-for-cmake-build b/net/Netopeer2/patches/001-fix-for-cmake-build
new file mode 100644 (file)
index 0000000..dad54a4
--- /dev/null
@@ -0,0 +1,74 @@
+Index: Netopeer2-0.4.13-ae560bef2e70d274f6d028b59e3cb398ea2a621d/CMakeLists.txt
+===================================================================
+--- /dev/null
++++ Netopeer2-0.4.13-ae560bef2e70d274f6d028b59e3cb398ea2a621d/CMakeLists.txt
+@@ -0,0 +1,5 @@
++cmake_minimum_required(VERSION 2.6)
++
++add_subdirectory(server)
++add_subdirectory(cli)
++add_subdirectory(keystored)
+Index: Netopeer2-0.4.13-ae560bef2e70d274f6d028b59e3cb398ea2a621d/cli/CMakeLists.txt
+===================================================================
+--- Netopeer2-0.4.13-ae560bef2e70d274f6d028b59e3cb398ea2a621d.orig/cli/CMakeLists.txt
++++ Netopeer2-0.4.13-ae560bef2e70d274f6d028b59e3cb398ea2a621d/cli/CMakeLists.txt
+@@ -1,7 +1,7 @@
+ cmake_minimum_required(VERSION 2.6)
+ # include custom Modules
+-set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/../CMakeModules/")
++set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/CMakeModules/")
+ project(netopeer2-cli C)
+ include(GNUInstallDirs)
+@@ -83,7 +83,7 @@ endif()
+ install(FILES ${PROJECT_SOURCE_DIR}/doc/${PROJECT_NAME}.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
+ # clean cmake cache
+-add_custom_target(cleancache
++add_custom_target(cleancache_cli
+                   COMMAND make clean
+                   COMMAND find . -iname '*cmake*' -not -name CMakeLists.txt -exec rm -rf {} +
+                   COMMAND rm -rf Makefile Doxyfile
+Index: Netopeer2-0.4.13-ae560bef2e70d274f6d028b59e3cb398ea2a621d/keystored/CMakeLists.txt
+===================================================================
+--- Netopeer2-0.4.13-ae560bef2e70d274f6d028b59e3cb398ea2a621d.orig/keystored/CMakeLists.txt
++++ Netopeer2-0.4.13-ae560bef2e70d274f6d028b59e3cb398ea2a621d/keystored/CMakeLists.txt
+@@ -1,7 +1,7 @@
+ cmake_minimum_required(VERSION 2.6)
+ # include custom Modules
+-set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/../CMakeModules/")
++set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/CMakeModules/")
+ project(keystored C)
+ include(GNUInstallDirs)
+@@ -140,7 +140,7 @@ if (SSH_KEY_INSTALL)
+         execute_process(COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/scripts/ssh-key-import.sh)")
+ endif()
+-add_custom_target(install-scripts-ide
++add_custom_target(install-scripts-ide-keystored
+     scripts/model-install.sh
+     scripts/ssh-key-import.sh
+ )
+Index: Netopeer2-0.4.13-ae560bef2e70d274f6d028b59e3cb398ea2a621d/server/CMakeLists.txt
+===================================================================
+--- Netopeer2-0.4.13-ae560bef2e70d274f6d028b59e3cb398ea2a621d.orig/server/CMakeLists.txt
++++ Netopeer2-0.4.13-ae560bef2e70d274f6d028b59e3cb398ea2a621d/server/CMakeLists.txt
+@@ -1,7 +1,7 @@
+ cmake_minimum_required(VERSION 2.8.9)
+ # include custom Modules
+-set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/../CMakeModules/")
++set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/CMakeModules/")
+ project(netopeer2-server C)
+ include(GNUInstallDirs)
+@@ -176,7 +176,7 @@ if (ENABLE_CONFIGURATION)
+         execute_process(COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/scripts/model-install.sh)")
+ endif()
+-add_custom_target(install-scripts-ide
++add_custom_target(install-scripts-ide-server
+     scripts/model-install.sh
diff --git a/net/Netopeer2/patches/002-fix-keystored-cross-compile b/net/Netopeer2/patches/002-fix-keystored-cross-compile
new file mode 100644 (file)
index 0000000..11301e7
--- /dev/null
@@ -0,0 +1,18 @@
+Index: Netopeer2-0.6-r1/keystored/CMakeLists.txt
+===================================================================
+--- Netopeer2-0.6-r1.orig/keystored/CMakeLists.txt
++++ Netopeer2-0.6-r1/keystored/CMakeLists.txt
+@@ -69,6 +69,8 @@ find_package(SYSREPO REQUIRED)
+ target_link_libraries(keystored ${SYSREPO_LIBRARIES})
+ include_directories(${SYSREPO_INCLUDE_DIRS})
++# skip step because of cross compiling
++if (FALSE)
+ # get sysrepo plugins directory
+ if (NOT SR_PLUGINS_DIR)
+     if (PKG_CONFIG_FOUND)
+@@ -154,3 +156,4 @@ add_custom_target(install-scripts-ide-ke
+ # plugins should be installed into sysrepo plugins dir
+ install(TARGETS keystored DESTINATION ${SR_PLUGINS_DIR})
++endif()
index 09b248e3f13c3f8accc02835eef1b2a33a381a56..7bf98cc06147c0b52b1045e8e561966fc97fca8e 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=acme
 PKG_VERSION:=2.7.9
-PKG_RELEASE:=1
+PKG_RELEASE:=4
 PKG_LICENSE:=GPLv3
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
@@ -25,7 +25,7 @@ include $(INCLUDE_DIR)/package.mk
 define Package/acme
   SECTION:=net
   CATEGORY:=Network
-  DEPENDS:=+curl +ca-bundle +openssl-util +netcat
+  DEPENDS:=+curl +ca-bundle +openssl-util +socat
   TITLE:=ACME (Letsencrypt) client
 endef
 
@@ -75,7 +75,7 @@ define Package/luci-app-acme
   SECTION:=luci
   CATEGORY:=LuCI
   TITLE:=ACME package - LuCI interface
-  DEPENDS:= lua luci-base +acme luci-app-uhttpd
+  DEPENDS:= lua luci-base +acme
   SUBMENU:=3. Applications
 endef
 
index 193699cc398ac3e475118cb8155a8c1d5ddfccf9..2b97272172591f33848ec723dc22e1cdea600d16 100644 (file)
@@ -10,6 +10,12 @@ Copyright 2016 Toke Høiland-Jørgensen <toke@toke.dk>
 
 ]]--
 
+local ipkg = require "luci.model.ipkg"
+
+local nginx_presence = ipkg.installed("nginx-all-module") or ipkg.installed("nginx-ssl") or false
+
+local uhttpd_presence = ipkg.installed("uhttpd") or false
+
 m = Map("acme", translate("ACME certificates"),
        translate("This configures ACME (Letsencrypt) automatic certificate installation. " ..
                   "Simply fill out this to have the router configured with Letsencrypt-issued " ..
@@ -52,10 +58,22 @@ kl = cs:option(Value, "keylength", translate("Key length"),
 kl.rmempty = false
 kl.datatype = "and(uinteger,min(2048))"
 
+if uhttpd_presence then
 u = cs:option(Flag, "update_uhttpd", translate("Use for uhttpd"),
               translate("Update the uhttpd config with this certificate once issued " ..
-                        "(only select this for one certificate)."))
+                        "(only select this for one certificate)." ..
+                        "Is also available luci-app-uhttpd to configure uhttpd form the LuCI interface."))
+u.rmempty = false
+end
+
+if nginx_presence then
+u = cs:option(Flag, "update_nginx", translate("Use for nginx"),
+              translate("Update the nginx config with this certificate once issued " ..
+                        "(only select this for one certificate)." ..
+                        "Nginx must support ssl, if not it won't start as it needs to be " ..
+                        "compiled with ssl support to use cert options"))
 u.rmempty = false
+end
 
 wr = cs:option(Value, "webroot", translate("Webroot directory"),
                translate("Webserver root directory. Set this to the webserver " ..
index af12ce1fb008e2f2f2f37e4dd1ae389569e7f3ab..95565c83281fbea0b037dd65206904d592e8f534 100644 (file)
@@ -8,5 +8,6 @@ config cert 'example'
        option use_staging 1
        option keylength 2048
        option update_uhttpd 1
+       option update_nginx 1
        option webroot ""
        list domains example.org
index 368de26d37393e94f5ac28e667500a25d9fe172e..233abee68667cca2bbbb3355ae665844d1cf60d5 100644 (file)
@@ -17,6 +17,9 @@ UHTTPD_LISTEN_HTTP=
 STATE_DIR='/etc/acme'
 ACCOUNT_EMAIL=
 DEBUG=0
+NGINX_WEBSERVER=0
+UPDATE_NGINX=0
+UPDATE_UHTTPD=0
 
 . /lib/functions.sh
 
@@ -42,9 +45,13 @@ debug()
     [ "$DEBUG" -eq "1" ] && logger -t acme -s -p daemon.debug "$@"
 }
 
-get_listeners()
-{
-    netstat -nptl 2>/dev/null | awk 'match($4, /:80$/){split($7, parts, "/"); print parts[2];}' | uniq | tr "\n" " "
+get_listeners() {
+    local proto rq sq listen remote state program
+    netstat -nptl 2>/dev/null | while read proto rq sq listen remote state program; do
+        case "$proto#$listen#$program" in
+            tcp#*:80#[0-9]*/*) echo -n "${program%% *} " ;;
+        esac
+    done
 }
 
 pre_checks()
@@ -54,37 +61,58 @@ pre_checks()
     log "Running pre checks for $main_domain."
 
     listeners="$(get_listeners)"
-    debug "port80 listens: $listeners"
-
-    case "$listeners" in
-        "uhttpd")
-            debug "Found uhttpd listening on port 80; trying to disable."
 
-            UHTTPD_LISTEN_HTTP=$(uci get uhttpd.main.listen_http)
-
-            if [ -z "$UHTTPD_LISTEN_HTTP" ]; then
-                err "$main_domain: Unable to find uhttpd listen config."
-                err "Manually disable uhttpd or set webroot to continue."
-                return 1
-            fi
+    debug "port80 listens: $listeners"
 
-            uci set uhttpd.main.listen_http=''
-            uci commit uhttpd || return 1
-            if ! /etc/init.d/uhttpd reload ; then
-                uci set uhttpd.main.listen_http="$UHTTPD_LISTEN_HTTP"
-                uci commit uhttpd
-                return 1
-            fi
+    for listener in $(get_listeners); do
+        pid="${listener%/*}"
+        cmd="${listener#*/}"
+
+        case "$cmd" in
+            uhttpd)
+                debug "Found uhttpd listening on port 80; trying to disable."
+
+                UHTTPD_LISTEN_HTTP=$(uci get uhttpd.main.listen_http)
+
+                if [ -z "$UHTTPD_LISTEN_HTTP" ]; then
+                    err "$main_domain: Unable to find uhttpd listen config."
+                    err "Manually disable uhttpd or set webroot to continue."
+                    return 1
+                fi
+
+                uci set uhttpd.main.listen_http=''
+                uci commit uhttpd || return 1
+                if ! /etc/init.d/uhttpd reload ; then
+                    uci set uhttpd.main.listen_http="$UHTTPD_LISTEN_HTTP"
+                    uci commit uhttpd
+                    return 1
+                fi
             ;;
-        "")
-            debug "Nothing listening on port 80."
+            nginx*)
+                debug "Found nginx listening on port 80; trying to disable."
+                NGINX_WEBSERVER=1
+                local tries=0
+                while grep -sq "$cmd" "/proc/$pid/cmdline" && kill -0 "$pid"; do
+                /etc/init.d/nginx stop
+                    if [ $tries -gt 10 ]; then
+                        debug "Can't stop nginx. Terminating script."
+                        return 1
+                    fi
+                    debug "Waiting for nginx to stop..."
+                    tries=$((tries + 1))
+                    sleep 1
+                done
             ;;
-        *)
-            err "$main_domain: Cannot run in standalone mode; another daemon is listening on port 80."
-            err "Disable other daemon or set webroot to continue."
-            return 1
+            "")
+                debug "Nothing listening on port 80."
             ;;
-    esac
+            *)
+                err "$main_domain: Cannot run in standalone mode; another daemon is listening on port 80."
+                err "Disable other daemon or set webroot to continue."
+                return 1
+            ;;
+        esac
+    done
 
     iptables -I input_rule -p tcp --dport 80 -j ACCEPT -m comment --comment "ACME" || return 1
     ip6tables -I input_rule -p tcp --dport 80 -j ACCEPT -m comment --comment "ACME" || return 1
@@ -101,11 +129,18 @@ post_checks()
     iptables -D input_rule -p tcp --dport 80 -j ACCEPT -m comment --comment "ACME" 2>/dev/null
     ip6tables -D input_rule -p tcp --dport 80 -j ACCEPT -m comment --comment "ACME" 2>/dev/null
 
-    if [ -e /etc/init.d/uhttpd ] && [ -n "$UHTTPD_LISTEN_HTTP" ]; then
-        uci set uhttpd.main.listen_http="$UHTTPD_LISTEN_HTTP"
-        uci commit uhttpd
+    if [ -e /etc/init.d/uhttpd ] && ( [ -n "$UHTTPD_LISTEN_HTTP" ] || [ $UPDATE_UHTTPD -eq 1 ] ); then
+        if [ -n "$UHTTPD_LISTEN_HTTP" ]; then
+            uci set uhttpd.main.listen_http="$UHTTPD_LISTEN_HTTP"
+            uci commit uhttpd
+            UHTTPD_LISTEN_HTTP=
+        fi
         /etc/init.d/uhttpd reload
-        UHTTPD_LISTEN_HTTP=
+    fi
+
+    if [ -e /etc/init.d/nginx ] && ( [ "$NGINX_WEBSERVER" -eq 1 ] || [ $UPDATE_NGINX -eq 1 ] ); then
+        NGINX_WEBSERVER=0
+        /etc/init.d/nginx restart
     fi
 }
 
@@ -137,6 +172,7 @@ issue_cert()
     local enabled
     local use_staging
     local update_uhttpd
+    local update_nginx
     local keylength
     local domains
     local main_domain
@@ -148,11 +184,15 @@ issue_cert()
     config_get_bool enabled "$section" enabled 0
     config_get_bool use_staging "$section" use_staging
     config_get_bool update_uhttpd "$section" update_uhttpd
+    config_get_bool update_nginx "$section" update_nginx
     config_get domains "$section" domains
     config_get keylength "$section" keylength
     config_get webroot "$section" webroot
     config_get dns "$section" dns
 
+    UPDATE_NGINX=$update_nginx
+    UPDATE_UHTTPD=$update_uhttpd
+
     [ "$enabled" -eq "1" ] || return
 
     [ "$DEBUG" -eq "1" ] && acme_args="$acme_args --debug"
@@ -187,7 +227,7 @@ issue_cert()
         acme_args="$acme_args --dns $dns"
     elif [ -z "$webroot" ]; then
         log "Using standalone mode"
-        acme_args="$acme_args --standalone"
+        acme_args="$acme_args --standalone --listen-v6"
     else
         if [ ! -d "$webroot" ]; then
             err "$main_domain: Webroot dir '$webroot' does not exist!"
@@ -211,15 +251,22 @@ issue_cert()
             err "Restoring staging certificate"
             mv "$STATE_DIR/${main_domain}.staging" "$STATE_DIR/${main_domain}"
         fi
+        post_checks
         return 1
     fi
 
-    if [ "$update_uhttpd" -eq "1" ]; then
+    if [ -e /etc/init.d/uhttpd ] && [ "$update_uhttpd" -eq "1" ]; then
         uci set uhttpd.main.key="$STATE_DIR/${main_domain}/${main_domain}.key"
         uci set uhttpd.main.cert="$STATE_DIR/${main_domain}/fullchain.cer"
         # commit and reload is in post_checks
     fi
 
+    if [ -e /etc/init.d/nginx ] && [ "$update_nginx" -eq "1" ]; then
+        sed -i "s#ssl_certificate\ .*#ssl_certificate $STATE_DIR/${main_domain}/fullchain.cer;#g" /etc/nginx/nginx.conf
+        sed -i "s#ssl_certificate_key\ .*#ssl_certificate_key $STATE_DIR/${main_domain}/${main_domain}.key;#g" /etc/nginx/nginx.conf
+        # commit and reload is in post_checks
+    fi
+
     post_checks
 }
 
index 4b199597ea8062a22eacbd5701f604dd2dfedaf1..88b6e5d752fd60d8249efcc7a41dec15a8b9138f 100644 (file)
@@ -6,7 +6,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=adblock
-PKG_VERSION:=3.5.4
+PKG_VERSION:=3.5.5
 PKG_RELEASE:=2
 PKG_LICENSE:=GPL-3.0+
 PKG_MAINTAINER:=Dirk Brenken <dev@brenken.org>
index 8e146ee5b762992c91b15452c6f0ceb0a495a903..fb7856624d78f13f31db272fb6af892ed18b5184 100644 (file)
@@ -61,6 +61,8 @@ A lot of people already use adblocker plugins within their desktop browsers, but
     * => infrequent updates, approx. 15.000 entries
     * [winspy](https://github.com/crazy-max/WindowsSpyBlocker)
     * => infrequent updates, approx. 120 entries
+    * [youtube](https://api.hackertarget.com/hostsearch/?q=googlevideo.com)
+    * => dynamic request API to filter "random" youtube ad domains (experimental!), approx. 150 entries
     * [yoyo](http://pgl.yoyo.org/adservers)
     * => weekly updates, approx. 2.500 entries (enabled by default)
     * [zeus tracker](https://zeustracker.abuse.ch)
@@ -96,7 +98,7 @@ A lot of people already use adblocker plugins within their desktop browsers, but
 * optional: add new adblock sources on your own, see example below
 
 ## Prerequisites
-* [OpenWrt](https://openwrt.org), tested with the stable release series (17.01.x) and with the latest OpenWrt snapshot
+* [OpenWrt](https://openwrt.org), tested with the stable release series (18.06) and with the latest snapshot
 * a usual setup with an enabled dns backend at minimum - dump AP modes without a working dns backend are _not_ supported
 * a download utility:
     * to support all blocklist sources a full version (with ssl support) of 'wget', 'uclient-fetch' with one of the 'libustream-*' ssl libraries, 'aria2c' or 'curl' is required
@@ -109,7 +111,7 @@ A lot of people already use adblocker plugins within their desktop browsers, but
 * control the adblock service manually with _/etc/init.d/adblock_ start/stop/restart/reload/suspend/resume/status or use the LuCI frontend
 
 ## LuCI adblock companion package
-* for easy management of the various blocklist sources and all other adblock options you should use the provided LuCI frontend
+* for easy management of the various blocklist sources and adblock runtime options you should use the provided LuCI frontend
 * install 'luci-app-adblock' (_opkg install luci-app-adblock_)
 * the application is located in LuCI under 'Services' menu
 
@@ -143,7 +145,7 @@ A lot of people already use adblocker plugins within their desktop browsers, but
     * adb\_forcedns => force dns requests to local resolver (bool/default: '0', disabled)
     * adb\_forcesrt => force overall sort on low memory devices with less than 64 MB RAM (bool/default: '0', disabled)
     * adb\_backup_mode => do not automatically update blocklists during startup, use backups instead (bool/default: '0', disabled)
-    * adb\maxqueue => size of the download queue to handle downloads & list processing in parallel (int/default: '4')
+    * adb\_maxqueue => size of the download queue to handle downloads & list processing in parallel (int/default: '4')
     * adb\_jail => builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all domains except those listed in the whitelist file (bool/default: '0', disabled)
     * adb\_dnsflush => flush DNS cache after adblock processing, i.e. enable the old restart behavior (bool/default: '0', disabled)
     * adb\_notify => send notification emails in case of a processing error or if the overall domain count is &le; 0 (bool/default: '0', disabled)
@@ -216,12 +218,12 @@ Finally make this file executable via 'chmod' and test it directly. If no more e
 /etc/init.d/adblock status
 ::: adblock runtime information
   + adblock_status  : enabled
-  + adblock_version : 3.5.0
-  + overall_domains : 102324 (normal mode)
-  + fetch_utility   : /usr/bin/wget (built-in)
-  + dns_backend     : kresd (/etc/kresd)
-  + last_rundate    : 30.01.2018 21:24:11
-  + system_release  : Turris Omnia, OpenWrt omnia 15.05/3.9.4
+  + adblock_version : 3.5.5
+  + overall_domains : 97199 (backup mode)
+  + fetch_utility   : /bin/uclient-fetch (libustream-ssl)
+  + dns_backend     : unbound (/var/lib/unbound)
+  + last_rundate    : 01.09.2018 07:09:16
+  + system_release  : PC Engines APU, OpenWrt SNAPSHOT r7986-dc9388ac55
 </code></pre>
   
 **cronjob for a regular block list update (/etc/crontabs/root):**
index a10d158a91b80acb291a949d038fd1fed857a296..c68b82cb6f235734776992059aded3dc753f289d 100644 (file)
@@ -16,127 +16,127 @@ config adblock 'extra'
 
 config source 'adaway'
        option adb_src 'https://adaway.org/hosts.txt'
-       option adb_src_rset '/^127\.0\.0\.1[[:space:]]+([^([:space:]|#|\*|\/).]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$2)}'
+       option adb_src_rset '/^127\.0\.0\.1[[:space:]]+([[:alnum:]_-]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$2)}'
        option adb_src_desc 'focus on mobile ads, infrequent updates, approx. 400 entries'
        option enabled '1'
 
 config source 'adguard'
        option adb_src 'https://filters.adtidy.org/windows/filters/15.txt'
-       option adb_src_rset 'BEGIN{FS=\"[/|^|\r]\"}/^\|\|([^([:space:]|#|\*|\/).]+\.)+[[:alpha:]]+([\/\^\r]|$)/{print tolower(\$3)}'
+       option adb_src_rset 'BEGIN{FS=\"[/|^|\r]\"}/^\|\|([[:alnum:]_-]+\.)+[[:alpha:]]+([\/\^\r]|$)/{print tolower(\$3)}'
        option adb_src_desc 'combined adguard dns filter list, frequent updates, approx. 17.000 entries'
        option enabled '0'
 
 config source 'bitcoin'
        option adb_src 'https://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/hosts.txt'
-       option adb_src_rset '/^0\.0\.0\.0[[:space:]]+([^([:space:]|#|\*|\/).]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$2)}'
+       option adb_src_rset '/^0\.0\.0\.0[[:space:]]+([[:alnum:]_-]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$2)}'
        option adb_src_desc 'focus on malicious bitcoin mining sites, infrequent updates, approx. 80 entries'
        option enabled '0'
 
 config source 'blacklist'
        option adb_src '/etc/adblock/adblock.blacklist'
-       option adb_src_rset '/^([^([:space:]|#|\*|\/).]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}'
+       option adb_src_rset '/^([[:alnum:]_-]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}'
        option adb_src_desc 'static local domain blacklist, always deny these domains'
        option enabled '1'
 
 config source 'disconnect'
        option adb_src 'https://s3.amazonaws.com/lists.disconnect.me/simple_malvertising.txt'
-       option adb_src_rset '/^([^([:space:]|#|\*|\/).]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}'
+       option adb_src_rset '/^([[:alnum:]_-]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}'
        option adb_src_desc 'mozilla driven blocklist, numerous updates on the same day, approx. 4.700 entries'
        option enabled '1'
 
 config source 'dshield'
        option adb_src 'https://www.dshield.org/feeds/suspiciousdomains_Low.txt'
-       option adb_src_rset '/^([^([:space:]|#|\*|\/).]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}'
+       option adb_src_rset '/^([[:alnum:]_-]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}'
        option adb_src_desc 'generic blocklist, daily updates, approx. 3.500 entries'
        option enabled '0'
 
 config source 'feodo'
        option adb_src 'https://feodotracker.abuse.ch/blocklist/?download=domainblocklist'
-       option adb_src_rset '/^([^([:space:]|#|\*|\/).]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}'
+       option adb_src_rset '/^([[:alnum:]_-]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}'
        option adb_src_desc 'focus on feodo botnet, daily updates, approx. 0-10 entries'
        option enabled '0'
 
 config source 'hphosts'
        option adb_src 'https://hosts-file.net/ad_servers.txt'
-       option adb_src_rset '/^127\.0\.0\.1[[:space:]]+([^([:space:]|#|\*|\/).]+\.)+[[:alpha:]]+([[:space:]]|\$)+/{print tolower(\$2)}'
+       option adb_src_rset '/^127\.0\.0\.1[[:space:]]+([[:alnum:]_-]+\.)+[[:alpha:]]+([[:space:]]|\$)+/{print tolower(\$2)}'
        option adb_src_desc 'broad blocklist, monthly updates, approx. 19.200 entries'
        option enabled '0'
 
 config source 'malware'
        option adb_src 'https://mirror.espoch.edu.ec/malwaredomains/justdomains'
-       option adb_src_rset '/^([^([:space:]|#|\*|\/).]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}'
+       option adb_src_rset '/^([[:alnum:]_-]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}'
        option adb_src_desc 'broad blocklist, daily updates, approx. 18.300 entries'
        option enabled '0'
 
 config source 'malwarelist'
        option adb_src 'http://www.malwaredomainlist.com/hostslist/hosts.txt'
-       option adb_src_rset '/^127\.0\.0\.1[[:space:]]+([^([:space:]|#|\*|\/).]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$2)}'
+       option adb_src_rset '/^127\.0\.0\.1[[:space:]]+([[:alnum:]_-]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$2)}'
        option adb_src_desc 'focus on malware, daily updates, approx. 1.200 entries'
        option enabled '0'
 
 config source 'openphish'
        option adb_src 'https://openphish.com/feed.txt'
-       option adb_src_rset 'BEGIN{FS=\"/\"}/^http[s]?:\/\/([^([:space:]|#|\*|\/).]+\.)+[[:alpha:]]+(\/|$)/{print tolower(\$3)}'
+       option adb_src_rset 'BEGIN{FS=\"/\"}/^http[s]?:\/\/([[:alnum:]_-]+\.)+[[:alpha:]]+(\/|$)/{print tolower(\$3)}'
        option adb_src_desc 'focus on phishing, numerous updates on the same day, approx. 2.400 entries'
        option enabled '0'
 
 config source 'ransomware'
        option adb_src 'https://ransomwaretracker.abuse.ch/downloads/RW_DOMBL.txt'
-       option adb_src_rset '/^([^([:space:]|#|\*|\/).]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}'
+       option adb_src_rset '/^([[:alnum:]_-]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}'
        option adb_src_desc 'focus on ransomware by abuse.ch, numerous updates on the same day, approx. 1900 entries'
        option enabled '0'
 
 config source 'reg_cn'
        option adb_src 'https://easylist-downloads.adblockplus.org/easylistchina+easylist.txt'
-       option adb_src_rset 'BEGIN{FS=\"[|^]\"}/^\|\|([^([:space:]|#|\*|\/).]+\.)+[[:alpha:]]+\^("\\\$third-party")?$/{print tolower(\$3)}'
+       option adb_src_rset 'BEGIN{FS=\"[|^]\"}/^\|\|([[:alnum:]_-]+\.)+[[:alpha:]]+\^("\\\$third-party")?$/{print tolower(\$3)}'
        option adb_src_desc 'focus on chinese ads plus generic easylist additions, daily updates, approx. 11.700 entries'
        option enabled '0'
 
 config source 'reg_cz'
        option adb_src 'https://raw.githubusercontent.com/qxstyles/turris-hole-czech-block-list/master/turris-hole-czech-block-list'
-       option adb_src_rset '/^([^([:space:]|#|\*|\/).]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}'
+       option adb_src_rset '/^([[:alnum:]_-]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}'
        option adb_src_desc 'focus on czech ads maintained by Turris Omnia Users, infrequent updates, approx. 100 entries'
        option enabled '0'
 
 config source 'reg_de'
        option adb_src 'https://easylist-downloads.adblockplus.org/easylistgermany+easylist.txt'
-       option adb_src_rset 'BEGIN{FS=\"[|^]\"}/^\|\|([^([:space:]|#|\*|\/).]+\.)+[[:alpha:]]+\^("\\\$third-party")?$/{print tolower(\$3)}'
+       option adb_src_rset 'BEGIN{FS=\"[|^]\"}/^\|\|([[:alnum:]_-]+\.)+[[:alpha:]]+\^("\\\$third-party")?$/{print tolower(\$3)}'
        option adb_src_desc 'focus on german ads plus generic easylist additions, daily updates, approx. 9.200 entries'
        option enabled '0'
 
 config source 'reg_id'
        option adb_src 'https://easylist-downloads.adblockplus.org/abpindo+easylist.txt'
-       option adb_src_rset 'BEGIN{FS=\"[|^]\"}/^\|\|([^([:space:]|#|\*|\/).]+\.)+[[:alpha:]]+\^("\\\$third-party")?$/{print tolower(\$3)}'
+       option adb_src_rset 'BEGIN{FS=\"[|^]\"}/^\|\|([[:alnum:]_-]+\.)+[[:alpha:]]+\^("\\\$third-party")?$/{print tolower(\$3)}'
        option adb_src_desc 'focus on indonesian ads plus generic easylist additions, weekly updates, approx. 9.600 entries'
        option enabled '0'
 
 config source 'reg_nl'
        option adb_src 'https://easylist-downloads.adblockplus.org/easylistdutch+easylist.txt'
-       option adb_src_rset 'BEGIN{FS=\"[|^]\"}/^\|\|([^([:space:]|#|\*|\/).]+\.)+[[:alpha:]]+\^("\\\$third-party")?$/{print tolower(\$3)}'
+       option adb_src_rset 'BEGIN{FS=\"[|^]\"}/^\|\|([[:alnum:]_-]+\.)+[[:alpha:]]+\^("\\\$third-party")?$/{print tolower(\$3)}'
        option adb_src_desc 'focus on dutch ads plus generic easylist additions, weekly updates, approx. 9.400 entries'
        option enabled '0'
 
 config source 'reg_pl'
        option adb_src 'http://adblocklist.org/adblock-pxf-polish.txt'
-       option adb_src_rset 'BEGIN{FS=\"[|^]\"}/^\|\|([^([:space:]|#|\*|\/).]+\.)+[[:alpha:]]+\^("\\\$third-party")?$/{print tolower(\$3)}'
+       option adb_src_rset 'BEGIN{FS=\"[|^]\"}/^\|\|([[:alnum:]_-]+\.)+[[:alpha:]]+\^("\\\$third-party")?$/{print tolower(\$3)}'
        option adb_src_desc 'focus on polish ads, daily updates, approx. 90 entries'
        option enabled '0'
 
 config source 'reg_ro'
        option adb_src 'https://easylist-downloads.adblockplus.org/rolist+easylist.txt'
-       option adb_src_rset 'BEGIN{FS=\"[|^]\"}/^\|\|([^([:space:]|#|\*|\/).]+\.)+[[:alpha:]]+\^("\\\$third-party")?$/{print tolower(\$3)}'
+       option adb_src_rset 'BEGIN{FS=\"[|^]\"}/^\|\|([[:alnum:]_-]+\.)+[[:alpha:]]+\^("\\\$third-party")?$/{print tolower(\$3)}'
        option adb_src_desc 'focus on romanian ads plus generic easylist additions, weekly updates, approx. 9.400 entries'
        option enabled '0'
 
 config source 'reg_ru'
        option adb_src 'https://easylist-downloads.adblockplus.org/ruadlist+easylist.txt'
-       option adb_src_rset 'BEGIN{FS=\"[|^]\"}/^\|\|([^([:space:]|#|\*|\/).]+\.)+[[:alpha:]]+\^("\\\$third-party")?$/{print tolower(\$3)}'
+       option adb_src_rset 'BEGIN{FS=\"[|^]\"}/^\|\|([[:alnum:]_-]+\.)+[[:alpha:]]+\^("\\\$third-party")?$/{print tolower(\$3)}'
        option adb_src_desc 'focus on russian ads plus generic easylist additions, weekly updates, approx. 14.500 entries'
        option enabled '0'
 
 config source 'shalla'
        option adb_src 'http://www.shallalist.de/Downloads/shallalist.tar.gz'
-       option adb_src_rset '/^([^([:space:]|#|\*|\/).]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}'
+       option adb_src_rset '/^([[:alnum:]_-]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}'
        option adb_src_desc 'huge blocklist archive subdivided in different categories, daily updates. Check http://www.shallalist.de/categories.html for more categories'
        list adb_src_cat 'adv'
        list adb_src_cat 'costtraps'
@@ -147,26 +147,27 @@ config source 'shalla'
 
 config source 'spam404'
        option adb_src 'https://raw.githubusercontent.com/Dawsey21/Lists/master/main-blacklist.txt'
-       option adb_src_rset '/^([^([:space:]|#|\*|\/).]+\.)+[[:alpha:]]+([[:space:]]|$)+/{print tolower(\$1)}'
+       option adb_src_rset '/^([[:alnum:]_-]+\.)+[[:alpha:]]+([[:space:]]|$)+/{print tolower(\$1)}'
        option adb_src_desc 'generic blocklist, infrequent updates, approx. 6.000 entries'
        option enabled '0'
 
 config source 'sysctl'
        option adb_src 'http://sysctl.org/cameleon/hosts'
-       option adb_src_rset '/^127\.0\.0\.1[[:space:]]+([^([:space:]|#|\*|\/).]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$2)}'
+       option adb_src_rset '/^127\.0\.0\.1[[:space:]]+([[:alnum:]_-]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$2)}'
        option adb_src_desc 'broad blocklist, weekly updates, approx. 16.500 entries'
        option enabled '0'
 
 config source 'urlhaus'
        option adb_src 'https://urlhaus.abuse.ch/downloads/rpz'
-       option adb_src_rset '/^([^([:space:]|#|\*|\/).]+\.)+[[:alpha:]]+([[:space:]]|$)+/{print tolower(\$1)}'
+       option adb_src_rset '/^([[:alnum:]_-]+\.)+[[:alpha:]]+([[:space:]]|$)+/{print tolower(\$1)}'
        option adb_src_desc 'urlhaus RPZ domains by abuse.ch, numerous updates on the same day, approx. 3.500 entries'
        option enabled '0'
 
 config source 'ut_capitole'
        option adb_src 'https://dsi.ut-capitole.fr/blacklists/download/blacklists.tar.gz'
-       option adb_src_rset '/^([^([:space:]|#|\*|\/).]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}'
+       option adb_src_rset '/^([[:alnum:]_-]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}'
        option adb_src_desc 'huge blocklist archive subdivided in different categories, daily updates. Check https://dsi.ut-capitole.fr/blacklists/index_en.php for more categories'
+       list adb_src_cat 'publicite'
        list adb_src_cat 'cryptojacking'
        list adb_src_cat 'ddos'
        list adb_src_cat 'malware'
@@ -176,31 +177,36 @@ config source 'ut_capitole'
 
 config source 'whocares'
        option adb_src 'http://someonewhocares.org/hosts/hosts'
-       option adb_src_rset '/^127\.0\.0\.1[[:space:]]+([^([:space:]|#|\*|\/).]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$2)}'
+       option adb_src_rset '/^127\.0\.0\.1[[:space:]]+([[:alnum:]_-]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$2)}'
        option adb_src_desc 'broad blocklist, weekly updates, approx. 10.000 entries'
        option enabled '0'
 
 config source 'winspy'
        option adb_src 'https://raw.githubusercontent.com/crazy-max/WindowsSpyBlocker/master/data/hosts/spy.txt'
-       option adb_src_rset '/^0\.0\.0\.0[[:space:]]+([^([:space:]|#|\*|\/).]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$2)}'
+       option adb_src_rset '/^0\.0\.0\.0[[:space:]]+([[:alnum:]_-]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$2)}'
        option adb_src_desc 'focus on windows spy & telemetry domains, infrequent updates, approx. 300 entries'
        option enabled '0'
 
 config source 'winhelp'
        option adb_src 'http://winhelp2002.mvps.org/hosts.txt'
-       option adb_src_rset '/^0\.0\.0\.0[[:space:]]+([^([:space:]|#|\*|\/).]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$2)}'
+       option adb_src_rset '/^0\.0\.0\.0[[:space:]]+([[:alnum:]_-]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$2)}'
        option adb_src_desc 'broad blocklist, infrequent updates, approx. 13.000 entries'
        option enabled '0'
 
+config source 'youtube'
+       option adb_src 'https://api.hackertarget.com/hostsearch/?q=googlevideo.com'
+       option adb_src_rset 'BEGIN{FS=\",\"}/^(r[0-9]+\.){1,1}([[:alnum:]_-]+\.)+[[:alpha:]]+/{sub(/\./,\"---\");print tolower(\$1)}'
+       option adb_src_desc 'focus on youtube ad-related subdomains, dynamic request API, approx. 150 entries'
+       option enabled '0'
+
 config source 'yoyo'
        option adb_src 'https://pgl.yoyo.org/adservers/serverlist.php?hostformat=nohtml&showintro=0&mimetype=plaintext'
-       option adb_src_rset '/^([^([:space:]|#|\*|\/).]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}'
+       option adb_src_rset '/^([[:alnum:]_-]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}'
        option adb_src_desc 'focus on ad related domains, weekly updates, approx. 2.400 entries'
        option enabled '1'
 
 config source 'zeus'
        option adb_src 'https://zeustracker.abuse.ch/blocklist.php?download=domainblocklist'
-       option adb_src_rset '/^([^([:space:]|#|\*|\/).]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}'
+       option adb_src_rset '/^([[:alnum:]_-]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}'
        option adb_src_desc 'focus on zeus botnet by abuse.ch, daily updates, approx. 400 entries'
        option enabled '0'
-
index b3981039fde3a317eed4ab2aef34a905b2b2580b..2ae2b086bb0af8b2f726882f78be0936534a4582 100755 (executable)
@@ -16,97 +16,97 @@ adb_pidfile="/var/run/adblock.pid"
 
 boot()
 {
-    adb_boot=1
-    rc_procd start_service
+       adb_boot=1
+       rc_procd start_service
 }
 
 start_service()
 {
-    if [ $("${adb_init}" enabled; printf "%u" ${?}) -eq 0 ]
-    then
-        if [ -n "${adb_boot}" ]
-        then
-            local trigger="$(uci_get adblock global adb_trigger)"
-            if [ "${trigger}" != "timed" ]
-            then
-                return 0
-            fi
-        fi
-        local nice="$(uci_get adblock extra adb_nice)"
-        procd_open_instance "adblock"
-        procd_set_param command "${adb_script}" "${@}"
-        procd_set_param pidfile "${adb_pidfile}"
-        procd_set_param nice ${nice:-0}
-        procd_set_param stdout 1
-        procd_set_param stderr 1
-        procd_close_instance
-    fi
+       if [ $("${adb_init}" enabled; printf "%u" ${?}) -eq 0 ]
+       then
+               if [ -n "${adb_boot}" ]
+               then
+                       local trigger="$(uci_get adblock global adb_trigger)"
+                       if [ "${trigger}" != "timed" ]
+                       then
+                               return 0
+                       fi
+               fi
+               local nice="$(uci_get adblock extra adb_nice)"
+               procd_open_instance "adblock"
+               procd_set_param command "${adb_script}" "${@}"
+               procd_set_param pidfile "${adb_pidfile}"
+               procd_set_param nice ${nice:-0}
+               procd_set_param stdout 1
+               procd_set_param stderr 1
+               procd_close_instance
+       fi
 }
 
 reload_service()
 {
-    rc_procd start_service reload
+       rc_procd start_service reload
 }
 
 stop_service()
 {
-    rc_procd "${adb_script}" stop
-    rc_procd start_service
+       rc_procd "${adb_script}" stop
+       rc_procd start_service
 }
 
 restart()
 {
-    rc_procd start_service restart
+       rc_procd start_service restart
 }
 
 suspend()
 {
-    [ -s "${adb_pidfile}" ] && return 1
-    rc_procd "${adb_script}" suspend
+       [ -s "${adb_pidfile}" ] && return 1
+       rc_procd "${adb_script}" suspend
 }
 
 resume()
 {
-    [ -s "${adb_pidfile}" ] && return 1
-    rc_procd "${adb_script}" resume
+       [ -s "${adb_pidfile}" ] && return 1
+       rc_procd "${adb_script}" resume
 }
 
 query()
 {
-    [ -s "${adb_pidfile}" ] && return 1
-    rc_procd "${adb_script}" query "${1}"
+       [ -s "${adb_pidfile}" ] && return 1
+       rc_procd "${adb_script}" query "${1}"
 }
 
 status()
 {
-    local key keylist value rtfile="$(uci_get adblock extra adb_rtfile)"
+       local key keylist value rtfile="$(uci_get adblock extra adb_rtfile)"
 
-    rtfile="${rtfile:-"/tmp/adb_runtime.json"}"
-    if [ -s "${rtfile}" ]
-    then
-        printf "%s\n" "::: adblock runtime information"
-        json_load "$(cat "${rtfile}" 2>/dev/null)"
-        json_select data
-        json_get_keys keylist
-        for key in ${keylist}
-        do
-            json_get_var value "${key}"
-            printf "  + %-15s : %s\n" "${key}" "${value}"
-        done
-    else
-        printf "%s\n" "::: no adblock runtime information available"
-    fi
+       rtfile="${rtfile:-"/tmp/adb_runtime.json"}"
+       if [ -s "${rtfile}" ]
+       then
+               printf "%s\n" "::: adblock runtime information"
+               json_load_file "${rtfile}"
+               json_select data
+               json_get_keys keylist
+               for key in ${keylist}
+               do
+                       json_get_var value "${key}"
+                       printf "  + %-15s : %s\n" "${key}" "${value}"
+               done
+       else
+               printf "%s\n" "::: no adblock runtime information available"
+       fi
 }
 
 service_triggers()
 {
-    local trigger="$(uci_get adblock global adb_trigger)"
-    local delay="$(uci_get adblock extra adb_triggerdelay)"
+       local trigger="$(uci_get adblock global adb_trigger)"
+       local delay="$(uci_get adblock extra adb_triggerdelay)"
 
-    if [ "${trigger}" != "none" ] && [ "${trigger}" != "timed" ]
-    then
-        PROCD_RELOAD_DELAY=$((${delay:-2} * 1000))
-        procd_add_interface_trigger "interface.*.up" "${trigger}" "${adb_init}" start
-    fi
-    procd_add_reload_trigger "adblock"
+       if [ "${trigger}" != "none" ] && [ "${trigger}" != "timed" ]
+       then
+               PROCD_RELOAD_DELAY=$((${delay:-2} * 1000))
+               procd_add_interface_trigger "interface.*.up" "${trigger}" "${adb_init}" start
+       fi
+       procd_add_reload_trigger "adblock"
 }
index 6a23db79970066568bf46dcb48d2b1105feea87c..54f0288d578aa6ad383eae821176602de09d77c4 100644 (file)
@@ -10,7 +10,7 @@
 
 LC_ALL=C
 PATH="/usr/sbin:/usr/bin:/sbin:/bin"
-mail_ver="1.0.3"
+mail_ver="1.0.4"
 mail_daemon="$(command -v msmtp)"
 mail_profile="adb_notify"
 #mail_debug="--debug"
@@ -18,22 +18,22 @@ mail_rc=1
 
 # mail header & mail receiver check
 #
+mail_receiver=""
 mail_sender="no-reply@adblock"
-mail_receiver="!!!ChangeMe!!!"
 mail_topic="${HOSTNAME}: adblock notification"
 mail_head="From: ${mail_sender}\nTo: ${mail_receiver}\nSubject: ${mail_topic}\nReply-to: ${mail_sender}\nMime-Version: 1.0\nContent-Type: text/html\nContent-Disposition: inline\n\n"
 
-if [ "${mail_receiver}" = "!!!ChangeMe!!!" ]
+if [ -z "${mail_receiver}" ]
 then
-    logger -p "err" -t "adblock-notify-[${mail_ver}]" "please change the 'mail_receiver' in '/etc/adblock/adblock.notify'"
-    exit ${mail_rc}
+       logger -p "err" -t "adblock-notify-${mail_ver}[${$}]" "please supply/customize the 'mail_receiver' in '/etc/adblock/adblock.notify'"
+       exit ${mail_rc}
 fi
 
 # mail daemon check
 #
 if [ ! -x "${mail_daemon}" ]
 then
-    mail_daemon="$(command -v sendmail)"
+       mail_daemon="$(command -v sendmail)"
 fi
 
 # info preparation
@@ -42,9 +42,9 @@ sys_info="$(strings /etc/banner 2>/dev/null; ubus call system board | sed -e 's/
 adb_info="$(/etc/init.d/adblock status 2>/dev/null)"
 if [ -f "/var/log/messages" ]
 then
-    log_info="$(awk '/adblock-/{NR=1;max=79;if(length($0)>max+1)while($0){if(NR==1){print substr($0,1,max),"&#8629;"} else {print " ",substr($0,1,max)}{$0=substr($0,max+1);NR=NR+1}}else print}' /var/log/messages)"
+       log_info="$(awk '/adblock-/{NR=1;max=79;if(length($0)>max+1)while($0){if(NR==1){print substr($0,1,max),"&#8629;"} else {print " ",substr($0,1,max)}{$0=substr($0,max+1);NR=NR+1}}else print}' /var/log/messages)"
 else
-    log_info="$(logread -e "adblock-" | awk '{NR=1;max=79;if(length($0)>max+1)while($0){if(NR==1){print substr($0,1,max),"&#8629;"} else {print " ",substr($0,1,max)}{$0=substr($0,max+1);NR=NR+1}}else print}')"
+       log_info="$(logread -e "adblock-" | awk '{NR=1;max=79;if(length($0)>max+1)while($0){if(NR==1){print substr($0,1,max),"&#8629;"} else {print " ",substr($0,1,max)}{$0=substr($0,max+1);NR=NR+1}}else print}')"
 fi
 
 # mail body
@@ -59,11 +59,11 @@ mail_text="${mail_text}</pre></body></html>"
 #
 if [ -x "${mail_daemon}" ]
 then
-    printf "%b" "${mail_head}${mail_text}" 2>/dev/null | "${mail_daemon}" ${mail_debug} -a "${mail_profile}" "${mail_receiver}" >/dev/null 2>&1
-    mail_rc=${?}
-    logger -p "info" -t "adblock-notify-[${mail_ver}]" "mail sent to '${mail_receiver}' with rc '${mail_rc}'"
+       printf "%b" "${mail_head}${mail_text}" 2>/dev/null | "${mail_daemon}" ${mail_debug} -a "${mail_profile}" "${mail_receiver}" >/dev/null 2>&1
+       mail_rc=${?}
+       logger -p "info" -t "adblock-notify-${mail_ver}[${$}]" "mail sent to '${mail_receiver}' with rc '${mail_rc}'"
 else
-    logger -p "err" -t "adblock-notify-[${mail_ver}]" "msmtp mail daemon not found"
+       logger -p "err" -t "adblock-notify-${mail_ver}[${$}]" "msmtp mail daemon not found"
 fi
 
 exit ${mail_rc}
index e91f8e9d7a7d49936c30303f949cca34c5111299..a8eb1563be17e2312060a166f7b8ac5f78a35253 100755 (executable)
@@ -10,7 +10,7 @@
 #
 LC_ALL=C
 PATH="/usr/sbin:/usr/bin:/sbin:/bin"
-adb_ver="3.5.4-2"
+adb_ver="3.5.5-2"
 adb_sysver="unknown"
 adb_enabled=0
 adb_debug=0
@@ -44,1037 +44,1025 @@ adb_pidfile="/var/run/adblock.pid"
 #
 f_envload()
 {
-    local dns_up sys_call sys_desc sys_model sys_ver cnt=0
-
-    # get system information
-    #
-    sys_call="$(ubus -S call system board 2>/dev/null)"
-    if [ -n "${sys_call}" ]
-    then
-        sys_desc="$(printf '%s' "${sys_call}" | jsonfilter -e '@.release.description')"
-        sys_model="$(printf '%s' "${sys_call}" | jsonfilter -e '@.model')"
-        sys_ver="$(cat /etc/turris-version 2>/dev/null)"
-        if [ -n "${sys_ver}" ]
-        then
-            sys_desc="${sys_desc}/${sys_ver}"
-        fi
-        adb_sysver="${sys_model}, ${sys_desc}"
-    fi
-
-    # check hash utility
-    #
-    if [ ! -x "${adb_hashutil}" ]
-    then
-        adb_hashutil="$(command -v md5sum)"
-    fi
-
-    # source in system libraries
-    #
-    if [ -r "/lib/functions.sh" ] && [ -r "/usr/share/libubox/jshn.sh" ]
-    then
-        . "/lib/functions.sh"
-        . "/usr/share/libubox/jshn.sh"
-    else
-        f_log "err" "system libraries not found"
-    fi
-
-    # parse 'global' and 'extra' section by callback
-    #
-    config_cb()
-    {
-        local type="${1}"
-        if [ "${type}" = "adblock" ]
-        then
-            option_cb()
-            {
-                local option="${1}"
-                local value="${2}"
-                eval "${option}=\"${value}\""
-            }
-        else
-            reset_cb
-        fi
-    }
-
-    # parse 'source' typed sections
-    #
-    parse_config()
-    {
-        local value opt section="${1}" options="enabled adb_src adb_src_rset adb_src_cat"
-        eval "adb_sources=\"${adb_sources} ${section}\""
-        for opt in ${options}
-        do
-            config_get value "${section}" "${opt}"
-            if [ -n "${value}" ]
-            then
-                eval "${opt}_${section}=\"${value}\""
-            fi
-        done
-    }
-
-    # load adblock config
-    #
-    config_load adblock
-    config_foreach parse_config source
-
-    # check dns backend
-    #
-    case "${adb_dns}" in
-        dnsmasq)
-            adb_dnsinstance="${adb_dnsinstance:-"0"}"
-            adb_dnsuser="${adb_dnsuser:-"dnsmasq"}"
-            adb_dnsdir="${adb_dnsdir:-"/tmp"}"
-            adb_dnsheader=""
-            adb_dnsdeny="awk '{print \"server=/\"\$0\"/\"}'"
-            adb_dnsallow="awk '{print \"server=/\"\$0\"/#\"}'"
-            adb_dnshalt="server=/#/"
-        ;;
-        unbound)
-            adb_dnsinstance="${adb_dnsinstance:-"0"}"
-            adb_dnsuser="${adb_dnsuser:-"unbound"}"
-            adb_dnsdir="${adb_dnsdir:-"/var/lib/unbound"}"
-            adb_dnsheader=""
-            adb_dnsdeny="awk '{print \"local-zone: \042\"\$0\"\042 static\"}'"
-            adb_dnsallow="awk '{print \"local-zone: \042\"\$0\"\042 transparent\"}'"
-            adb_dnshalt="local-zone: \".\" static"
-        ;;
-        named)
-            adb_dnsinstance="${adb_dnsinstance:-"0"}"
-            adb_dnsuser="${adb_dnsuser:-"bind"}"
-            adb_dnsdir="${adb_dnsdir:-"/var/lib/bind"}"
-            adb_dnsheader="\$TTL 2h"$'\n'"@ IN SOA localhost. root.localhost. (1 6h 1h 1w 2h)"$'\n'"  IN NS localhost."
-            adb_dnsdeny="awk '{print \"\"\$0\" CNAME .\n*.\"\$0\" CNAME .\"}'"
-            adb_dnsallow="awk '{print \"\"\$0\" CNAME rpz-passthru.\n*.\"\$0\" CNAME rpz-passthru.\"}'"
-            adb_dnshalt="* CNAME ."
-        ;;
-        kresd)
-            adb_dnsinstance="${adb_dnsinstance:-"0"}"
-            adb_dnsuser="${adb_dnsuser:-"root"}"
-            adb_dnsdir="${adb_dnsdir:-"/etc/kresd"}"
-            adb_dnsheader="\$TTL 2h"$'\n'"@ IN SOA localhost. root.localhost. (1 6h 1h 1w 2h)"$'\n'"  IN NS  localhost."
-            adb_dnsdeny="awk '{print \"\"\$0\" CNAME .\n*.\"\$0\" CNAME .\"}'"
-            adb_dnsallow="awk '{print \"\"\$0\" CNAME rpz-passthru.\n*.\"\$0\" CNAME rpz-passthru.\"}'"
-            adb_dnshalt="* CNAME ."
-        ;;
-        dnscrypt-proxy)
-            adb_dnsinstance="${adb_dnsinstance:-"0"}"
-            adb_dnsuser="${adb_dnsuser:-"nobody"}"
-            adb_dnsdir="${adb_dnsdir:-"/tmp"}"
-            adb_dnsheader=""
-            adb_dnsdeny="awk '{print \$0}'"
-            adb_dnsallow=""
-            adb_dnshalt=""
-        ;;
-    esac
-
-    # check adblock status
-    #
-    if [ ${adb_enabled} -eq 0 ]
-    then
-        f_extconf
-        f_temp
-        f_rmdns
-        f_jsnup
-        f_log "info" "adblock is currently disabled, please set adb_enabled to '1' to use this service"
-        exit 0
-    fi
-
-    if [ -d "${adb_dnsdir}" ] && [ ! -f "${adb_dnsdir}/${adb_dnsfile}" ]
-    then
-        printf '%s\n' "${adb_dnsheader}" > "${adb_dnsdir}/${adb_dnsfile}"
-    fi
-
-    if [ "${adb_action}" = "start" ] && [ "${adb_trigger}" = "timed" ]
-    then
-        sleep ${adb_triggerdelay}
-    fi
-
-    while [ ${cnt} -le 30 ]
-    do
-        dns_up="$(ubus -S call service list "{\"name\":\"${adb_dns}\"}" 2>/dev/null | jsonfilter -l1 -e "@[\"${adb_dns}\"].instances.*.running" 2>/dev/null)"
-        if [ "${dns_up}" = "true" ]
-        then
-            break
-        fi
-        sleep 1
-        cnt=$((cnt+1))
-    done
-
-    if [ "${dns_up}" != "true" ] || [ -z "${adb_dns}" ] || [ ! -x "$(command -v ${adb_dns})" ]
-    then
-        f_log "err" "'${adb_dns}' not running or not executable"
-    elif [ ! -d "${adb_dnsdir}" ]
-    then
-        f_log "err" "'${adb_dnsdir}' backend directory not found"
-    fi
+       local dns_up sys_call sys_desc sys_model sys_ver cnt=0
+
+       # get system information
+       #
+       sys_call="$(ubus -S call system board 2>/dev/null)"
+       if [ -n "${sys_call}" ]
+       then
+               sys_desc="$(printf '%s' "${sys_call}" | jsonfilter -e '@.release.description')"
+               sys_model="$(printf '%s' "${sys_call}" | jsonfilter -e '@.model')"
+               sys_ver="$(cat /etc/turris-version 2>/dev/null)"
+               if [ -n "${sys_ver}" ]
+               then
+                       sys_desc="${sys_desc}/${sys_ver}"
+               fi
+               adb_sysver="${sys_model}, ${sys_desc}"
+       fi
+
+       # check hash utility
+       #
+       if [ ! -x "${adb_hashutil}" ]
+       then
+               adb_hashutil="$(command -v md5sum)"
+       fi
+
+       # parse 'global' and 'extra' section by callback
+       #
+       config_cb()
+       {
+               local type="${1}"
+               if [ "${type}" = "adblock" ]
+               then
+                       option_cb()
+                       {
+                               local option="${1}"
+                               local value="${2}"
+                               eval "${option}=\"${value}\""
+                       }
+               else
+                       reset_cb
+               fi
+       }
+
+       # parse 'source' typed sections
+       #
+       parse_config()
+       {
+               local value opt section="${1}" options="enabled adb_src adb_src_rset adb_src_cat"
+               eval "adb_sources=\"${adb_sources} ${section}\""
+               for opt in ${options}
+               do
+                       config_get value "${section}" "${opt}"
+                       if [ -n "${value}" ]
+                       then
+                               eval "${opt}_${section}=\"${value}\""
+                       fi
+               done
+       }
+
+       # load adblock config
+       #
+       config_load adblock
+       config_foreach parse_config source
+
+       # check dns backend
+       #
+       case "${adb_dns}" in
+               dnsmasq)
+                       adb_dnsinstance="${adb_dnsinstance:-"0"}"
+                       adb_dnsuser="${adb_dnsuser:-"dnsmasq"}"
+                       adb_dnsdir="${adb_dnsdir:-"/tmp"}"
+                       adb_dnsheader=""
+                       adb_dnsdeny="awk '{print \"server=/\"\$0\"/\"}'"
+                       adb_dnsallow="awk '{print \"server=/\"\$0\"/#\"}'"
+                       adb_dnshalt="server=/#/"
+               ;;
+               unbound)
+                       adb_dnsinstance="${adb_dnsinstance:-"0"}"
+                       adb_dnsuser="${adb_dnsuser:-"unbound"}"
+                       adb_dnsdir="${adb_dnsdir:-"/var/lib/unbound"}"
+                       adb_dnsheader=""
+                       adb_dnsdeny="awk '{print \"local-zone: \042\"\$0\"\042 static\"}'"
+                       adb_dnsallow="awk '{print \"local-zone: \042\"\$0\"\042 transparent\"}'"
+                       adb_dnshalt="local-zone: \".\" static"
+               ;;
+               named)
+                       adb_dnsinstance="${adb_dnsinstance:-"0"}"
+                       adb_dnsuser="${adb_dnsuser:-"bind"}"
+                       adb_dnsdir="${adb_dnsdir:-"/var/lib/bind"}"
+                       adb_dnsheader="\$TTL 2h"$'\n'"@ IN SOA localhost. root.localhost. (1 6h 1h 1w 2h)"$'\n'"  IN NS localhost."
+                       adb_dnsdeny="awk '{print \"\"\$0\" CNAME .\n*.\"\$0\" CNAME .\"}'"
+                       adb_dnsallow="awk '{print \"\"\$0\" CNAME rpz-passthru.\n*.\"\$0\" CNAME rpz-passthru.\"}'"
+                       adb_dnshalt="* CNAME ."
+               ;;
+               kresd)
+                       adb_dnsinstance="${adb_dnsinstance:-"0"}"
+                       adb_dnsuser="${adb_dnsuser:-"root"}"
+                       adb_dnsdir="${adb_dnsdir:-"/etc/kresd"}"
+                       adb_dnsheader="\$TTL 2h"$'\n'"@ IN SOA localhost. root.localhost. (1 6h 1h 1w 2h)"$'\n'"  IN NS  localhost."
+                       adb_dnsdeny="awk '{print \"\"\$0\" CNAME .\n*.\"\$0\" CNAME .\"}'"
+                       adb_dnsallow="awk '{print \"\"\$0\" CNAME rpz-passthru.\n*.\"\$0\" CNAME rpz-passthru.\"}'"
+                       adb_dnshalt="* CNAME ."
+               ;;
+               dnscrypt-proxy)
+                       adb_dnsinstance="${adb_dnsinstance:-"0"}"
+                       adb_dnsuser="${adb_dnsuser:-"nobody"}"
+                       adb_dnsdir="${adb_dnsdir:-"/tmp"}"
+                       adb_dnsheader=""
+                       adb_dnsdeny="awk '{print \$0}'"
+                       adb_dnsallow=""
+                       adb_dnshalt=""
+               ;;
+       esac
+
+       # check adblock status
+       #
+       if [ ${adb_enabled} -eq 0 ]
+       then
+               f_extconf
+               f_temp
+               f_rmdns
+               f_jsnup "disabled"
+               f_log "info" "adblock is currently disabled, please set adb_enabled to '1' to use this service"
+               exit 0
+       fi
+
+       if [ -d "${adb_dnsdir}" ] && [ ! -f "${adb_dnsdir}/${adb_dnsfile}" ]
+       then
+               printf '%s\n' "${adb_dnsheader}" > "${adb_dnsdir}/${adb_dnsfile}"
+       fi
+
+       if [ "${adb_action}" = "start" ] && [ "${adb_trigger}" = "timed" ]
+       then
+               sleep ${adb_triggerdelay}
+       fi
+
+       while [ ${cnt} -le 30 ]
+       do
+               dns_up="$(ubus -S call service list "{\"name\":\"${adb_dns}\"}" 2>/dev/null | jsonfilter -l1 -e "@[\"${adb_dns}\"].instances.*.running" 2>/dev/null)"
+               if [ "${dns_up}" = "true" ]
+               then
+                       break
+               fi
+               sleep 1
+               cnt=$((cnt+1))
+       done
+
+       if [ "${dns_up}" != "true" ] || [ -z "${adb_dns}" ] || [ ! -x "$(command -v ${adb_dns})" ]
+       then
+               f_log "err" "'${adb_dns}' not running or not executable"
+       elif [ ! -d "${adb_dnsdir}" ]
+       then
+               f_log "err" "'${adb_dnsdir}' backend directory not found"
+       fi
 }
 
 # check environment
 #
 f_envcheck()
 {
-    local ssl_lib
-
-    # check external uci config files
-    #
-    f_extconf
-
-    # check fetch utility
-    #
-    case "${adb_fetchutil}" in
-        uclient-fetch)
-            if [ -f "/lib/libustream-ssl.so" ]
-            then
-                adb_fetchparm="${adb_fetchparm:-"--timeout=10 --no-check-certificate -O"}"
-                ssl_lib="libustream-ssl"
-            else
-                adb_fetchparm="${adb_fetchparm:-"--timeout=10 -O"}"
-            fi
-        ;;
-        wget)
-            adb_fetchparm="${adb_fetchparm:-"--no-cache --no-cookies --max-redirect=0 --timeout=10 --no-check-certificate -O"}"
-            ssl_lib="built-in"
-        ;;
-        wget-nossl)
-            adb_fetchparm="${adb_fetchparm:-"--no-cache --no-cookies --max-redirect=0 --timeout=10 -O"}"
-        ;;
-        busybox)
-            adb_fetchparm="${adb_fetchparm:-"-O"}"
-        ;;
-        curl)
-            adb_fetchparm="${adb_fetchparm:-"--connect-timeout 10 --insecure -o"}"
-            ssl_lib="built-in"
-        ;;
-        aria2c)
-            adb_fetchparm="${adb_fetchparm:-"--timeout=10 --allow-overwrite=true --auto-file-renaming=false --check-certificate=false -o"}"
-            ssl_lib="built-in"
-        ;;
-    esac
-    adb_fetchutil="$(command -v "${adb_fetchutil}")"
-
-    if [ ! -x "${adb_fetchutil}" ] || [ -z "${adb_fetchutil}" ] || [ -z "${adb_fetchparm}" ]
-    then
-        f_log "err" "download utility not found, please install 'uclient-fetch' with 'libustream-mbedtls' or the full 'wget' package"
-    fi
-    adb_fetchinfo="${adb_fetchutil} (${ssl_lib:-"-"})"
-
-    f_temp
-    f_jsnup "running"
-    f_log "info" "start adblock processing (${adb_action})"
+       local ssl_lib
+
+       # startup message
+       #
+       f_log "info" "adblock instance started ::: action: ${adb_action}, priority: ${adb_nice:-"0"}, pid: ${$}"
+       f_jsnup "running"
+
+       # check external uci config files
+       #
+       f_extconf
+
+       # check fetch utility
+       #
+       case "${adb_fetchutil}" in
+               uclient-fetch)
+                       if [ -f "/lib/libustream-ssl.so" ]
+                       then
+                               adb_fetchparm="${adb_fetchparm:-"--timeout=10 --no-check-certificate -O"}"
+                               ssl_lib="libustream-ssl"
+                       else
+                               adb_fetchparm="${adb_fetchparm:-"--timeout=10 -O"}"
+                       fi
+               ;;
+               wget)
+                       adb_fetchparm="${adb_fetchparm:-"--no-cache --no-cookies --max-redirect=0 --timeout=10 --no-check-certificate -O"}"
+                       ssl_lib="built-in"
+               ;;
+               wget-nossl)
+                       adb_fetchparm="${adb_fetchparm:-"--no-cache --no-cookies --max-redirect=0 --timeout=10 -O"}"
+               ;;
+               busybox)
+                       adb_fetchparm="${adb_fetchparm:-"-O"}"
+               ;;
+               curl)
+                       adb_fetchparm="${adb_fetchparm:-"--connect-timeout 10 --insecure -o"}"
+                       ssl_lib="built-in"
+               ;;
+               aria2c)
+                       adb_fetchparm="${adb_fetchparm:-"--timeout=10 --allow-overwrite=true --auto-file-renaming=false --check-certificate=false -o"}"
+                       ssl_lib="built-in"
+               ;;
+       esac
+       adb_fetchutil="$(command -v "${adb_fetchutil}")"
+
+       if [ ! -x "${adb_fetchutil}" ] || [ -z "${adb_fetchutil}" ] || [ -z "${adb_fetchparm}" ]
+       then
+               f_log "err" "download utility not found, please install 'uclient-fetch' with 'libustream-mbedtls' or the full 'wget' package"
+       fi
+       adb_fetchinfo="${adb_fetchutil} (${ssl_lib:-"-"})"
+       f_temp
 }
 
 # create temporary files and directories
 #
 f_temp()
 {
-    if [ -z "${adb_tmpdir}" ]
-    then
-        adb_tmpdir="$(mktemp -p /tmp -d)"
-        adb_tmpload="$(mktemp -p ${adb_tmpdir} -tu)"
-        adb_tmpfile="$(mktemp -p ${adb_tmpdir} -tu)"
-    fi
-    if [ ! -s "${adb_pidfile}" ]
-    then
-        printf '%s' "${$}" > "${adb_pidfile}"
-    fi
+       if [ -z "${adb_tmpdir}" ]
+       then
+               adb_tmpdir="$(mktemp -p /tmp -d)"
+               adb_tmpload="$(mktemp -p ${adb_tmpdir} -tu)"
+               adb_tmpfile="$(mktemp -p ${adb_tmpdir} -tu)"
+       fi
+       if [ ! -s "${adb_pidfile}" ]
+       then
+               printf '%s' "${$}" > "${adb_pidfile}"
+       fi
 }
 
 # remove temporary files and directories
 #
 f_rmtemp()
 {
-    if [ -d "${adb_tmpdir}" ]
-    then
-        rm -rf "${adb_tmpdir}"
-    fi
-    > "${adb_pidfile}"
+       if [ -d "${adb_tmpdir}" ]
+       then
+               rm -rf "${adb_tmpdir}"
+       fi
+       > "${adb_pidfile}"
 }
 
 # remove dns related files and directories
 #
 f_rmdns()
 {
-    if [ -n "${adb_dns}" ]
-    then
-        f_hash
-        printf '%s\n' "${adb_dnsheader}" > "${adb_dnsdir}/${adb_dnsfile}"
-        > "${adb_dnsdir}/.${adb_dnsfile}"
-        > "${adb_rtfile}"
-        rm -f "${adb_backupdir}/${adb_dnsprefix}"*.gz
-        f_hash
-        if [ ${?} -eq 1 ]
-        then
-            f_dnsup
-        fi
-        f_rmtemp
-    fi
-    f_log "debug" "f_rmdns::: dns: ${adb_dns}, dns_dir: ${adb_dnsdir}, dns_prefix: ${adb_dnsprefix}, dns_file: ${adb_dnsfile}, rt_file: ${adb_rtfile}, backup_dir: ${adb_backupdir}"
+       if [ -n "${adb_dns}" ]
+       then
+               f_hash
+               printf '%s\n' "${adb_dnsheader}" > "${adb_dnsdir}/${adb_dnsfile}"
+               > "${adb_dnsdir}/.${adb_dnsfile}"
+               > "${adb_rtfile}"
+               rm -f "${adb_backupdir}/${adb_dnsprefix}"*.gz
+               f_hash
+               if [ ${?} -eq 1 ]
+               then
+                       f_dnsup
+               fi
+               f_rmtemp
+       fi
+       f_log "debug" "f_rmdns::: dns: ${adb_dns}, dns_dir: ${adb_dnsdir}, dns_prefix: ${adb_dnsprefix}, dns_file: ${adb_dnsfile}, rt_file: ${adb_rtfile}, backup_dir: ${adb_backupdir}"
 }
 
 # commit uci changes
 #
 f_uci()
 {
-    local change config="${1}"
-
-    if [ -n "${config}" ]
-    then
-        change="$(uci -q changes "${config}" | awk '{ORS=" "; print $0}')"
-        if [ -n "${change}" ]
-        then
-            uci -q commit "${config}"
-            case "${config}" in
-                firewall)
-                    /etc/init.d/firewall reload >/dev/null 2>&1
-                ;;
-                *)
-                    /etc/init.d/"${adb_dns}" reload >/dev/null 2>&1
-                ;;
-            esac
-        fi
-    fi
-    f_log "debug" "f_uci  ::: config: ${config}, change: ${change}"
+       local change config="${1}"
+
+       if [ -n "${config}" ]
+       then
+               change="$(uci -q changes "${config}" | awk '{ORS=" "; print $0}')"
+               if [ -n "${change}" ]
+               then
+                       uci_commit "${config}"
+                       case "${config}" in
+                               firewall)
+                                       /etc/init.d/firewall reload >/dev/null 2>&1
+                               ;;
+                               *)
+                                       /etc/init.d/"${adb_dns}" reload >/dev/null 2>&1
+                               ;;
+                       esac
+               fi
+       fi
+       f_log "debug" "f_uci  ::: config: ${config}, change: ${change}"
 }
 
 # list/overall count
 #
 f_count()
 {
-    local mode="${1}"
-
-    adb_cnt=0
-    if [ -s "${adb_dnsdir}/${adb_dnsfile}" ] && ([ -z "${mode}" ] || [ "${mode}" = "final" ])
-    then
-        adb_cnt="$(( $(wc -l 2>/dev/null < "${adb_dnsdir}/${adb_dnsfile}") - $(wc -l 2>/dev/null < "${adb_tmpdir}/tmp.add_whitelist") ))"
-        if [ "${adb_dns}" = "named" ] || [ "${adb_dns}" = "kresd" ]
-        then
-            adb_cnt="$(( (${adb_cnt} - $(printf '%s' "${adb_dnsheader}" | grep -c "^")) / 2 ))"
-        fi
-    elif [ -s "${adb_tmpfile}" ]
-    then
-        adb_cnt="$(wc -l 2>/dev/null < "${adb_tmpfile}")"
-    fi
+       local mode="${1}"
+
+       adb_cnt=0
+       if [ -s "${adb_dnsdir}/${adb_dnsfile}" ] && ([ -z "${mode}" ] || [ "${mode}" = "final" ])
+       then
+               adb_cnt="$(( $(wc -l 2>/dev/null < "${adb_dnsdir}/${adb_dnsfile}") - $(wc -l 2>/dev/null < "${adb_tmpdir}/tmp.add_whitelist") ))"
+               if [ "${adb_dns}" = "named" ] || [ "${adb_dns}" = "kresd" ]
+               then
+                       adb_cnt="$(( (${adb_cnt} - $(printf '%s' "${adb_dnsheader}" | grep -c "^")) / 2 ))"
+               fi
+       elif [ -s "${adb_tmpfile}" ]
+       then
+               adb_cnt="$(wc -l 2>/dev/null < "${adb_tmpfile}")"
+       fi
 }
 
 # set external config options
 #
 f_extconf()
 {
-    local uci_config port port_list="53 853 5353"
-
-    case "${adb_dns}" in
-        dnsmasq)
-            uci_config="dhcp"
-            if [ ${adb_enabled} -eq 1 ] && [ -z "$(uci -q get dhcp.@dnsmasq[${adb_dnsinstance}].serversfile | grep -Fo "${adb_dnsdir}/${adb_dnsfile}")" ]
-            then
-                uci -q set dhcp.@dnsmasq[${adb_dnsinstance}].serversfile="${adb_dnsdir}/${adb_dnsfile}"
-            elif [ ${adb_enabled} -eq 0 ] && [ -n "$(uci -q get dhcp.@dnsmasq[${adb_dnsinstance}].serversfile | grep -Fo "${adb_dnsdir}/${adb_dnsfile}")" ]
-            then
-                uci -q delete dhcp.@dnsmasq[${adb_dnsinstance}].serversfile
-            fi
-        ;;
-        kresd)
-            uci_config="resolver"
-            if [ ${adb_enabled} -eq 1 ] && [ -z "$(uci -q get resolver.kresd.rpz_file | grep -Fo "${adb_dnsdir}/${adb_dnsfile}")" ]
-            then
-                uci -q add_list resolver.kresd.rpz_file="${adb_dnsdir}/${adb_dnsfile}"
-            elif [ ${adb_enabled} -eq 0 ] && [ -n "$(uci -q get resolver.kresd.rpz_file | grep -Fo "${adb_dnsdir}/${adb_dnsfile}")" ]
-            then
-                uci -q del_list resolver.kresd.rpz_file="${adb_dnsdir}/${adb_dnsfile}"
-            fi
-            if [ ${adb_enabled} -eq 1 ] && [ ${adb_dnsflush} -eq 0 ] && [ "$(uci -q get resolver.kresd.keep_cache)" != "1" ]
-            then
-                uci -q set resolver.kresd.keep_cache="1"
-            elif [ ${adb_enabled} -eq 0 ] || ([ ${adb_dnsflush} -eq 1 ] && [ "$(uci -q get resolver.kresd.keep_cache)" = "1" ])
-            then
-                uci -q set resolver.kresd.keep_cache="0"
-            fi
-        ;;
-    esac
-    f_uci "${uci_config}"
-
-    uci_config="firewall"
-    if [ ${adb_enabled} -eq 1 ] && [ ${adb_forcedns} -eq 1 ] && \
-       [ -z "$(uci -q get firewall.adblock_dns_53)" ] && [ $(/etc/init.d/firewall enabled; printf '%u' ${?}) -eq 0 ]
-    then
-        for port in ${port_list}
-        do
-            uci_add firewall "redirect" "adblock_dns_${port}"
-            uci_set firewall "adblock_dns_${port}" "name" "Adblock DNS, port ${port}"
-            uci_set firewall "adblock_dns_${port}" "src" "lan"
-            uci_set firewall "adblock_dns_${port}" "proto" "tcp udp"
-            uci_set firewall "adblock_dns_${port}" "src_dport" "${port}"
-            uci_set firewall "adblock_dns_${port}" "dest_port" "${port}"
-            uci_set firewall "adblock_dns_${port}" "target" "DNAT"
-        done
-    elif [ -n "$(uci -q get firewall.adblock_dns_53)" ] && ([ ${adb_enabled} -eq 0 ] || [ ${adb_forcedns} -eq 0 ])
-    then
-        for port in ${port_list}
-        do
-            uci_remove firewall "adblock_dns_${port}"
-        done
-    fi
-    f_uci "${uci_config}"
+       local uci_config port port_list="53 853 5353"
+
+       case "${adb_dns}" in
+               dnsmasq)
+                       uci_config="dhcp"
+                       if [ ${adb_enabled} -eq 1 ] && [ -z "$(uci_get dhcp "@dnsmasq[${adb_dnsinstance}]" serversfile | grep -Fo "${adb_dnsdir}/${adb_dnsfile}")" ]
+                       then
+                               uci_set dhcp "@dnsmasq[${adb_dnsinstance}]" serversfile "${adb_dnsdir}/${adb_dnsfile}"
+                       elif [ ${adb_enabled} -eq 0 ] && [ -n "$(uci_get dhcp "@dnsmasq[${adb_dnsinstance}]" serversfile | grep -Fo "${adb_dnsdir}/${adb_dnsfile}")" ]
+                       then
+                               uci_remove dhcp "@dnsmasq[${adb_dnsinstance}]" serversfile
+                       fi
+               ;;
+               kresd)
+                       uci_config="resolver"
+                       if [ ${adb_enabled} -eq 1 ] && [ -z "$(uci_get resolver kresd rpz_file | grep -Fo "${adb_dnsdir}/${adb_dnsfile}")" ]
+                       then
+                               uci -q add_list resolver.kresd.rpz_file="${adb_dnsdir}/${adb_dnsfile}"
+                       elif [ ${adb_enabled} -eq 0 ] && [ -n "$(uci_get resolver kresd rpz_file | grep -Fo "${adb_dnsdir}/${adb_dnsfile}")" ]
+                       then
+                               uci -q del_list resolver.kresd.rpz_file="${adb_dnsdir}/${adb_dnsfile}"
+                       fi
+                       if [ ${adb_enabled} -eq 1 ] && [ ${adb_dnsflush} -eq 0 ] && [ "$(uci_get resolver kresd keep_cache)" != "1" ]
+                       then
+                               uci_set resolver kresd keep_cache "1"
+                       elif [ ${adb_enabled} -eq 0 ] || ([ ${adb_dnsflush} -eq 1 ] && [ "$(uci_get resolver kresd keep_cache)" = "1" ])
+                       then
+                               uci_set resolver kresd keep_cache "0"
+                       fi
+               ;;
+       esac
+       f_uci "${uci_config}"
+
+       uci_config="firewall"
+       if [ ${adb_enabled} -eq 1 ] && [ ${adb_forcedns} -eq 1 ] && \
+               [ -z "$(uci_get firewall adblock_dns_53)" ] && [ $(/etc/init.d/firewall enabled; printf '%u' ${?}) -eq 0 ]
+       then
+               for port in ${port_list}
+               do
+                       uci_add firewall "redirect" "adblock_dns_${port}"
+                       uci_set firewall "adblock_dns_${port}" "name" "Adblock DNS, port ${port}"
+                       uci_set firewall "adblock_dns_${port}" "src" "lan"
+                       uci_set firewall "adblock_dns_${port}" "proto" "tcp udp"
+                       uci_set firewall "adblock_dns_${port}" "src_dport" "${port}"
+                       uci_set firewall "adblock_dns_${port}" "dest_port" "${port}"
+                       uci_set firewall "adblock_dns_${port}" "target" "DNAT"
+               done
+       elif [ -n "$(uci_get firewall adblock_dns_53)" ] && ([ ${adb_enabled} -eq 0 ] || [ ${adb_forcedns} -eq 0 ])
+       then
+               for port in ${port_list}
+               do
+                       uci_remove firewall "adblock_dns_${port}"
+               done
+       fi
+       f_uci "${uci_config}"
 }
 
 # restart of the dns backend
 #
 f_dnsup()
 {
-    local dns_up cache_util cache_rc cnt=0
-
-    if [ ${adb_dnsflush} -eq 0 ] && [ ${adb_enabled} -eq 1 ] && [ "${adb_rc}" -eq 0 ]
-    then
-        case "${adb_dns}" in
-            dnsmasq)
-                killall -q -HUP "${adb_dns}"
-                cache_rc=${?}
-            ;;
-            unbound)
-                cache_util="$(command -v unbound-control)"
-                if [ -x "${cache_util}" ] && [ -d "${adb_tmpdir}" ] && [ -f "${adb_dnsdir}"/unbound.conf ]
-                then
-                    "${cache_util}" -c "${adb_dnsdir}"/unbound.conf dump_cache > "${adb_tmpdir}"/adb_cache.dump 2>/dev/null
-                fi
-                "/etc/init.d/${adb_dns}" restart >/dev/null 2>&1
-            ;;
-            kresd)
-                cache_util="keep_cache"
-                "/etc/init.d/${adb_dns}" restart >/dev/null 2>&1
-                cache_rc=${?}
-            ;;
-            named)
-                cache_util="$(command -v rndc)"
-                if [ -x "${cache_util}" ] && [ -f /etc/bind/rndc.conf ]
-                then
-                    "${cache_util}" -c /etc/bind/rndc.conf reload >/dev/null 2>&1
-                    cache_rc=${?}
-                else
-                    "/etc/init.d/${adb_dns}" restart >/dev/null 2>&1
-                fi
-            ;;
-            *)
-                "/etc/init.d/${adb_dns}" restart >/dev/null 2>&1
-            ;;
-        esac
-    else
-        "/etc/init.d/${adb_dns}" restart >/dev/null 2>&1
-    fi
-
-    adb_rc=1
-    while [ ${cnt} -le 10 ]
-    do
-        dns_up="$(ubus -S call service list "{\"name\":\"${adb_dns}\"}" | jsonfilter -l1 -e "@[\"${adb_dns}\"].instances.*.running")"
-        if [ "${dns_up}" = "true" ]
-        then
-            case "${adb_dns}" in
-                unbound)
-                    cache_util="$(command -v unbound-control)"
-                    if [ -x "${cache_util}" ] && [ -d "${adb_tmpdir}" ] && [ -s "${adb_tmpdir}"/adb_cache.dump ]
-                    then
-                        while [ ${cnt} -le 10 ]
-                        do
-                            "${cache_util}" -c "${adb_dnsdir}"/unbound.conf load_cache < "${adb_tmpdir}"/adb_cache.dump >/dev/null 2>&1
-                            cache_rc=${?}
-                            if [ ${cache_rc} -eq 0 ]
-                            then
-                                break
-                            fi
-                            cnt=$((cnt+1))
-                            sleep 1
-                        done
-                    fi
-                ;;
-            esac
-            adb_rc=0
-            break
-        fi
-        cnt=$((cnt+1))
-        sleep 1
-    done
-    f_log "debug" "f_dnsup::: cache_util: ${cache_util:-"-"}, cache_rc: ${cache_rc:-"-"}, cache_flush: ${adb_dnsflush}, cache_cnt: ${cnt}, rc: ${adb_rc}"
-    return ${adb_rc}
+       local dns_up cache_util cache_rc cnt=0
+
+       if [ ${adb_dnsflush} -eq 0 ] && [ ${adb_enabled} -eq 1 ] && [ "${adb_rc}" -eq 0 ]
+       then
+               case "${adb_dns}" in
+                       dnsmasq)
+                               killall -q -HUP "${adb_dns}"
+                               cache_rc=${?}
+                       ;;
+                       unbound)
+                               cache_util="$(command -v unbound-control)"
+                               if [ -x "${cache_util}" ] && [ -d "${adb_tmpdir}" ] && [ -f "${adb_dnsdir}"/unbound.conf ]
+                               then
+                                       "${cache_util}" -c "${adb_dnsdir}"/unbound.conf dump_cache > "${adb_tmpdir}"/adb_cache.dump 2>/dev/null
+                               fi
+                               "/etc/init.d/${adb_dns}" restart >/dev/null 2>&1
+                       ;;
+                       kresd)
+                               cache_util="keep_cache"
+                               "/etc/init.d/${adb_dns}" restart >/dev/null 2>&1
+                               cache_rc=${?}
+                       ;;
+                       named)
+                               cache_util="$(command -v rndc)"
+                               if [ -x "${cache_util}" ] && [ -f /etc/bind/rndc.conf ]
+                               then
+                                       "${cache_util}" -c /etc/bind/rndc.conf reload >/dev/null 2>&1
+                                       cache_rc=${?}
+                               else
+                                       "/etc/init.d/${adb_dns}" restart >/dev/null 2>&1
+                               fi
+                       ;;
+                       *)
+                               "/etc/init.d/${adb_dns}" restart >/dev/null 2>&1
+                       ;;
+               esac
+       else
+               "/etc/init.d/${adb_dns}" restart >/dev/null 2>&1
+       fi
+
+       adb_rc=1
+       while [ ${cnt} -le 10 ]
+       do
+               dns_up="$(ubus -S call service list "{\"name\":\"${adb_dns}\"}" | jsonfilter -l1 -e "@[\"${adb_dns}\"].instances.*.running")"
+               if [ "${dns_up}" = "true" ]
+               then
+                       case "${adb_dns}" in
+                               unbound)
+                                       cache_util="$(command -v unbound-control)"
+                                       if [ -x "${cache_util}" ] && [ -d "${adb_tmpdir}" ] && [ -s "${adb_tmpdir}"/adb_cache.dump ]
+                                       then
+                                               while [ ${cnt} -le 10 ]
+                                               do
+                                                       "${cache_util}" -c "${adb_dnsdir}"/unbound.conf load_cache < "${adb_tmpdir}"/adb_cache.dump >/dev/null 2>&1
+                                                       cache_rc=${?}
+                                                       if [ ${cache_rc} -eq 0 ]
+                                                       then
+                                                               break
+                                                       fi
+                                                       cnt=$((cnt+1))
+                                                       sleep 1
+                                               done
+                                       fi
+                               ;;
+                       esac
+                       adb_rc=0
+                       break
+               fi
+               cnt=$((cnt+1))
+               sleep 1
+       done
+       f_log "debug" "f_dnsup::: cache_util: ${cache_util:-"-"}, cache_rc: ${cache_rc:-"-"}, cache_flush: ${adb_dnsflush}, cache_cnt: ${cnt}, rc: ${adb_rc}"
+       return ${adb_rc}
 }
 
 # backup/restore/remove blocklists
 #
 f_list()
 {
-    local file mode="${1}" in_rc="${adb_rc}"
-
-    case "${mode}" in
-        backup)
-            if [ -d "${adb_backupdir}" ]
-            then
-                gzip -cf "${adb_tmpfile}" 2>/dev/null > "${adb_backupdir}/${adb_dnsprefix}.${src_name}.gz"
-                adb_rc=${?}
-            fi
-        ;;
-        restore)
-            if [ -d "${adb_backupdir}" ] && [ -f "${adb_backupdir}/${adb_dnsprefix}.${src_name}.gz" ]
-            then
-                gunzip -cf "${adb_backupdir}/${adb_dnsprefix}.${src_name}.gz" 2>/dev/null > "${adb_tmpfile}"
-                adb_rc=${?}
-            fi
-        ;;
-        remove)
-            if [ -d "${adb_backupdir}" ]
-            then
-                rm -f "${adb_backupdir}/${adb_dnsprefix}.${src_name}.gz"
-            fi
-            adb_rc=${?}
-        ;;
-        merge)
-            for file in "${adb_tmpfile}".*
-            do
-                cat "${file}" 2>/dev/null >> "${adb_tmpdir}/${adb_dnsfile}"
-                if [ ${?} -ne 0 ]
-                then
-                    adb_rc=${?}
-                    break
-                fi
-                rm -f "${file}"
-            done
-            adb_tmpfile="${adb_tmpdir}/${adb_dnsfile}"
-        ;;
-        final)
-            > "${adb_dnsdir}/${adb_dnsfile}"
-
-            if [ -s "${adb_tmpdir}/tmp.add_whitelist" ]
-            then
-                cat "${adb_tmpdir}/tmp.add_whitelist" >> "${adb_dnsdir}/${adb_dnsfile}"
-            fi
-
-            if [ -s "${adb_tmpdir}/tmp.rem_whitelist" ]
-            then
-                grep -vf "${adb_tmpdir}/tmp.rem_whitelist" "${adb_tmpdir}/${adb_dnsfile}" | eval "${adb_dnsdeny}" >> "${adb_dnsdir}/${adb_dnsfile}"
-            else
-                eval "${adb_dnsdeny}" "${adb_tmpdir}/${adb_dnsfile}" >> "${adb_dnsdir}/${adb_dnsfile}"
-            fi
-
-            if [ ${?} -eq 0 ] && [ -n "${adb_dnsheader}" ]
-            then
-                printf '%s\n' "${adb_dnsheader}" | cat - "${adb_dnsdir}/${adb_dnsfile}" > "${adb_tmpdir}/${adb_dnsfile}"
-                cat "${adb_tmpdir}/${adb_dnsfile}" > "${adb_dnsdir}/${adb_dnsfile}"
-            fi
-            adb_rc=${?}
-        ;;
-    esac
-    f_count "${mode}"
-    f_log "debug" "f_list ::: name: ${src_name:-"-"}, mode: ${mode}, cnt: ${adb_cnt}, in_rc: ${in_rc}, out_rc: ${adb_rc}"
+       local file mode="${1}" in_rc="${adb_rc}"
+
+       case "${mode}" in
+               backup)
+                       if [ -d "${adb_backupdir}" ]
+                       then
+                               gzip -cf "${adb_tmpfile}" 2>/dev/null > "${adb_backupdir}/${adb_dnsprefix}.${src_name}.gz"
+                               adb_rc=${?}
+                       fi
+               ;;
+               restore)
+                       if [ -d "${adb_backupdir}" ] && [ -f "${adb_backupdir}/${adb_dnsprefix}.${src_name}.gz" ]
+                       then
+                               gunzip -cf "${adb_backupdir}/${adb_dnsprefix}.${src_name}.gz" 2>/dev/null > "${adb_tmpfile}"
+                               adb_rc=${?}
+                       fi
+               ;;
+               remove)
+                       if [ -d "${adb_backupdir}" ]
+                       then
+                               rm -f "${adb_backupdir}/${adb_dnsprefix}.${src_name}.gz"
+                       fi
+                       adb_rc=${?}
+               ;;
+               merge)
+                       for file in "${adb_tmpfile}".*
+                       do
+                               cat "${file}" 2>/dev/null >> "${adb_tmpdir}/${adb_dnsfile}"
+                               if [ ${?} -ne 0 ]
+                               then
+                                       adb_rc=${?}
+                                       break
+                               fi
+                               rm -f "${file}"
+                       done
+                       adb_tmpfile="${adb_tmpdir}/${adb_dnsfile}"
+               ;;
+               final)
+                       > "${adb_dnsdir}/${adb_dnsfile}"
+
+                       if [ -s "${adb_tmpdir}/tmp.add_whitelist" ]
+                       then
+                               cat "${adb_tmpdir}/tmp.add_whitelist" >> "${adb_dnsdir}/${adb_dnsfile}"
+                       fi
+
+                       if [ -s "${adb_tmpdir}/tmp.rem_whitelist" ]
+                       then
+                               grep -vf "${adb_tmpdir}/tmp.rem_whitelist" "${adb_tmpdir}/${adb_dnsfile}" | eval "${adb_dnsdeny}" >> "${adb_dnsdir}/${adb_dnsfile}"
+                       else
+                               eval "${adb_dnsdeny}" "${adb_tmpdir}/${adb_dnsfile}" >> "${adb_dnsdir}/${adb_dnsfile}"
+                       fi
+
+                       if [ ${?} -eq 0 ] && [ -n "${adb_dnsheader}" ]
+                       then
+                               printf '%s\n' "${adb_dnsheader}" | cat - "${adb_dnsdir}/${adb_dnsfile}" > "${adb_tmpdir}/${adb_dnsfile}"
+                               mv -f "${adb_tmpdir}/${adb_dnsfile}" "${adb_dnsdir}/${adb_dnsfile}"
+                       fi
+                       adb_rc=${?}
+               ;;
+       esac
+       f_count "${mode}"
+       f_log "debug" "f_list ::: name: ${src_name:-"-"}, mode: ${mode}, cnt: ${adb_cnt}, in_rc: ${in_rc}, out_rc: ${adb_rc}"
 }
 
 # top level domain compression
 #
 f_tld()
 {
-    local cnt cnt_srt cnt_tld source="${1}" temp="${1}.tld"
-
-    cnt="$(wc -l 2>/dev/null < "${source}")"
-    sort -u "${source}" > "${temp}"
-    if [ ${?} -eq 0 ]
-    then
-        cnt_srt="$(wc -l 2>/dev/null < "${temp}")"
-        awk -F "." '{for(f=NF;f>1;f--)printf "%s.",$f;print $1}' "${temp}" > "${source}"
-        if [ ${?} -eq 0 ]
-        then
-            sort "${source}" > "${temp}"
-            if [ ${?} -eq 0 ]
-            then
-                awk '{if(NR==1){tld=$NF};while(getline){if($NF!~tld"\\."){print tld;tld=$NF}}print tld}' "${temp}" > "${source}"
-                if [ ${?} -eq 0 ]
-                then
-                    awk -F "." '{for(f=NF;f>1;f--)printf "%s.",$f;print $1}' "${source}" > "${temp}"
-                    if [ ${?} -eq 0 ]
-                    then
-                        sort "${temp}" > "${source}"
-                        if [ ${?} -eq 0 ]
-                        then
-                            cnt_tld="$(wc -l 2>/dev/null < "${source}")"
-                        else
-                            cat "${temp}" > "${source}"
-                        fi
-                    fi
-                else
-                    cat "${temp}" > "${source}"
-                fi
-            fi
-        else
-            cat "${temp}" > "${source}"
-        fi
-    fi
-    rm -f "${temp}"
-    f_log "debug" "f_tld  ::: source: ${source}, cnt: ${cnt:-"-"}, cnt_srt: ${cnt_srt:-"-"}, cnt_tld: ${cnt_tld:-"-"}"
+       local cnt cnt_srt cnt_tld source="${1}" temp="${1}.tld"
+
+       cnt="$(wc -l 2>/dev/null < "${source}")"
+       awk 'BEGIN{FS="."}{for(f=NF;f>1;f--)printf "%s.",$f;print $1}' "${source}" > "${temp}"
+       if [ ${?} -eq 0 ]
+       then
+               sort -u "${temp}" > "${source}"
+               if [ ${?} -eq 0 ]
+               then
+                       cnt_srt="$(wc -l 2>/dev/null < "${source}")"
+                       awk '{if(NR==1){tld=$NF};while(getline){if($NF!~tld"\\."){print tld;tld=$NF}}print tld}' "${source}" > "${temp}"
+                       if [ ${?} -eq 0 ]
+                       then
+                               awk 'BEGIN{FS="."}{for(f=NF;f>1;f--)printf "%s.",$f;print $1}' "${temp}" > "${source}"
+                               if [ ${?} -eq 0 ]
+                               then
+                                       cnt_tld="$(wc -l 2>/dev/null < "${source}")"
+                               else
+                                       mv -f "${temp}" > "${source}"
+                               fi
+                       fi
+               else
+                       mv -f "${temp}" "${source}"
+               fi
+       fi
+       f_log "debug" "f_tld  ::: source: ${source}, cnt: ${cnt:-"-"}, cnt_srt: ${cnt_srt:-"-"}, cnt_tld: ${cnt_tld:-"-"}"
 }
 
 # blocklist hash compare
 #
 f_hash()
 {
-    local hash hash_rc=1
-
-    if [ -x "${adb_hashutil}" ] && [ -f "${adb_dnsdir}/${adb_dnsfile}" ]
-    then
-        hash="$(${adb_hashutil} "${adb_dnsdir}/${adb_dnsfile}" 2>/dev/null | awk '{print $1}')"
-        if [ -z "${adb_hashold}" ] && [ -n "${hash}" ]
-        then
-            adb_hashold="${hash}"
-        elif [ -z "${adb_hashnew}" ] && [ -n "${hash}" ]
-        then
-            adb_hashnew="${hash}"
-        fi
-        if [ -n "${adb_hashold}" ] && [ -n "${adb_hashnew}" ]
-        then
-            if [ "${adb_hashold}" = "${adb_hashnew}" ]
-            then
-                hash_rc=0
-            fi
-            adb_hashold=""
-            adb_hashnew=""
-        fi
-    fi
-    f_log "debug" "f_hash ::: hash_util: ${adb_hashutil}, hash: ${hash}, out_rc: ${hash_rc}"
-    return ${hash_rc}
+       local hash hash_rc=1
+
+       if [ -x "${adb_hashutil}" ] && [ -f "${adb_dnsdir}/${adb_dnsfile}" ]
+       then
+               hash="$(${adb_hashutil} "${adb_dnsdir}/${adb_dnsfile}" 2>/dev/null | awk '{print $1}')"
+               if [ -z "${adb_hashold}" ] && [ -n "${hash}" ]
+               then
+                       adb_hashold="${hash}"
+               elif [ -z "${adb_hashnew}" ] && [ -n "${hash}" ]
+               then
+                       adb_hashnew="${hash}"
+               fi
+               if [ -n "${adb_hashold}" ] && [ -n "${adb_hashnew}" ]
+               then
+                       if [ "${adb_hashold}" = "${adb_hashnew}" ]
+                       then
+                               hash_rc=0
+                       fi
+                       adb_hashold=""
+                       adb_hashnew=""
+               fi
+       fi
+       f_log "debug" "f_hash ::: hash_util: ${adb_hashutil}, hash: ${hash}, out_rc: ${hash_rc}"
+       return ${hash_rc}
 }
 
 # suspend/resume adblock processing
 #
 f_switch()
 {
-    local mode="${1}"
-
-    if [ ! -s "${adb_dnsdir}/.${adb_dnsfile}" ] && [ "${mode}" = "suspend" ]
-    then
-        f_hash
-        cat "${adb_dnsdir}/${adb_dnsfile}" > "${adb_dnsdir}/.${adb_dnsfile}"
-        printf '%s\n' "${adb_dnsheader}" > "${adb_dnsdir}/${adb_dnsfile}"
-        f_hash
-    elif [ -s "${adb_dnsdir}/.${adb_dnsfile}" ] && [ "${mode}" = "resume" ]
-    then
-        f_hash
-        cat "${adb_dnsdir}/.${adb_dnsfile}" > "${adb_dnsdir}/${adb_dnsfile}"
-        > "${adb_dnsdir}/.${adb_dnsfile}"
-        f_hash
-    fi
-    if [ ${?} -eq 1 ]
-    then
-        f_temp
-        f_dnsup
-        f_jsnup "${mode}"
-        f_log "info" "${mode} adblock processing"
-        f_rmtemp
-        exit 0
-    fi
+       local mode="${1}"
+
+       if [ ! -s "${adb_dnsdir}/.${adb_dnsfile}" ] && [ "${mode}" = "suspend" ]
+       then
+               f_hash
+               cat "${adb_dnsdir}/${adb_dnsfile}" > "${adb_dnsdir}/.${adb_dnsfile}"
+               printf '%s\n' "${adb_dnsheader}" > "${adb_dnsdir}/${adb_dnsfile}"
+               f_hash
+       elif [ -s "${adb_dnsdir}/.${adb_dnsfile}" ] && [ "${mode}" = "resume" ]
+       then
+               f_hash
+               cat "${adb_dnsdir}/.${adb_dnsfile}" > "${adb_dnsdir}/${adb_dnsfile}"
+               > "${adb_dnsdir}/.${adb_dnsfile}"
+               f_hash
+       fi
+       if [ ${?} -eq 1 ]
+       then
+               f_temp
+               f_dnsup
+               f_jsnup "${mode}"
+               f_log "info" "${mode} adblock processing"
+               f_rmtemp
+               exit 0
+       fi
 }
 
 # query blocklist for certain (sub-)domains
 #
 f_query()
 {
-    local search result prefix suffix field domain="${1}" tld="${1#*.}"
-
-    if [ -z "${domain}" ] || [ "${domain}" = "${tld}" ]
-    then
-        printf '%s\n' "::: invalid domain input, please submit a single domain, e.g. 'doubleclick.net'"
-    else
-        case "${adb_dns}" in
-            dnsmasq)
-                prefix=".*[\/\.]"
-                suffix="(\/)"
-                field=2
-            ;;
-            unbound)
-                prefix=".*[\"\.]"
-                suffix="(static)"
-                field=3
-            ;;
-            named)
-                prefix="[^\*].*[\.]"
-                suffix="( \.)"
-                field=1
-            ;;
-            kresd)
-                prefix="[^\*].*[\.]"
-                suffix="( \.)"
-                field=1
-            ;;
-            dnscrypt-proxy)
-                prefix=".*[\.]"
-                suffix=""
-                field=1
-            ;;
-        esac
-        while [ "${domain}" != "${tld}" ]
-        do
-            search="${domain//./\.}"
-            result="$(awk -F '/|\"| ' "/^($search|${prefix}+${search}.*${suffix}$)/{i++;{printf(\"  + %s\n\",\$${field})};if(i>9){printf(\"  + %s\n\",\"[...]\");exit}}" "${adb_dnsdir}/${adb_dnsfile}")"
-            printf '%s\n' "::: results for domain '${domain}'"
-            printf '%s\n' "${result:-"  - no match"}"
-            domain="${tld}"
-            tld="${domain#*.}"
-        done
-    fi
+       local search result prefix suffix field domain="${1}" tld="${1#*.}"
+
+       if [ -z "${domain}" ] || [ "${domain}" = "${tld}" ]
+       then
+               printf '%s\n' "::: invalid domain input, please submit a single domain, e.g. 'doubleclick.net'"
+       else
+               case "${adb_dns}" in
+                       dnsmasq)
+                               prefix=".*[\/\.]"
+                               suffix="(\/)"
+                               field=2
+                       ;;
+                       unbound)
+                               prefix=".*[\"\.]"
+                               suffix="(static)"
+                               field=3
+                       ;;
+                       named)
+                               prefix="[^\*].*[\.]"
+                               suffix="( \.)"
+                               field=1
+                       ;;
+                       kresd)
+                               prefix="[^\*].*[\.]"
+                               suffix="( \.)"
+                               field=1
+                       ;;
+                       dnscrypt-proxy)
+                               prefix=".*[\.]"
+                               suffix=""
+                               field=1
+                       ;;
+               esac
+               while [ "${domain}" != "${tld}" ]
+               do
+                       search="${domain//./\.}"
+                       result="$(awk -F '/|\"| ' "/^($search|${prefix}+${search}.*${suffix}$)/{i++;{printf(\"  + %s\n\",\$${field})};if(i>9){printf(\"  + %s\n\",\"[...]\");exit}}" "${adb_dnsdir}/${adb_dnsfile}")"
+                       printf '%s\n' "::: results for domain '${domain}'"
+                       printf '%s\n' "${result:-"  - no match"}"
+                       domain="${tld}"
+                       tld="${domain#*.}"
+               done
+       fi
 }
 
 # update runtime information
 #
 f_jsnup()
 {
-    local bg_pid rundate status="${1:-"enabled"}" mode="normal mode" no_mail=0
-
-    if [ ${adb_rc} -gt 0 ]
-    then
-        status="error"
-        rundate="$(/bin/date "+%d.%m.%Y %H:%M:%S")"
-    fi
-    if [ ${adb_enabled} -eq 0 ]
-    then
-        status="disabled"
-    fi
-    if [ "${status}" = "enabled" ]
-    then
-        rundate="$(/bin/date "+%d.%m.%Y %H:%M:%S")"
-    fi
-    if [ "${status}" = "suspend" ]
-    then
-        status="paused"
-    fi
-    if [ "${status}" = "resume" ]
-    then
-        no_mail=1
-        status="enabled"
-    fi
-    if [ ${adb_backup_mode} -eq 1 ]
-    then
-        mode="backup mode"
-    fi
-
-    if [ -s "${adb_rtfile}" ]
-    then
-        json_load "$(cat "${adb_rtfile}" 2>/dev/null)"
-        json_select data
-
-        if [ -z "${adb_fetchinfo}" ] && [ -s "${adb_rtfile}" ]
-        then
-            json_get_var adb_fetchinfo "fetch_utility"
-        fi
-        if [ -z "${rundate}" ]
-        then
-            json_get_var rundate "last_rundate"
-        fi
-        if [ -z "${adb_cnt}" ]
-        then
-            json_get_var adb_cnt "overall_domains"
-            adb_cnt="${adb_cnt%% *}"
-        fi
-    fi
-
-    json_init
-    json_add_object "data"
-    json_add_string "adblock_status" "${status}"
-    json_add_string "adblock_version" "${adb_ver}"
-    json_add_string "overall_domains" "${adb_cnt:-0} (${mode})"
-    json_add_string "fetch_utility" "${adb_fetchinfo:-"-"}"
-    json_add_string "dns_backend" "${adb_dns} (${adb_dnsdir})"
-    json_add_string "last_rundate" "${rundate:-"-"}"
-    json_add_string "system_release" "${adb_sysver}"
-    json_close_object
-    json_dump > "${adb_rtfile}"
-
-    if [ ${adb_notify} -eq 1 ] && [ ${no_mail} -eq 0 ] && [ -x /etc/adblock/adblock.notify ] && \
-      ([ "${status}" = "error" ] || ([ "${status}" = "enabled" ] && [ ${adb_cnt} -le ${adb_notifycnt} ]))
-    then
-        (/etc/adblock/adblock.notify >/dev/null 2>&1) &
-        bg_pid=${!}
-    fi
-    f_log "debug" "f_jsnup::: status: ${status}, mode: ${mode}, cnt: ${adb_cnt}, notify: ${adb_notify}, notify_cnt: ${adb_notifycnt}, notify_pid: ${bg_pid:-"-"}"
+       local run_time bg_pid status="${1:-"enabled"}" mode="normal mode" no_mail=0
+
+       if [ ${adb_rc} -gt 0 ]
+       then
+               status="error"
+               run_time="$(/bin/date "+%d.%m.%Y %H:%M:%S")"
+       fi
+       if [ "${status}" = "enabled" ]
+       then
+               run_time="$(/bin/date "+%d.%m.%Y %H:%M:%S")"
+       fi
+       if [ "${status}" = "suspend" ]
+       then
+               status="paused"
+       fi
+       if [ "${status}" = "resume" ]
+       then
+               no_mail=1
+               status="enabled"
+       fi
+       if [ ${adb_backup_mode} -eq 1 ]
+       then
+               mode="backup mode"
+       fi
+
+       if [ -z "${adb_fetchinfo}" ]
+       then
+               json_get_var adb_fetchinfo "fetch_utility"
+       fi
+       if [ -z "${adb_cnt}" ]
+       then
+               json_get_var adb_cnt "overall_domains"
+               adb_cnt="${adb_cnt%% *}"
+       fi
+       if [ -z "${run_time}" ]
+       then
+               json_get_var run_time "last_rundate"
+       fi
+       json_add_string "adblock_status" "${status}"
+       json_add_string "adblock_version" "${adb_ver}"
+       json_add_string "overall_domains" "${adb_cnt:-0} (${mode})"
+       json_add_string "fetch_utility" "${adb_fetchinfo:-"-"}"
+       json_add_string "dns_backend" "${adb_dns} (${adb_dnsdir})"
+       json_add_string "last_rundate" "${run_time:-"-"}"
+       json_add_string "system_release" "${adb_sysver}"
+       json_dump > "${adb_rtfile}"
+
+       if [ ${adb_notify} -eq 1 ] && [ ${no_mail} -eq 0 ] && [ -x /etc/adblock/adblock.notify ] && \
+               ([ "${status}" = "error" ] || ([ "${status}" = "enabled" ] && [ ${adb_cnt} -le ${adb_notifycnt} ]))
+       then
+               (/etc/adblock/adblock.notify >/dev/null 2>&1) &
+               bg_pid=${!}
+       fi
+       f_log "debug" "f_jsnup::: status: ${status}, mode: ${mode}, cnt: ${adb_cnt}, notify: ${adb_notify}, notify_cnt: ${adb_notifycnt}, notify_pid: ${bg_pid:-"-"}"
 }
 
 # write to syslog
 #
 f_log()
 {
-    local class="${1}" log_msg="${2}"
-
-    if [ -n "${log_msg}" ] && ([ "${class}" != "debug" ] || [ ${adb_debug} -eq 1 ])
-    then
-        logger -p "${class}" -t "adblock-[${adb_ver}]" "${log_msg}"
-        if [ "${class}" = "err" ]
-        then
-            f_rmdns
-            f_jsnup
-            logger -p "${class}" -t "adblock-[${adb_ver}]" "Please also check 'https://github.com/openwrt/packages/blob/master/net/adblock/files/README.md'"
-            exit 1
-        fi
-    fi
+       local class="${1}" log_msg="${2}"
+
+       if [ -n "${log_msg}" ] && ([ "${class}" != "debug" ] || [ ${adb_debug} -eq 1 ])
+       then
+               logger -p "${class}" -t "adblock-${adb_ver}[${$}]" "${log_msg}"
+               if [ "${class}" = "err" ]
+               then
+                       f_rmdns
+                       f_jsnup
+                       logger -p "${class}" -t "adblock-${adb_ver}[${$}]" "Please also check 'https://github.com/openwrt/packages/blob/master/net/adblock/files/README.md'"
+                       exit 1
+               fi
+       fi
 }
 
 # main function for blocklist processing
 #
 f_main()
 {
-    local tmp_load tmp_file src_name src_rset src_url src_log src_arc src_cat cat list entry suffix mem_total mem_free enabled cnt=1
-
-    mem_total="$(awk '/^MemTotal/ {print int($2/1000)}' "/proc/meminfo" 2>/dev/null)"
-    mem_free="$(awk '/^MemFree/ {print int($2/1000)}' "/proc/meminfo" 2>/dev/null)"
-    tmp_load="${adb_tmpload}"
-    tmp_file="${adb_tmpfile}"
-    > "${adb_dnsdir}/.${adb_dnsfile}"
-    > "${adb_tmpdir}/tmp.raw_whitelist"
-    > "${adb_tmpdir}/tmp.add_whitelist"
-    > "${adb_tmpdir}/tmp.rem_whitelist"
-    f_log "debug" "f_main ::: dns: ${adb_dns}, fetch_util: ${adb_fetchinfo}, backup: ${adb_backup}, backup_mode: ${adb_backup_mode}, dns_jail: ${adb_jail}, force_srt: ${adb_forcesrt}, force_dns: ${adb_forcedns}, mem_total: ${mem_total:-0}, mem_free: ${mem_free:-0}, max_queue: ${adb_maxqueue}"
-
-    # prepare whitelist entries
-    #
-    if [ -s "${adb_whitelist}" ]
-    then
-        adb_whitelist_rset="/^([^([:space:]|\#|\*|\/).]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}"
-        awk "${adb_whitelist_rset}" "${adb_whitelist}" > "${adb_tmpdir}/tmp.raw_whitelist"
-        f_tld "${adb_tmpdir}/tmp.raw_whitelist"
-
-        adb_whitelist_rset="/^([^([:space:]|\#|\*|\/).]+\.)+[[:alpha:]]+([[:space:]]|$)/{gsub(\"\\\.\",\"\\\.\",\$1);print tolower(\"^\"\$1\"\\\|\\\.\"\$1)}"
-        awk "${adb_whitelist_rset}" "${adb_tmpdir}/tmp.raw_whitelist" > "${adb_tmpdir}/tmp.rem_whitelist"
-
-        if [ -n "${adb_dnsallow}" ]
-        then
-            eval "${adb_dnsallow}" "${adb_tmpdir}/tmp.raw_whitelist" > "${adb_tmpdir}/tmp.add_whitelist"
-        fi
-    fi
-
-    # build 'dnsjail' list
-    #
-    if [ ${adb_jail} -eq 1 ]
-    then
-        cat "${adb_tmpdir}/tmp.add_whitelist" > "/tmp/${adb_dnsjail}"
-        printf '%s\n' "${adb_dnshalt}" >> "/tmp/${adb_dnsjail}"
-        if [ -n "${adb_dnsheader}" ]
-        then
-            printf '%s\n' "${adb_dnsheader}" | cat - "/tmp/${adb_dnsjail}" > "${adb_tmpdir}/tmp.dnsjail"
-            cat "${adb_tmpdir}/tmp.dnsjail" > "/tmp/${adb_dnsjail}"
-        fi
-    fi
-
-    # main loop
-    #
-    for src_name in ${adb_sources}
-    do
-        enabled="$(eval printf '%s' \"\${enabled_${src_name}\}\")"
-        src_url="$(eval printf '%s' \"\${adb_src_${src_name}\}\")"
-        src_rset="$(eval printf '%s' \"\${adb_src_rset_${src_name}\}\")"
-        src_cat="$(eval printf '%s' \"\${adb_src_cat_${src_name}\}\")"
-        adb_tmpload="${tmp_load}.${src_name}"
-        adb_tmpfile="${tmp_file}.${src_name}"
-
-        # basic pre-checks
-        #
-        f_log "debug" "f_main ::: name: ${src_name}, enabled: ${enabled}"
-        if [ "${enabled}" != "1" ] || [ -z "${src_url}" ] || [ -z "${src_rset}" ]
-        then
-            f_list remove
-            continue
-        fi
-
-        # backup mode
-        #
-        if [ ${adb_backup_mode} -eq 1 ] && [ "${adb_action}" = "start" ] && [ "${src_name}" != "blacklist" ]
-        then
-            f_list restore
-            if [ ${adb_rc} -eq 0 ] && [ -s "${adb_tmpfile}" ]
-            then
-                if ([ ${mem_total} -lt 64 ] || [ ${mem_free} -lt 40 ]) && [ ${adb_forcesrt} -eq 0 ]
-                then
-                    f_tld "${adb_tmpfile}"
-                fi
-                continue
-            fi
-        fi
-
-        # download queue processing
-        #
-        if [ "${src_name}" = "blacklist" ]
-        then
-            if [ -s "${src_url}" ]
-            then
-                (
-                  src_log="$(cat "${src_url}" > "${adb_tmpload}" 2>&1)"
-                  adb_rc=${?}
-                  if [ ${adb_rc} -eq 0 ] && [ -s "${adb_tmpload}" ]
-                  then
-                      awk "${src_rset}" "${adb_tmpload}" 2>/dev/null > "${adb_tmpfile}"
-                      adb_rc=${?}
-                      if [ ${adb_rc} -eq 0 ] && [ -s "${adb_tmpfile}" ]
-                      then
-                          rm -f "${adb_tmpload}"
-                          f_list download
-                          if ([ ${mem_total} -lt 64 ] || [ ${mem_free} -lt 40 ]) && [ ${adb_forcesrt} -eq 0 ]
-                          then
-                              f_tld "${adb_tmpfile}"
-                          fi
-                      fi
-                  else
-                      src_log="$(printf '%s' "${src_log}" | awk '{ORS=" ";print $0}')"
-                      f_log "debug" "f_main ::: name: ${src_name}, url: ${src_url}, rc: ${adb_rc}, log: ${src_log:-"-"}"
-                  fi
-                ) &
-            else
-                continue
-            fi
-        elif [ -n "${src_cat}" ]
-        then
-            (
-              src_arc="${adb_tmpdir}/${src_url##*/}"
-              src_log="$("${adb_fetchutil}" ${adb_fetchparm} "${src_arc}" "${src_url}" 2>&1)"
-              adb_rc=${?}
-              if [ ${adb_rc} -eq 0 ] && [ -s "${src_arc}" ]
-              then
-                  list="$(tar -tzf "${src_arc}")"
-                  suffix="$(eval printf '%s' \"\${adb_src_suffix_${src_name}:-\"domains\"\}\")"
-                  for cat in ${src_cat}
-                  do
-                      entry="$(printf '%s' "${list}" | grep -E "[\^/]+${cat}/${suffix}")"
-                      if [ -n "${entry}" ]
-                      then
-                          tar -xOzf "${src_arc}" "${entry}" >> "${adb_tmpload}"
-                          adb_rc=${?}
-                          if [ ${adb_rc} -ne 0 ]
-                          then
-                              break
-                          fi
-                      fi
-                  done
-              else
-                  src_log="$(printf '%s' "${src_log}" | awk '{ORS=" ";print $0}')"
-                  f_log "debug" "f_main ::: name: ${src_name}, url: ${src_url}, rc: ${adb_rc}, log: ${src_log:-"-"}"
-              fi
-              if [ ${adb_rc} -eq 0 ] && [ -s "${adb_tmpload}" ]
-              then
-                  rm -f "${src_arc}"
-                  awk "${src_rset}" "${adb_tmpload}" 2>/dev/null > "${adb_tmpfile}"
-                  adb_rc=${?}
-                  if [ ${adb_rc} -eq 0 ] && [ -s "${adb_tmpfile}" ]
-                  then
-                      rm -f "${adb_tmpload}"
-                      f_list download
-                      if [ ${adb_backup} -eq 1 ]
-                      then
-                          f_list backup
-                      fi
-                      if ([ ${mem_total} -lt 64 ] || [ ${mem_free} -lt 40 ]) && [ ${adb_forcesrt} -eq 0 ]
-                      then
-                          f_tld "${adb_tmpfile}"
-                      fi
-                  elif [ ${adb_backup} -eq 1 ]
-                  then
-                      f_list restore
-                  fi
-              elif [ ${adb_backup} -eq 1 ]
-              then
-                  f_list restore
-              fi
-            ) &
-        else
-            (
-              src_log="$("${adb_fetchutil}" ${adb_fetchparm} "${adb_tmpload}" "${src_url}" 2>&1)"
-              adb_rc=${?}
-              if [ ${adb_rc} -eq 0 ] && [ -s "${adb_tmpload}" ]
-              then
-                  awk "${src_rset}" "${adb_tmpload}" 2>/dev/null > "${adb_tmpfile}"
-                  adb_rc=${?}
-                  if [ ${adb_rc} -eq 0 ] && [ -s "${adb_tmpfile}" ]
-                  then
-                      rm -f "${adb_tmpload}"
-                      f_list download
-                      if [ ${adb_backup} -eq 1 ]
-                      then
-                          f_list backup
-                      fi
-                      if ([ ${mem_total} -lt 64 ] || [ ${mem_free} -lt 40 ]) && [ ${adb_forcesrt} -eq 0 ]
-                      then
-                          f_tld "${adb_tmpfile}"
-                      fi
-                  elif [ ${adb_backup} -eq 1 ]
-                  then
-                      f_list restore
-                  fi
-              else
-                  src_log="$(printf '%s' "${src_log}" | awk '{ORS=" ";print $0}')"
-                  f_log "debug" "f_main ::: name: ${src_name}, url: ${src_url}, rc: ${adb_rc}, log: ${src_log:-"-"}"
-                  if [ ${adb_backup} -eq 1 ]
-                  then
-                      f_list restore
-                  fi
-              fi
-            ) &
-        fi
-        hold=$(( cnt % adb_maxqueue ))
-        if [ ${hold} -eq 0 ]
-        then
-            wait
-        fi
-        cnt=$(( cnt + 1 ))
-    done
-
-    # list merge
-    #
-    wait
-    src_name="overall"
-    adb_tmpfile="${tmp_file}"
-    f_list merge
-
-    # overall sort and conditional dns restart
-    #
-    f_hash
-    if [ -s "${adb_tmpdir}/${adb_dnsfile}" ]
-    then
-        if ([ ${mem_total} -ge 64 ] && [ ${mem_free} -ge 40 ]) || [ ${adb_forcesrt} -eq 1 ]
-        then
-            f_tld "${adb_tmpdir}/${adb_dnsfile}"
-        fi
-        f_list final
-    else
-        > "${adb_dnsdir}/${adb_dnsfile}"
-    fi
-    chown "${adb_dnsuser}" "${adb_dnsdir}/${adb_dnsfile}" 2>/dev/null
-    f_hash
-    if [ ${?} -eq 1 ]
-    then
-        f_dnsup
-    fi
-    f_jsnup
-    if [ ${?} -eq 0 ]
-    then
-        f_log "info" "blocklist with overall ${adb_cnt} domains loaded successfully (${adb_sysver})"
-    else
-        f_log "err" "dns backend restart with active blocklist failed"
-    fi
-    f_rmtemp
-    exit ${adb_rc}
+       local tmp_load tmp_file src_name src_rset src_url src_log src_arc src_cat cat list entry suffix mem_total mem_free enabled cnt=1
+
+       mem_total="$(awk '/^MemTotal/ {print int($2/1000)}' "/proc/meminfo" 2>/dev/null)"
+       mem_free="$(awk '/^MemFree/ {print int($2/1000)}' "/proc/meminfo" 2>/dev/null)"
+       tmp_load="${adb_tmpload}"
+       tmp_file="${adb_tmpfile}"
+       > "${adb_dnsdir}/.${adb_dnsfile}"
+       > "${adb_tmpdir}/tmp.raw_whitelist"
+       > "${adb_tmpdir}/tmp.add_whitelist"
+       > "${adb_tmpdir}/tmp.rem_whitelist"
+       f_log "debug" "f_main ::: dns: ${adb_dns}, fetch_util: ${adb_fetchinfo}, backup: ${adb_backup}, backup_mode: ${adb_backup_mode}, dns_jail: ${adb_jail}, force_srt: ${adb_forcesrt}, force_dns: ${adb_forcedns}, mem_total: ${mem_total:-0}, mem_free: ${mem_free:-0}, max_queue: ${adb_maxqueue}"
+
+       # prepare whitelist entries
+       #
+       if [ -s "${adb_whitelist}" ]
+       then
+               adb_whitelist_rset="/^([[:alnum:]_-]+\.)+[[:alpha:]]+([[:space:]]|$)/{print tolower(\$1)}"
+               awk "${adb_whitelist_rset}" "${adb_whitelist}" > "${adb_tmpdir}/tmp.raw_whitelist"
+               f_tld "${adb_tmpdir}/tmp.raw_whitelist"
+
+               adb_whitelist_rset="/^([[:alnum:]_-]+\.)+[[:alpha:]]+([[:space:]]|$)/{gsub(\"\\\.\",\"\\\.\",\$1);print tolower(\"^\"\$1\"\\\|\\\.\"\$1)}"
+               awk "${adb_whitelist_rset}" "${adb_tmpdir}/tmp.raw_whitelist" > "${adb_tmpdir}/tmp.rem_whitelist"
+
+               if [ -n "${adb_dnsallow}" ]
+               then
+                       eval "${adb_dnsallow}" "${adb_tmpdir}/tmp.raw_whitelist" > "${adb_tmpdir}/tmp.add_whitelist"
+               fi
+       fi
+
+       # build 'dnsjail' list
+       #
+       if [ ${adb_jail} -eq 1 ]
+       then
+               cat "${adb_tmpdir}/tmp.add_whitelist" > "/tmp/${adb_dnsjail}"
+               printf '%s\n' "${adb_dnshalt}" >> "/tmp/${adb_dnsjail}"
+               if [ -n "${adb_dnsheader}" ]
+               then
+                       printf '%s\n' "${adb_dnsheader}" | cat - "/tmp/${adb_dnsjail}" > "${adb_tmpdir}/tmp.dnsjail"
+                       cat "${adb_tmpdir}/tmp.dnsjail" > "/tmp/${adb_dnsjail}"
+               fi
+       fi
+
+       # main loop
+       #
+       for src_name in ${adb_sources}
+       do
+               enabled="$(eval printf '%s' \"\${enabled_${src_name}\}\")"
+               src_url="$(eval printf '%s' \"\${adb_src_${src_name}\}\")"
+               src_rset="$(eval printf '%s' \"\${adb_src_rset_${src_name}\}\")"
+               src_cat="$(eval printf '%s' \"\${adb_src_cat_${src_name}\}\")"
+               adb_tmpload="${tmp_load}.${src_name}"
+               adb_tmpfile="${tmp_file}.${src_name}"
+
+               # basic pre-checks
+               #
+               f_log "debug" "f_main ::: name: ${src_name}, enabled: ${enabled}"
+               if [ "${enabled}" != "1" ] || [ -z "${src_url}" ] || [ -z "${src_rset}" ]
+               then
+                       f_list remove
+                       continue
+               fi
+
+               # backup mode
+               #
+               if [ ${adb_backup_mode} -eq 1 ] && [ "${adb_action}" = "start" ] && [ "${src_name}" != "blacklist" ]
+               then
+                       f_list restore
+                       if [ ${adb_rc} -eq 0 ] && [ -s "${adb_tmpfile}" ]
+                       then
+                               if ([ ${mem_total} -lt 64 ] || [ ${mem_free} -lt 40 ]) && [ ${adb_forcesrt} -eq 0 ]
+                               then
+                                       f_tld "${adb_tmpfile}"
+                               fi
+                               continue
+                       fi
+               fi
+
+               # download queue processing
+               #
+               if [ "${src_name}" = "blacklist" ]
+               then
+                       if [ -s "${src_url}" ]
+                       then
+                               (
+                                       src_log="$(cat "${src_url}" > "${adb_tmpload}" 2>&1)"
+                                       adb_rc=${?}
+                                       if [ ${adb_rc} -eq 0 ] && [ -s "${adb_tmpload}" ]
+                                       then
+                                               awk "${src_rset}" "${adb_tmpload}" 2>/dev/null > "${adb_tmpfile}"
+                                               adb_rc=${?}
+                                               if [ ${adb_rc} -eq 0 ] && [ -s "${adb_tmpfile}" ]
+                                               then
+                                                       rm -f "${adb_tmpload}"
+                                                       f_list download
+                                                       if ([ ${mem_total} -lt 64 ] || [ ${mem_free} -lt 40 ]) && [ ${adb_forcesrt} -eq 0 ]
+                                                       then
+                                                               f_tld "${adb_tmpfile}"
+                                                       fi
+                                               fi
+                                       else
+                                               src_log="$(printf '%s' "${src_log}" | awk '{ORS=" ";print $0}')"
+                                               f_log "debug" "f_main ::: name: ${src_name}, url: ${src_url}, rc: ${adb_rc}, log: ${src_log:-"-"}"
+                                       fi
+                               ) &
+                       else
+                               continue
+                       fi
+               elif [ -n "${src_cat}" ]
+               then
+                       (
+                               src_arc="${adb_tmpdir}/${src_url##*/}"
+                               src_log="$("${adb_fetchutil}" ${adb_fetchparm} "${src_arc}" "${src_url}" 2>&1)"
+                               adb_rc=${?}
+                               if [ ${adb_rc} -eq 0 ] && [ -s "${src_arc}" ]
+                               then
+                                       list="$(tar -tzf "${src_arc}")"
+                                       suffix="$(eval printf '%s' \"\${adb_src_suffix_${src_name}:-\"domains\"\}\")"
+                                       for cat in ${src_cat}
+                                       do
+                                               entry="$(printf '%s' "${list}" | grep -E "[\^/]+${cat}/${suffix}")"
+                                               if [ -n "${entry}" ]
+                                               then
+                                                       tar -xOzf "${src_arc}" "${entry}" >> "${adb_tmpload}"
+                                                       adb_rc=${?}
+                                                       if [ ${adb_rc} -ne 0 ]
+                                                       then
+                                                               break
+                                                       fi
+                                               fi
+                                       done
+                               else
+                                       src_log="$(printf '%s' "${src_log}" | awk '{ORS=" ";print $0}')"
+                                       f_log "debug" "f_main ::: name: ${src_name}, url: ${src_url}, rc: ${adb_rc}, log: ${src_log:-"-"}"
+                               fi
+                               if [ ${adb_rc} -eq 0 ] && [ -s "${adb_tmpload}" ]
+                               then
+                                       rm -f "${src_arc}"
+                                       awk "${src_rset}" "${adb_tmpload}" 2>/dev/null > "${adb_tmpfile}"
+                                       adb_rc=${?}
+                                       if [ ${adb_rc} -eq 0 ] && [ -s "${adb_tmpfile}" ]
+                                       then
+                                               rm -f "${adb_tmpload}"
+                                               f_list download
+                                               if [ ${adb_backup} -eq 1 ]
+                                               then
+                                                       f_list backup
+                                               fi
+                                               if ([ ${mem_total} -lt 64 ] || [ ${mem_free} -lt 40 ]) && [ ${adb_forcesrt} -eq 0 ]
+                                               then
+                                                       f_tld "${adb_tmpfile}"
+                                               fi
+                                       elif [ ${adb_backup} -eq 1 ]
+                                       then
+                                               f_list restore
+                                       fi
+                               elif [ ${adb_backup} -eq 1 ]
+                               then
+                                       f_list restore
+                               fi
+                       ) &
+               else
+                       (
+                               src_log="$("${adb_fetchutil}" ${adb_fetchparm} "${adb_tmpload}" "${src_url}" 2>&1)"
+                               adb_rc=${?}
+                               if [ ${adb_rc} -eq 0 ] && [ -s "${adb_tmpload}" ]
+                               then
+                                       awk "${src_rset}" "${adb_tmpload}" 2>/dev/null > "${adb_tmpfile}"
+                                       adb_rc=${?}
+                                       if [ ${adb_rc} -eq 0 ] && [ -s "${adb_tmpfile}" ]
+                                       then
+                                               rm -f "${adb_tmpload}"
+                                               f_list download
+                                               if [ ${adb_backup} -eq 1 ]
+                                               then
+                                                       f_list backup
+                                               fi
+                                               if ([ ${mem_total} -lt 64 ] || [ ${mem_free} -lt 40 ]) && [ ${adb_forcesrt} -eq 0 ]
+                                               then
+                                                       f_tld "${adb_tmpfile}"
+                                               fi
+                                       elif [ ${adb_backup} -eq 1 ]
+                                       then
+                                               f_list restore
+                                       fi
+                               else
+                                       src_log="$(printf '%s' "${src_log}" | awk '{ORS=" ";print $0}')"
+                                       f_log "debug" "f_main ::: name: ${src_name}, url: ${src_url}, rc: ${adb_rc}, log: ${src_log:-"-"}"
+                                       if [ ${adb_backup} -eq 1 ]
+                                       then
+                                               f_list restore
+                                       fi
+                               fi
+                       ) &
+               fi
+               hold=$(( cnt % adb_maxqueue ))
+               if [ ${hold} -eq 0 ]
+               then
+                       wait
+               fi
+               cnt=$(( cnt + 1 ))
+       done
+
+       # list merge
+       #
+       wait
+       src_name="overall"
+       adb_tmpfile="${tmp_file}"
+       f_list merge
+
+       # overall sort and conditional dns restart
+       #
+       f_hash
+       if [ -s "${adb_tmpdir}/${adb_dnsfile}" ]
+       then
+               if ([ ${mem_total} -ge 64 ] && [ ${mem_free} -ge 40 ]) || [ ${adb_forcesrt} -eq 1 ]
+               then
+                       f_tld "${adb_tmpdir}/${adb_dnsfile}"
+               fi
+               f_list final
+       else
+               > "${adb_dnsdir}/${adb_dnsfile}"
+       fi
+       chown "${adb_dnsuser}" "${adb_dnsdir}/${adb_dnsfile}" 2>/dev/null
+       f_hash
+       if [ ${?} -eq 1 ]
+       then
+               f_dnsup
+       fi
+       f_jsnup
+       if [ ${?} -eq 0 ]
+       then
+               f_log "info" "blocklist with overall ${adb_cnt} domains loaded successfully (${adb_sysver})"
+       else
+               f_log "err" "dns backend restart with active blocklist failed"
+       fi
+       f_rmtemp
+       exit ${adb_rc}
 }
 
+# source required system libraries
+#
+if [ -r "/lib/functions.sh" ] && [ -r "/usr/share/libubox/jshn.sh" ]
+then
+       . "/lib/functions.sh"
+       . "/usr/share/libubox/jshn.sh"
+else
+       f_log "err" "system libraries not found"
+fi
+
+# initialize json runtime file
+#
+json_load_file "${adb_rtfile}" >/dev/null 2>&1
+json_select data >/dev/null 2>&1
+if [ ${?} -ne 0 ]
+then
+       > "${adb_rtfile}"
+       json_init
+       json_add_object "data"
+fi
+
 # handle different adblock actions
 #
 f_envload
 case "${adb_action}" in
-    stop)
-        f_rmdns
-    ;;
-    restart)
-        f_rmdns
-        f_envcheck
-        f_main
-    ;;
-    suspend)
-        f_switch suspend
-    ;;
-    resume)
-        f_switch resume
-    ;;
-    query)
-        f_query "${2}"
-    ;;
-    start|reload)
-        f_envcheck
-        f_main
-    ;;
+       stop)
+               f_rmdns
+       ;;
+       restart)
+               f_rmdns
+               f_envcheck
+               f_main
+       ;;
+       suspend)
+               f_switch suspend
+       ;;
+       resume)
+               f_switch resume
+       ;;
+       query)
+               f_query "${2}"
+       ;;
+       start|reload)
+               f_envcheck
+               f_main
+       ;;
 esac
index c6d56a170cc70515bc2f803e01e22b5db84a90c0..99212548d6936a93a2bc85e4e24975f8c2ef99bd 100755 (executable)
@@ -224,7 +224,7 @@ aria2_start() {
                        append_setting "rpc-secret=${rpc_secret}"
                elif [ -n "$rpc_user" ]; then
                        append_setting "rpc-user=${rpc_user}"
-                       append_setting "rcp-passwd=${rcp-passwd}"
+                       append_setting "rpc-passwd=${rpc_passwd}"
                else
                        _info "It is recommand to set RPC secret."
                fi
@@ -235,9 +235,9 @@ aria2_start() {
                        unset_auth_method
                fi
        elif [ "$rpc_auth_method" = "user_pass" ]; then
-               if [ -n "$rcp_user" ]; then
+               if [ -n "$rpc_user" ]; then
                        append_setting "rpc-user=${rpc_user}"
-                       append_setting "rcp-passwd=${rcp-passwd}"
+                       append_setting "rpc-passwd=${rpc_passwd}"
                else
                        _info "Please set RPC user."
                        unset_auth_method
@@ -252,6 +252,8 @@ aria2_start() {
        if [ ."$check_certificate" = ."true" ]; then
                append_setting "check-certificate=true"
                append_options "ca_certificate"
+       elif [ ."$check_certificate" = ."false" ]; then
+               append_setting "check-certificate=false"
        fi
 
        if [ ."$enable_dht" = ."true" ]; then
index 710dffc6119f819ae15509b9af701888f76b860d..2200cc2d761eab3a13b24f9fa203726257755ab7 100644 (file)
@@ -5,9 +5,9 @@ PKG_RELEASE:=1
 
 PKG_SOURCE_PROTO:=git
 PKG_SOURCE_URL:=https://github.com/mayswind/AriaNg-DailyBuild
-PKG_SOURCE_DATE:=2018-05-21
-PKG_SOURCE_VERSION:=304500c3f042ac5387e4dd5d6ea159999d249314
-PKG_MIRROR_HASH:=f5bb5aad024f0916becc8d36832e5d864cd078553c5a719c715a00ecc72af90e
+PKG_SOURCE_DATE:=2018-08-11
+PKG_SOURCE_VERSION:=237335fd0e14d3614729052d0a44571c6340367e
+PKG_MIRROR_HASH:=263131aadc3dd784af1b9f3136910989ed6cb8ad99a89f82f45e41fa0b97db8d
 
 PKG_LICENSE:=MIT
 PKG_LICENSE_FILES:=LICENSE
@@ -59,7 +59,13 @@ define Package/ariang/install
                $(1)/www/ariang
 endef
 
-Package/ariang-nginx/install = $(Package/ariang/install)
+define Package/ariang-nginx/install
+       $(Package/ariang/install)
+       $(INSTALL_DIR) $(1)/etc/nginx
+       $(INSTALL_BIN) ./files/ariang.conf $(1)/etc/nginx/ariang.conf
+       $(INSTALL_DIR) $(1)/etc/uci-defaults
+       $(INSTALL_BIN) ./files/80_ariang-nginx-support $(1)/etc/uci-defaults/80_ariang-nginx-support
+endef
 
 $(eval $(call BuildPackage,ariang))
 $(eval $(call BuildPackage,ariang-nginx))
diff --git a/net/ariang/files/80_ariang-nginx-support b/net/ariang/files/80_ariang-nginx-support
new file mode 100644 (file)
index 0000000..a9762e0
--- /dev/null
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+
+if [ -f "/etc/nginx/nginx.conf" ] && [ -f "/etc/nginx/ariang.conf" ]; then
+       if [ "$( grep 'server_name  localhost;' < /etc/nginx/nginx.conf)" ] && 
+       [ ! "$( grep 'include ariang.conf;' < /etc/nginx/nginx.conf)" ]; then
+               sed -i '/server_name  localhost;/a \\t\tinclude ariang.conf;' /etc/nginx/nginx.conf
+               if [ -f /var/run/nginx.pid ]; then
+                       /etc/init.d/nginx restart
+               fi
+       fi
+fi
+
+exit 0
+
diff --git a/net/ariang/files/ariang.conf b/net/ariang/files/ariang.conf
new file mode 100644 (file)
index 0000000..28b0a8a
--- /dev/null
@@ -0,0 +1,4 @@
+location /ariang {
+       index index.html;
+       alias /www/ariang/;
+}
\ No newline at end of file
index 4bfdb0a00460a1bd2a1d79de6d9f375889729da0..c6cc67c94d60aa8e4cda9067a40ac57179f4ddc9 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=chrony
-PKG_VERSION:=3.3
-PKG_RELEASE:=2
+PKG_VERSION:=3.4
+PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://download.tuxfamily.org/chrony/
-PKG_HASH:=0d1fb2d5875032f2d5a86f3770374c87ee4c941916f64171e81f7684f2a73128
+PKG_HASH:=af77e47c2610a7e55c8af5b89a8aeff52d9a867dd5983d848b52d374bc0e6b9f
 
 PKG_MAINTAINER:=Miroslav Lichvar <mlichvar0@gmail.com>
 PKG_LICENSE:=GPL-2.0
index f7aee0a6a25178e292ead2b9d61faed43f508c56..492f755ff1d5073cadbc80788eb6eb5838c26b41 100644 (file)
@@ -36,8 +36,8 @@ handle_allow() {
        elif [ "$wan6_iface" = "$iface" ]; then
                echo allow ::/0
        else
-               network_get_subnets subnets $iface || \
-                       network_get_subnets subnets6 $iface || continue
+               network_get_subnets subnets $iface
+               network_get_subnets6 subnets6 $iface
                for subnet in $subnets $subnets6; do
                        echo allow $subnet
                done
diff --git a/net/chrony/patches/002-undefined_MIN.patch b/net/chrony/patches/002-undefined_MIN.patch
new file mode 100644 (file)
index 0000000..9381b8d
--- /dev/null
@@ -0,0 +1,10 @@
+--- a/hash_intmd5.c
++++ b/hash_intmd5.c
+@@ -29,6 +29,7 @@
+ #include "sysincl.h"
+ #include "hash.h"
+ #include "memory.h"
++#include "util.h"
+ #include "md5.c"
index b54649198a449eaf22028c2e774f3e8c9dc2c402..ea6ac0981dc930003f8d8e15afa6f44bd94124a3 100644 (file)
@@ -8,16 +8,17 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=clamav
-PKG_VERSION:=0.100.1
+PKG_VERSION:=0.100.2
 PKG_RELEASE:=1
 
 PKG_LICENSE:=GPL-2.0
 PKG_MAINTAINER:=Marko Ratkaj <marko.ratkaj@sartura.hr> \
                Lucian Cristian <lucian.cristian@gmail.com>
+PKG_CPE_ID:=cpe:/a:clamav:clamav
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://www.clamav.net/downloads/production/
-PKG_HASH:=84e026655152247de7237184ee13003701c40be030dd68e0316111049f58a59f
+PKG_HASH:=4a2e4f0cd41e62adb5a713b4a1857c49145cd09a69957e6d946ecad575206dd6
 
 PKG_BUILD_PARALLEL:=1
 PKG_INSTALL:=1
@@ -27,11 +28,11 @@ include $(INCLUDE_DIR)/package.mk
 
 define Package/clamav/Default
   SECTION:=net
-  DEPENDS:=+libpthread +uclibcxx +zlib +libcurl +libjson-c +libopenssl +libltdl +libpcre2 +USE_MUSL:musl-fts
+  DEPENDS:=+libpthread +uclibcxx +zlib +libcurl +libjson-c +libmilter-sendmail +libopenssl +libltdl +libpcre2 +USE_MUSL:musl-fts
   CATEGORY:=Network
   SUBMENU:=Web Servers/Proxies
   TITLE:=ClamAV
-  URL:=http://www.clamav.net/
+  URL:=https://www.clamav.net/
 endef
 
 define Package/clamav
@@ -66,6 +67,7 @@ define Build/Configure
                --sysconfdir=/etc/clamav/ \
                --prefix=/usr/ \
                --exec-prefix=/usr/ \
+               --enable-milter \
                --disable-xml \
                --disable-bzip2 \
                --with-user nobody \
@@ -87,6 +89,7 @@ endef
 define Package/clamav/install
        $(INSTALL_DIR) $(1)/usr/sbin
        $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/clamd $(1)/usr/sbin/
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/clamav-milter $(1)/usr/sbin/
        $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/clamav-config $(1)/usr/sbin/
        $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/clambc $(1)/usr/sbin/
        $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/clamconf $(1)/usr/sbin/
index 5c8f460262c6256c959d9f1033f941fc792ecd2a..4afc1a2705a1c1876bcb2b4b120b22ece8f18a30 100644 (file)
@@ -12,7 +12,7 @@ PKG_VERSION:=1.4
 PKG_MAINTAINER:=Jaehoon You <teslamint@gmail.com>
 PKG_LICENSE:=GPL-2.0+
 PKG_LICENSE_FILES:=COPYING
-PKG_RELEASE:=6
+PKG_RELEASE:=7
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://codeload.github.com/coova/coova-chilli/tar.gz/$(PKG_VERSION)?
@@ -108,6 +108,7 @@ define Build/Configure
        $(if $(CONFIG_COOVACHILLI_USERAGENT),--enable,--disable)-useragent \
        $(if $(CONFIG_COOVACHILLI_LARGELIMITS),--enable,--disable)-largelimits \
        $(if $(CONFIG_COOVACHILLI_UAMDOMAINFILE),--enable,--disable)-uamdomainfile \
+       $(if $(CONFIG_IPV6),--with,--without)-ipv6 \
        $(if $(CONFIG_COOVACHILLI_CYASSL),--with,--without)-cyassl \
        $(if $(CONFIG_COOVACHILLI_OPENSSL),--with,--without)-openssl \
        $(if $(CONFIG_PACKAGE_kmod-ipt-coova),--with-nfcoova) \
index f8d449b2d66d8d13a590dbdf27cd17944bf8d6d9..a4b67d9b1c93745a8cdad0a6b85eb8d8ca8a0089 100644 (file)
@@ -8,15 +8,15 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=cshark
-PKG_VERSION=2015-11-24-$(PKG_SOURCE_VERSION)
-PKG_RELEASE=3
+PKG_VERSION=2018-08-20-$(PKG_SOURCE_VERSION)
+PKG_RELEASE=1
 
 PKG_SOURCE_PROTO:=git
 PKG_SOURCE_URL:=https://github.com/cloudshark/cshark.git
 PKG_SOURCE_SUBDIR=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=e575ab3d35d75a6f70488001fcba45690ebe9b3e
+PKG_SOURCE_VERSION:=7a7cf7f35074b85c6fb0c52067e640d2433ef73b
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.xz
-PKG_MIRROR_HASH:=280d2711308a5b051a43788519ae6857394690d3155fe954388c43cd9035ec84
+PKG_MIRROR_HASH:=bc448bb4e910e771a5a8a39af7cfa09a79b59c595f15cdcae9d0103ce09be019
 
 PKG_BUILD_PARALLEL:=1
 PKG_INSTALL:=1
index 379c2600a718ec850a33e2bc3df2b3f84debf134..bf00a78194f03501c4690b8b991663ebb29bd2b1 100644 (file)
@@ -1,6 +1,4 @@
 #
-# Copyright (C) 2007-2016 OpenWrt.org
-#
 # This is free software, licensed under the GNU General Public License v2.
 # See /LICENSE for more information.
 #
@@ -9,7 +7,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=darkstat
 PKG_VERSION:=3.0.719
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 PKG_MAINTAINER:=Jean-Michel Lacroix <lacroix@lepine-lacroix.info>
 
@@ -27,7 +25,7 @@ include $(INCLUDE_DIR)/package.mk
 define Package/darkstat
   SECTION:=net
   CATEGORY:=Network
-  DEPENDS:=+libpcap +zlib +USE_GLIBC:libbsd
+  DEPENDS:=+libpcap +zlib
   TITLE:=Network bandwidth monitor
   URL:=http://unix4lyfe.org/darkstat/
 endef
@@ -46,7 +44,10 @@ CONFIGURE_ARGS += \
        --disable-debug \
        --with-chroot-dir=/var/empty
 
-TARGET_CFLAGS += -std=gnu99
+CONFIGURE_VARS += \
+       ac_cv_search_setproctitle=no \
+       ac_cv_search_strlcpy=no \
+       ac_cv_search_strlcat=no
 
 define Build/Compile
        $(HOSTCC) $(PKG_BUILD_DIR)/static/c-ify.c \
index baca88e4ac8e6e2c18ec82d0873877eaa1383e3b..aa57c4fcb9fe74e63cda4782bfb1be54b371010b 100755 (executable)
@@ -12,7 +12,7 @@ PKG_NAME:=ddns-scripts
 PKG_VERSION:=2.7.8
 # Release == build
 # increase on changes of services files or tld_names.dat
-PKG_RELEASE:=2
+PKG_RELEASE:=5
 
 PKG_LICENSE:=GPL-2.0
 PKG_MAINTAINER:=
index 36beedb1dac70b0719396e66f9b38ba49e59bf51..6583344808f9556eb9da3e013153dfbc97fc9898 100755 (executable)
@@ -21,7 +21,7 @@
 . /lib/functions/network.sh
 
 # GLOBAL VARIABLES #
-VERSION="2.7.8-1"
+VERSION="2.7.8-5"
 SECTION_ID=""          # hold config's section name
 VERBOSE=0              # default mode is log to console, but easily changed with parameter
 MYPROG=$(basename $0)  # my program call name
@@ -85,7 +85,7 @@ WGET_SSL=$(which wget-ssl)
 
 CURL=$(which curl)
 # CURL_SSL not empty then SSL support available
-CURL_SSL=$($(which curl) -V 2>/dev/null | grep "Protocols:" | grep -F "https")
+CURL_SSL=$($CURL -V 2>/dev/null | grep -F "https")
 # CURL_PROXY not empty then Proxy support available
 CURL_PROXY=$(find /lib /usr/lib -name libcurl.so* -exec strings {} 2>/dev/null \; | grep -im1 "all_proxy")
 
@@ -282,11 +282,11 @@ write_log() {
        [ $__LEVEL -eq 7 ] && return    # no syslog for debug messages
        __CMD=$(echo -e "$__CMD" | tr -d '\n' | tr '\t' '     ')        # remove \n \t chars
        [ $__EXIT  -eq 1 ] && {
-               $__CMD          # force syslog before exit
+               eval "$__CMD"   # force syslog before exit
                exit 1
        }
        [ $use_syslog -eq 0 ] && return
-       [ $((use_syslog + __LEVEL)) -le 7 ] && $__CMD
+       [ $((use_syslog + __LEVEL)) -le 7 ] && eval "$__CMD"
 
        return
 }
@@ -301,32 +301,12 @@ write_log() {
 urlencode() {
        # $1    Name of Variable to store encoded string to
        # $2    string to encode
-       local __STR __LEN __CHAR __OUT
-       local __ENC=""
-       local __POS=1
+       local __ENC
 
        [ $# -ne 2 ] && write_log 12 "Error calling 'urlencode()' - wrong number of parameters"
 
-       __STR="$2"              # read string to encode
-       __LEN=${#__STR}         # get string length
-
-       while [ $__POS -le $__LEN ]; do
-               # read one chat of the string
-               __CHAR=$(expr substr "$__STR" $__POS 1)
-
-               case "$__CHAR" in
-                       [-_.~a-zA-Z0-9] )
-                               # standard char
-                               __OUT="${__CHAR}"
-                               ;;
-                       * )
-                               # special char get %hex code
-                              __OUT=$(printf '%%%02x' "'$__CHAR" )
-                               ;;
-               esac
-               __ENC="${__ENC}${__OUT}"        # append to encoded string
-               __POS=$(( $__POS + 1 ))         # increment position
-       done
+       __ENC="$(awk -v str="$2" 'BEGIN{ORS="";for(i=32;i<=127;i++)lookup[sprintf("%c",i)]=i
+               for(k=1;k<=length(str);++k){enc=substr(str,k,1);if(enc!~"[-_.~a-zA-Z0-9]")enc=sprintf("%%%02x", lookup[enc]);print enc}}')"
 
        eval "$1=\"$__ENC\""    # transfer back to variable
        return 0
@@ -543,10 +523,7 @@ verify_host_port() {
                        __RUNPROG="$NSLOOKUP $__HOST >$DATFILE 2>$ERRFILE"
                fi
                write_log 7 "#> $__RUNPROG"
-               (
-                       set -o noglob
-                       eval $__RUNPROG
-               )
+               eval $__RUNPROG
                __ERR=$?
                # command error
                [ $__ERR -gt 0 ] && {
@@ -599,10 +576,7 @@ verify_host_port() {
        if [ -n "$__NCEXT" ]; then      # BusyBox nc compiled with extensions (timeout support)
                __RUNPROG="$__NC -w 1 $__IP $__PORT </dev/null >$DATFILE 2>$ERRFILE"
                write_log 7 "#> $__RUNPROG"
-               (
-                       set -o noglob
-                       eval $__RUNPROG
-               )
+               eval $__RUNPROG
                __ERR=$?
                [ $__ERR -eq 0 ] && return 0
                write_log 3 "Connect error - BusyBox nc (netcat) Error '$__ERR'"
@@ -611,10 +585,7 @@ verify_host_port() {
        else            # nc compiled without extensions (no timeout support)
                __RUNPROG="timeout 2 -- $__NC $__IP $__PORT </dev/null >$DATFILE 2>$ERRFILE"
                write_log 7 "#> $__RUNPROG"
-               (
-                       set -o noglob
-                       eval $__RUNPROG
-               )
+               eval $__RUNPROG
                __ERR=$?
                [ $__ERR -eq 0 ] && return 0
                write_log 3 "Connect error - BusyBox nc (netcat) timeout Error '$__ERR'"
@@ -733,7 +704,7 @@ do_transfer() {
                        local __BINDIP
                        # set correct program to detect IP
                        [ $use_ipv6 -eq 0 ] && __RUNPROG="network_get_ipaddr" || __RUNPROG="network_get_ipaddr6"
-                       ( set -o noglob ; eval "$__RUNPROG __BINDIP $bind_network" ) || \
+                       eval "$__RUNPROG __BINDIP $bind_network" || \
                                write_log 13 "Can not detect local IP using '$__RUNPROG $bind_network' - Error: '$?'"
                        write_log 7 "Force communication via IP '$__BINDIP'"
                        __PROG="$__PROG --bind-address=$__BINDIP"
@@ -857,10 +828,7 @@ do_transfer() {
 
        while : ; do
                write_log 7 "#> $__RUNPROG"
-               (
-                       set -o noglob
-                       eval $__RUNPROG                 # DO transfer
-               )
+               eval $__RUNPROG                 # DO transfer
                __ERR=$?                        # save error code
                [ $__ERR -eq 0 ] && return 0    # no error leave
                [ -n "$LUCI_HELPER" ] && return 1       # no retry if called by LuCI helper script
@@ -940,15 +908,15 @@ get_local_ip () {
        write_log 7 "Detect local IP on '$ip_source'"
 
        while : ; do
-               if [ -n "$ip_network" ]; then
+               if [ -n "$ip_network" -a "$ip_source" = "network" ]; then
                        # set correct program
                        network_flush_cache     # force re-read data from ubus
                        [ $use_ipv6 -eq 0 ] && __RUNPROG="network_get_ipaddr" \
                                            || __RUNPROG="network_get_ipaddr6"
-                       ( set -o noglob ; eval "$__RUNPROG __DATA $ip_network" ) || \
+                       eval "$__RUNPROG __DATA $ip_network" || \
                                write_log 13 "Can not detect local IP using $__RUNPROG '$ip_network' - Error: '$?'"
                        [ -n "$__DATA" ] && write_log 7 "Local IP '$__DATA' detected on network '$ip_network'"
-               elif [ -n "$ip_interface" ]; then
+               elif [ -n "$ip_interface" -a "$ip_source" = "interface" ]; then
                        local __DATA4=""; local __DATA6=""
                        if [ -n "$(which ip)" ]; then           # ip program installed
                                write_log 7 "#> ip -o addr show dev $ip_interface scope global >$DATFILE 2>$ERRFILE"
@@ -1027,12 +995,9 @@ get_local_ip () {
                        fi
                        [ $use_ipv6 -eq 0 ] && __DATA="$__DATA4" || __DATA="$__DATA6"
                        [ -n "$__DATA" ] && write_log 7 "Local IP '$__DATA' detected on interface '$ip_interface'"
-               elif [ -n "$ip_script" ]; then
+               elif [ -n "$ip_script" -a "$ip_source" = "script" ]; then
                        write_log 7 "#> $ip_script >$DATFILE 2>$ERRFILE"
-                       (
-                               set -o noglob
-                               eval $ip_script >$DATFILE 2>$ERRFILE
-                       )
+                       eval $ip_script >$DATFILE 2>$ERRFILE
                        __ERR=$?
                        if [ $__ERR -eq 0 ]; then
                                __DATA=$(cat $DATFILE)
@@ -1041,7 +1006,7 @@ get_local_ip () {
                                write_log 3 "$ip_script Error: '$__ERR'"
                                write_log 7 "$(cat $ERRFILE)"           # report error
                        fi
-               elif [ -n "$ip_url" ]; then
+               elif [ -n "$ip_url" -a "$ip_source" = "web" ]; then
                        do_transfer "$ip_url"
                        # use correct regular expression
                        [ $use_ipv6 -eq 0 ] \
@@ -1172,10 +1137,7 @@ get_registered_ip() {
 
        while : ; do
                write_log 7 "#> $__RUNPROG"
-               (
-                       set -o noglob
-                       eval $__RUNPROG
-               )
+               eval $__RUNPROG
                __ERR=$?
                if [ $__ERR -ne 0 ]; then
                        write_log 3 "$__PROG error: '$__ERR'"
index 6b9b029e0a775edc11cbf48dad128671ca2588e2..a7d4dfb64ae6aaafefb3bfceeca2113f96ea8e1e 100644 (file)
@@ -1,46 +1,44 @@
 #!/bin/sh
-#.Distributed under the terms of the GNU General Public License (GPL) version 2.0
-#.based on Yuval Adam's route53.sh found at https://github.com/yuvadm/route53-ddns/blob/master/route53.sh
-#.2017 Max Berger <max at berger dot name>
-[ -z "$CURL_SSL" ] && write_log 14 "Amazon AWS Route53 communication require cURL with SSL support. Please install"
-[ -z "$username" ] && write_log 14 "Service section not configured correctly! Missing key as 'username'"
-[ -z "$password" ] && write_log 14 "Service section not configured correctly! Missing secret as 'password'"
-[ -z "$domain" ] && write_log 14 "Service section not configured correctly! Missing zone id as 'domain'"
+# Distributed under the terms of the GNU General Public License (GPL) version 2.0
+# based on Yuval Adam's route53.sh found at https://github.com/yuvadm/route53-ddns/blob/master/route53.sh
+# 2017 Max Berger <max at berger dot name>
 
-set -euo pipefail
-IFS=$'\n\t'
+[ -z "${CURL_SSL}" ] && write_log 14 "Amazon AWS Route53 communication require cURL with SSL support. Please install"
+[ -z "{$username}" ] && write_log 14 "Service section not configured correctly! Missing key as 'username'"
+[ -z "${password}" ] && write_log 14 "Service section not configured correctly! Missing secret as 'password'"
+[ -z "${domain}" ] && write_log 14 "Service section not configured correctly! Missing zone id as 'domain'"
 
 ENDPOINT="route53.amazonaws.com"
 RECORD_TTL=300
-RECORD_NAME="$lookup_host".
-[ $use_ipv6 -eq 0 ] && RECORD_TYPE="A"
-[ $use_ipv6 -eq 1 ] && RECORD_TYPE="AAAA"
-RECORD_VALUE="$LOCAL_IP"
-HOSTED_ZONE_ID="$domain"
+RECORD_NAME="${lookup_host}."
+[ ${use_ipv6} -eq 0 ] && RECORD_TYPE="A"
+[ ${use_ipv6} -eq 1 ] && RECORD_TYPE="AAAA"
+RECORD_VALUE="${LOCAL_IP}"
+HOSTED_ZONE_ID="${domain}"
 API_PATH="/2013-04-01/hostedzone/${HOSTED_ZONE_ID}/rrset/"
 
-AWS_ACCESS_KEY_ID="$username"
-AWS_SECRET_ACCESS_KEY="$password"
+AWS_ACCESS_KEY_ID="${username}"
+AWS_SECRET_ACCESS_KEY="${password}"
 AWS_REGION='us-east-1'
 AWS_SERVICE='route53'
 
 hash() {
-    msg=$1
-    echo -en "$msg" | openssl dgst -sha256 | sed 's/^.* //'
+    msg="$1"
+    echo -en "${msg}" | openssl dgst -sha256 | sed 's/^.* //'
 }
 
 sign_plain() {
     # Sign message using a plaintext key
-    key=$1
-    msg=$2
-    echo -en "$msg" | openssl dgst -hex -sha256 -hmac "$key" | sed 's/^.* //'
+    key="$1"
+    msg="$2"
+    echo -en "${msg}" | openssl dgst -hex -sha256 -hmac "${key}" | sed 's/^.* //'
 }
 
 sign() {
     # Sign message using a hex formatted key
-    key=$1
-    msg=$2
-    echo -en "$msg" | openssl dgst -hex -sha256 -mac HMAC -macopt "hexkey:${key}" | sed 's/^.* //'
+    key="$1"
+    msg="$2"
+    echo -en "${msg}" | openssl dgst -hex -sha256 -mac HMAC -macopt "hexkey:${key}" | sed 's/^.* //'
 }
 
 request_body="<?xml version=\"1.0\" encoding=\"UTF-8\"?> \
@@ -64,34 +62,34 @@ request_body="<?xml version=\"1.0\" encoding=\"UTF-8\"?> \
 </ChangeBatch> \
 </ChangeResourceRecordSetsRequest>"
 
-fulldate=$(date --utc +%Y%m%dT%H%M%SZ)
-shortdate=$(date --utc +%Y%m%d)
+fulldate="$(date --utc +%Y%m%dT%H%M%SZ)"
+shortdate="$(date --utc +%Y%m%d)"
 signed_headers="host;x-amz-date"
-request_hash=$(hash "$request_body")
+request_hash="$(hash "${request_body}")"
 canonical_request="POST\n${API_PATH}\n\nhost:route53.amazonaws.com\nx-amz-date:${fulldate}\n\n${signed_headers}\n${request_hash}"
 
-date_key=$(sign_plain "AWS4${AWS_SECRET_ACCESS_KEY}" "${shortdate}")
-region_key=$(sign "$date_key" $AWS_REGION)
-service_key=$(sign "$region_key" $AWS_SERVICE)
-signing_key=$(sign "$service_key" aws4_request)
+date_key="$(sign_plain "AWS4${AWS_SECRET_ACCESS_KEY}" "${shortdate}")"
+region_key="$(sign "${date_key}" ${AWS_REGION})"
+service_key="$(sign "${region_key}" ${AWS_SERVICE})"
+signing_key="$(sign "${service_key}" aws4_request)"
 
 credential="${shortdate}/${AWS_REGION}/${AWS_SERVICE}/aws4_request"
-sigmsg="AWS4-HMAC-SHA256\n${fulldate}\n${credential}\n$(hash "$canonical_request")"
+sigmsg="AWS4-HMAC-SHA256\n${fulldate}\n${credential}\n$(hash "${canonical_request}")"
 
-signature=$(sign "$signing_key" "$sigmsg")
+signature="$(sign "${signing_key}" "${sigmsg}")"
 
 authorization="AWS4-HMAC-SHA256 Credential=${AWS_ACCESS_KEY_ID}/${credential}, SignedHeaders=${signed_headers}, Signature=${signature}"
 
-ANSWER=$(curl \
+ANSWER="$(curl \
     -X "POST" \
     -H "Host: route53.amazonaws.com" \
     -H "X-Amz-Date: ${fulldate}" \
     -H "Authorization: ${authorization}" \
     -H "Content-Type: text/xml" \
     -d "$request_body" \
-    "https://${ENDPOINT}${API_PATH}")
+    "https://${ENDPOINT}${API_PATH}")"
 write_log 7 "${ANSWER}"
 
-echo ${ANSWER} | grep Error >/dev/null && return 1
-echo ${ANSWER} | grep ChangeInfo >/dev/null && return 0
+echo "${ANSWER}" | grep -F "Error" >/dev/null && return 1
+echo "${ANSWER}" | grep -F "ChangeInfo" >/dev/null && return 0
 return 2
index 0b6f6ed9b2dd3cda3276f43b1a1798eeb4fe2521..76671b3cbadbcaad43b3d93744b9b5210ede0c57 100644 (file)
@@ -8,7 +8,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=dmapd
-PKG_VERSION:=0.0.75
+PKG_VERSION:=0.0.77
 PKG_RELEASE:=1
 
 PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org>
@@ -18,7 +18,7 @@ PKG_LICENSE_FILES:=COPYING
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://www.flyn.org/projects/dmapd
-PKG_HASH:=f296a5ba02eae36a41381d19d5d08f2b9b7657091db9674f82121cd26c2893a1
+PKG_HASH:=2ffadffaba3bf680ade3ab851132a1b0d596f7a9dd9cdc7fc8bfbabacc7fab8d
 
 PKG_FIXUP:=autoreconf
 PKG_INSTALL:=2
index 82fcb70c32794b50f8a2ef8273415fb0caf854f6..d159ffd2c6b38aa1b9a00c96e84a6d981cb0c3c5 100644 (file)
@@ -1,5 +1,5 @@
 #
-# Copyright (C) 2015-2016 Thomas Weißschuh
+# Copyright (C) 2015-2018 Thomas Weißschuh
 #
 # This is free software, licensed under the GNU General Public License v2.
 # See /LICENSE for more information.
@@ -8,7 +8,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=esniper
-PKG_VERSION:=2.33.0
+PKG_VERSION:=2.35.0
 PKG_RELEASE:=1
 PKG_LICENSE:=BSD-2-Clause
 PKG_LICENSE_FILES:=COPYING
@@ -19,7 +19,7 @@ VERSION_TRANSFORMED:=$(subst .,-,$(PKG_VERSION))
 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(VERSION_TRANSFORMED)
 PKG_SOURCE:=$(PKG_NAME)-$(VERSION_TRANSFORMED).tgz
 PKG_SOURCE_URL:=@SF/$(PKG_NAME)
-PKG_HASH:=c9b8b10aefe5c397d7dee4c569f87f227c6710de528b1dc402379e5b4f1793dd
+PKG_HASH:=a93d4533e31640554f2e430ac76b43e73a50ed6d721511066020712ac8923c12
 
 PKG_BUILD_PARALLEL:=1
 
index bbc5643083975cb1b3036f671c7209aaab2cbb00..4350c35cc71c84d0589ce7468727e283498956eb 100644 (file)
@@ -8,21 +8,21 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=fwknop
-PKG_VERSION:=2.6.9
-PKG_RELEASE:=5
+PKG_VERSION:=2.6.10
+PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
-PKG_SOURCE_URL:=http://www.cipherdyne.org/fwknop/download
-PKG_HASH:=5bf47fe1fd30e862d29464f762c0b8bf89b5e298665c37624d6707826da956d4
+PKG_SOURCE_URL:=https://www.cipherdyne.org/fwknop/download
+PKG_HASH:=f6c09bec97ed8e474a98ae14f9f53e1bcdda33393f20667b6af3fb6bb894ca77
 PKG_MAINTAINER:=Jonathan Bennett <JBennett@incomsystems.biz>
-PKG_LICENSE:=GPLv2
+PKG_LICENSE:=GPLv2+
 PKG_INSTALL:=1
 
 include $(INCLUDE_DIR)/package.mk
 
 define Package/fwknop/Default
   TITLE:=FireWall KNock OPerator
-  URL:=http://www.cipherdyne.org/fwknop/
+  URL:=https://www.cipherdyne.org/fwknop/
 endef
 
 define Package/fwknop/Default/description
index 961978f6ff4b403f20ca1ee5e954694b807068ae..9ab190891490a1e36fc3e9ecf74898749689f38e 100644 (file)
@@ -11,12 +11,12 @@ PKG_LICENSE:=ASL-2.0
 PKG_MAINTAINER:=Mislav Novakovic <mislav.novakovic@sartura.hr>
 
 PKG_NAME:=go-ethereum
-PKG_VERSION:=1.8.13
+PKG_VERSION:=1.8.15
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://codeload.github.com/ethereum/go-ethereum/tar.gz/v${PKG_VERSION}?
-PKG_HASH:=c0c211172c1bc80855d19387300321fe233708bf8af1e4839ccf3b7de447bfb1
+PKG_HASH:=5081f21ab53f7eb9b84dbed32c4b58bb1c59a61163a6efaa0e4a8de764177c62
 
 PKG_BUILD_DEPENDS:=golang/host
 PKG_BUILD_PARALLEL:=1
index 32e4121628c8a9088b0607735707e9af01c1d216..6643ed2788e42c2d11bb6f66bab202fa47ee27c3 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=git
-PKG_VERSION:=2.18.0
+PKG_VERSION:=2.19.1
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=@KERNEL/software/scm/git/
-PKG_HASH:=8b40be383a603147ae29337136c00d1c634bdfdc169a30924a024596a7e30e92
+PKG_HASH:=345056aa9b8084280b1b9fe1374d232dec05a34e8849028a20bfdb56e920dbb5
 
 PKG_INSTALL:=1
 PKG_BUILD_PARALLEL:=1
@@ -44,7 +44,7 @@ endef
 
 define Package/git-http
 $(call Package/git/Default)
-  DEPENDS+= +git +libcurl +ca-certificates
+  DEPENDS+= +git +libcurl
   TITLE:=Git HTTP commands
 endef
 
@@ -106,14 +106,11 @@ define Build/Compile
 endef
 
 define Package/git/install
-       $(INSTALL_DIR) $(1)/usr/bin
-       $(CP) $(PKG_INSTALL_DIR)/usr/bin/git $(1)/usr/bin
        $(RM) $(PKG_INSTALL_DIR)/usr/bin/git-cvsserver
+       $(RM) $(PKG_INSTALL_DIR)/usr/bin/git-shell
+       $(INSTALL_DIR) $(1)/usr/bin
        $(CP) $(PKG_INSTALL_DIR)/usr/bin/git-* $(1)/usr/bin
        $(INSTALL_DIR) $(1)/usr/lib/git-core
-       ln $(1)/usr/bin/git $(1)/usr/lib/git-core/git
-       ln $(1)/usr/bin/git-shell $(1)/usr/lib/git-core/git-shell
-       ln $(1)/usr/bin/git-upload-pack $(1)/usr/lib/git-core/git-upload-pack
        $(INSTALL_DIR) $(1)/usr/share/git-core/templates
        ( cd $(PKG_INSTALL_DIR); $(TAR) \
                --exclude=usr/lib/git-core/git-http-backend \
@@ -122,13 +119,12 @@ define Package/git/install
                --exclude=usr/lib/git-core/git-remote-ftps \
                --exclude=usr/lib/git-core/git-remote-http \
                --exclude=usr/lib/git-core/git-remote-https \
-               --exclude=usr/lib/git-core/git \
-               --exclude=usr/lib/git-core/git-shell \
-               --exclude=usr/lib/git-core/git-upload-pack \
                -cf - \
                usr/lib/git-core \
                usr/share/git-core/templates \
        ) | ( cd $(1); $(TAR) -xf - )
+       ln $(1)/usr/lib/git-core/git $(1)/usr/bin/git
+       ln $(1)/usr/lib/git-core/git-shell $(1)/usr/bin/git-shell
 endef
 
 define Package/git-http/install
index da592202bb81f3a16947980b267fbbf0543c2374..75268a48fc45a6610348685c4b5c5e25c7c903c5 100644 (file)
@@ -1,6 +1,6 @@
 --- a/Makefile
 +++ b/Makefile
-@@ -1297,7 +1297,7 @@ else
+@@ -1312,7 +1312,7 @@ else
        endif
        curl_check := $(shell (echo 072200; $(CURL_CONFIG) --vernum | sed -e '/^70[BC]/s/^/0/') 2>/dev/null | sort -r | sed -ne 2p)
        ifeq "$(curl_check)" "072200"
index f966ad34a8d4f1f098ab16e2d2055f6ff29e6094..651891eaad4f9e9d1853d1d1295a6e2a89683fa5 100644 (file)
@@ -1,11 +1,11 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=gnunet
-PKG_SOURCE_VERSION:=2b99bddcb6961cfda34087138acdda4b8b9ccb9f
-PKG_MIRROR_HASH:=7b1567d4d4b316ed4b70372bbcfc2039a93d6a7bbf24c2b3036b2c7f3bccc9b4
+PKG_SOURCE_VERSION:=e0785bb1b2af91a38d161bda7a4075338579441a
+PKG_MIRROR_HASH:=4cbb9cf48f18fa87aa7c81bcff2372fc9c04c3688fb8dd4b2b57da258050179b
 
-PKG_VERSION:=0.10.2-git-20180607-$(PKG_SOURCE_VERSION)
-PKG_RELEASE:=3
+PKG_VERSION:=0.10.2-git-20181021-$(PKG_SOURCE_VERSION)
+PKG_RELEASE:=2
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
@@ -134,7 +134,7 @@ define Package/gnunet/install
        $(INSTALL_DIR) $(1)/usr/share/gnunet/config.d $(1)/usr/share/gnunet/hellos
 
        ( for bin in arm ats cadet core config ecc identity nat nat-auto nat-server nse \
-           peerinfo revocation scalarproduct statistics transport uri; do \
+           peerinfo revocation scalarproduct scrypt statistics transport uri; do \
                $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/gnunet-$$$$bin $(1)/usr/bin/ ; \
        done )
 
@@ -145,8 +145,7 @@ define Package/gnunet/install
                $(CP) $(PKG_INSTALL_DIR)/usr/lib/libgnunet$$$$lib.so* $(1)/usr/lib/ ; \
        done )
 
-       ( for plug in ats_proportional block_dht block_regex block_revocation  \
-           transport_tcp transport_udp transport_unix; do \
+       ( for plug in ats_proportional block_dht block_regex block_revocation transport_unix; do \
                $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/gnunet/libgnunet_plugin_$$$$plug*.so $(1)/usr/lib/gnunet ; \
        done )
 
@@ -195,19 +194,34 @@ CONF_conversation:=conversation
 BIN_dht-cli:=dht-get dht-put dht-monitor
 PLUGIN_dht-cli:=block_test
 
-DEPENDS_hostlist:=+libmicrohttpd +libgnurl +ca-certificates
+DEPENDS_curl:=+libgnurl +jansson
+LIB_curl:=curl
+
+DEPENDS_hostlist:=+libmicrohttpd +gnunet-curl +ca-certificates
 LIBEXEC_hostlist:=daemon-hostlist
 CONF_hostlist:=hostlist
 
-DEPENDS_transport-http_client:=+libgnurl +ca-certificates
+DEPENDS_transport-bluetooth:=+bluez-libs
+PLUGIN_transport-bluetooth:=transport_bluetooth
+LIBEXEC_transport-bluetooth:=helper-transport-bluetooth
+
+DEPENDS_transport-http_client:=+gnunet-curl +ca-certificates
 PLUGIN_transport-http_client:=transport_http_client transport_https_client
 
 DEPENDS_transport-http_server:=+libmicrohttpd
 PLUGIN_transport-http_server:=transport_http_server transport_https_server
 
+PLUGIN_transport-tcp:=transport_tcp
+
+PLUGIN_transport-udp:=transport_udp
+
 PLUGIN_transport-wlan:=transport_wlan
 LIBEXEC_transport-wlan:=helper-transport-wlan
 
+PLUGIN_transport-xt:=transport_xt
+
+PLUGIN_transport-xu:=transport_xu
+
 DEPENDS_experiments:=+libglpk
 PLUGIN_experiments:=ats_mlp ats_ril
 
@@ -226,7 +240,7 @@ CONF_fs:=fs
 
 DEPENDS_gns:=+gnunet-vpn +iptables-mod-extra
 USERID_gns:=gnunet=958:gnunetdns=452
-BIN_gns:=gns gns-import.sh namecache namestore resolver
+BIN_gns:=gns gns-import.sh namecache namestore resolver zoneimport
 LIB_gns:=gns gnsrecord namecache namestore
 PLUGIN_gns:=block_dns block_gns gnsrecord_conversation gnsrecord_dns gnsrecord_gns
 LIBEXEC_gns:=dns2gns helper-dns service-dns service-gns service-namecache service-namestore service-resolver service-zonemaster
@@ -235,7 +249,7 @@ CONF_gns:=dns gns namecache namestore resolver zonemaster
 DEPENDS_namestore-fcfsd:=+gnunet-gns +libmicrohttpd
 LIBEXEC_namestore-fcfsd:=namestore-fcfsd
 
-DEPENDS_gns-proxy:=+gnunet-gns +libgnurl +libmicrohttpd
+DEPENDS_gns-proxy:=+gnunet-gns +gnunet-curl +libmicrohttpd
 LIBEXEC_gns-proxy:=gns-proxy
 
 DEPENDS_datastore:=+gnunet-gns
@@ -250,8 +264,8 @@ LIBEXEC_peerstore:=service-peerstore
 CONF_peerstore:=peerstore
 
 DEPENDS_rest:=+gnunet-gns +gnunet-social +libmicrohttpd +jansson
-LIB_rest:=rest json jsonapi jsonapiutils
-PLUGIN_rest:=rest_gns rest_identity rest_identity_provider rest_namestore
+LIB_rest:=rest json
+PLUGIN_rest:=rest_copying rest_gns rest_identity rest_namestore rest_peerinfo rest_openid_connect rest_reclaim
 LIBEXEC_rest:=rest-server
 CONF_rest:=rest
 
@@ -260,18 +274,18 @@ LIB_rps:=rps
 LIBEXEC_rps:=service-rps
 CONF_rps:=rps
 
-DEPENDS_social:=+gnunet-gns +libmicrohttpd +jansson
-BIN_social:=identity-token multicast social
-LIB_social:=consensus identityprovider multicast psyc psycstore psycutil secretsharing social
-LIBEXEC_social:=service-consensus service-evil-consensus service-identity-provider service-multicast service-psyc service-psycstore service-secretsharing service-social
-CONF_social:=consensus multicast psyc psycstore secretsharing social
-PLUGINS_social:=block_consensus
+DEPENDS_social:=+gnunet-gns +libmicrohttpd +jansson +libpbc +libgabe
+BIN_social:=credential identity-token multicast reclaim social
+LIB_social:=abe consensus credential identityprovider multicast psyc psycstore psycutil reclaim reclaimattribute secretsharing social
+LIBEXEC_social:=service-consensus service-credential service-evil-consensus service-identity-provider service-multicast service-psyc service-psycstore service-reclaim service-secretsharing service-social
+CONF_social:=consensus credential multicast psyc psycstore reclaim secretsharing social
+PLUGIN_social:=block_consensus gnsrecord_credential gnsrecord_reclaim reclaim_attribute_gnuid
 
 PLUGIN_dhtcache-heap:=datacache_heap
 CONFLICTS_dhtcache-heap:=gnunet-dhtcache-pgsql gnunet-dhtcache-sqlite
 
 DEPENDS_gns-flat:=+gnunet-gns
-PLUGIN_gns-flat:=namecache_flat namestore_flat
+PLUGIN_gns-flat:=namecache_flat namestore_heap
 
 DEPENDS_peerstore-flat:=+gnunet-peerstore
 PLUGIN_peerstore-flat:=peerstore_flat
@@ -327,12 +341,9 @@ PLUGIN_dhtcache-sqlite:=datacache_sqlite
 DEPENDS_fs-sqlite:=+gnunet-datastore +gnunet-sqlite
 PLUGIN_fs-sqlite:=datastore_sqlite
 
-DEPENDS_social-sqlite:=+gnunet-social  +gnunet-sqlite
-PLUGIN_social-sqlite:=psycstore_sqlite
+DEPENDS_social-sqlite:=+gnunet-social +gnunet-sqlite
+PLUGIN_social-sqlite:=psycstore_sqlite reclaim_sqlite
 
-DEPENDS_transport-bluetooth:=+bluez-libs
-PLUGIN_transport-bluetooth:=transport_bluetooth
-LIBEXEC_transport-bluetooth:=helper-transport-bluetooth
 
 DEPENDS_utils:=+certtool +openssl-util
 BIN_utils:=gns-proxy-setup-ca transport-certificate-creation
@@ -390,6 +401,7 @@ $(eval $(call PostInstFixSUIDPerms,gnunet-vpn))
 
 $(eval $(call BuildPackage,gnunet))
 $(eval $(call BuildComponent,conversation,conversation component,))
+$(eval $(call BuildComponent,curl,cURL wrapper component,))
 $(eval $(call BuildComponent,datastore,data storage components,))
 $(eval $(call BuildComponent,dht-cli,DHT command line clients,))
 # $(eval $(call BuildComponent,dv,distance-vector routing component,y))
@@ -424,6 +436,10 @@ $(eval $(call BuildComponent,social-sqlite,libsqlite3 social plugins,))
 $(eval $(call BuildComponent,transport-bluetooth,bluetooth transport,))
 $(eval $(call BuildComponent,transport-http_client,HTTP/HTTPS client transport,y))
 $(eval $(call BuildComponent,transport-http_server,HTTP/HTTPS server transport,))
+$(eval $(call BuildComponent,transport-tcp,TCP transport,y))
+$(eval $(call BuildComponent,transport-udp,UDP transport,y))
 $(eval $(call BuildComponent,transport-wlan,WLAN transport,y))
+$(eval $(call BuildComponent,transport-xt,xt transport,))
+$(eval $(call BuildComponent,transport-xu,xu transport,))
 $(eval $(call BuildComponent,utils,administration utililties,))
 $(eval $(call BuildComponent,vpn,vpn components,y))
index a861291b45ad1d9bcfff79db4062faeaf6de2a0c..f37228dd7c7bb7da4406ad6a17f2e539da5f2793 100644 (file)
@@ -4,10 +4,10 @@ uci -q get gnunet.namestore || uci set gnunet.namestore=gnunet-config
 uci -q get gnunet.namecache || uci set gnunet.namecache=gnunet-config
 
 uci -q batch <<EOF
-       del gnunet.namestore_flat
-       set gnunet.namestore_flat=gnunet-config
-       set gnunet.namestore_flat.FILENAME=/etc/gnunet/namestore.flat
-       set gnunet.namestore.DATABASE=flat
+       del gnunet.namestore_heap
+       set gnunet.namestore_heap=gnunet-config
+       set gnunet.namestore_heap.FILENAME=/etc/gnunet/namestore.flat
+       set gnunet.namestore.DATABASE=heap
        del gnunet.namecache_flat
        set gnunet.namecache_flat=gnunet-config
        set gnunet.namecache_flat.FILENAME=/var/run/gnunet/namecache.flat
index 2adb037c181aee7f907346cd215ac1319ed0f7af..75a27f3e8ceb27946ca27ea8ea67b66c3a9cf0b9 100644 (file)
@@ -8,13 +8,16 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=gnurl
-PKG_VERSION:=7.57.0
+PKG_VERSION:=7.61.1
 PKG_RELEASE:=2
 
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
-PKG_SOURCE_URL:=https://gnunet.org/sites/default/files
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_URL:=git://git.taler.net/gnurl
+PKG_SOURCE_VERSION:=64adbb00957f178bb7b9b1dbf0d0de1f5c45949d
 
-PKG_HASH:=2ccd2a641a9815df924b6a79ee47d12a27ee43bd05a3c6ba958108564580d3b7
+PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
+PKG_MIRROR_HASH:=6f6c993a13fe30989cb918c987604ca96c178f4bb682c298ab345257e4aab284
 
 PKG_LICENSE:=MIT
 PKG_LICENSE_FILES:=COPYING
@@ -57,6 +60,7 @@ CONFIGURE_ARGS += \
        --enable-shared \
        --enable-static \
        --without-axtls \
+       --without-brotli \
        --without-libssh2 \
        --without-libmetalink \
        --without-winidn \
@@ -64,13 +68,16 @@ CONFIGURE_ARGS += \
        --without-nghttp2 \
        --without-nss \
        --without-cyassl \
+       --without-libpsl \
        --without-polarssl \
        --without-ssl \
        --without-winssl \
        --without-darwinssl \
        --disable-ares \
        --disable-sspi \
+       --disable-crypto-auth \
        --disable-ntlm-wb \
+       --disable-tls-srp \
        --disable-ldap \
        --disable-ldaps \
        --disable-rtsp \
index 7a90da2400b280ef93771abb707bb24423cb4a57..0a0e213f48863752c29cf42098e2838ae7ca1321 100644 (file)
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=haproxy
-PKG_VERSION:=1.8.13
+PKG_VERSION:=1.8.14
 PKG_RELEASE:=1
 
 PKG_SOURCE:=haproxy-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://www.haproxy.org/download/1.8/src/
-PKG_HASH:=2bf5dafbb5f1530c0e67ab63666565de948591f8e0ee2a1d3c84c45e738220f1
+PKG_HASH:=b17e402578be85e58af7a3eac99b1f675953bea9f67af2e964cf8bdbd1bd3fdf
 
 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)
 PKG_LICENSE:=GPL-2.0
@@ -100,11 +100,7 @@ ifeq ($(CONFIG_TARGET_x86),y)
   ENABLE_REGPARM:=y
 endif
 
-ifeq ($(CONFIG_avr32),y)
-  LINUX_TARGET:=linux26
-else
-  LINUX_TARGET:=linux2628
-endif
+LINUX_TARGET:=linux2628
 
 ifeq ($(BUILD_VARIANT),ssl)
        ADDON+=USE_OPENSSL=1
index 77ed6415aca2da962fb77d9b1136eef817c16fcb..4612ccdaece06ed895a1b65c5ba3bba42425ca5b 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/bash
 
 CLONEURL=http://git.haproxy.org/git/haproxy-1.8.git
-BASE_TAG=v1.8.13
+BASE_TAG=v1.8.14
 TMP_REPODIR=tmprepo
 PATCHESDIR=patches
 
index 3a8e754040ccca80692a6b5605d00c038c4c614c..6e9f8e1cdc1df94719d965fc01e7f7351fe71d54 100644 (file)
@@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=https_dns_proxy
 PKG_VERSION:=2018-04-23
-PKG_RELEASE=1
+PKG_RELEASE=3
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_MIRROR_HASH:=24b7e4238c37e646f33eee3a374f6b7beb5c167b9c5008cc13b51e5f1f3a44ea
index b124aeb9ddff97ed53d9295f4e8e97285c600782..b5b49ba66ee855e317b5da25352f9c27ba9cfc53 100644 (file)
@@ -1,8 +1,19 @@
 config https_dns_proxy
        option listen_addr '127.0.0.1'
        option listen_port '5053'
+       option bootstrap_dns '8.8.8.8,8.8.4.4'
+       option url_prefix 'https://dns.google.com/resolve?'
+       option user 'nobody'
+       option group 'nogroup'
+       option subnet_addr ''
+       option proxy_server ''
+
+config https_dns_proxy
+       option listen_addr '127.0.0.1'
+       option listen_port '5054'
+       option bootstrap_dns '1.1.1.1,1.0.0.1'
+       option url_prefix 'https://cloudflare-dns.com/dns-query?ct=application/dns-json&'
        option user 'nobody'
        option group 'nogroup'
        option subnet_addr ''
        option proxy_server ''
-       option url_prefix 'https://dns.google.com/resolve?'
index 9a5f797925f085ee9599a5c939a46782b67f2ac9..645c17aa46ca263d79f81e2327330b21eaea5824 100644 (file)
@@ -1,39 +1,37 @@
 #!/bin/sh /etc/rc.common
 
 START=80
-
 USE_PROCD=1
-PROG=/usr/sbin/https_dns_proxy
-
-start_instance() {
-       local cfg="$1"
-       local listen_addr listen_port user group
 
-       config_get listen_addr "$cfg" listen_addr
-       config_get listen_port "$cfg" listen_port
-       config_get user "$cfg" user
-       config_get group "$cfg" group
-       config_get subnet_addr "$cfg" subnet_addr
-       config_get proxy_server "$cfg" proxy_server
-       config_get url_prefix "$cfg" url_prefix
+PROG=/usr/sbin/https_dns_proxy
 
-       if [ -n "$subnet_addr" ]; then
-               subnet_param="-e $subnet_addr"
-       fi
+xappend() { param="$param $1"; }
+
+append_parm() {
+       local section="$1"
+       local option="$2"
+       local switch="$3"
+       local default="$4"
+       local _loctmp
+       config_get _loctmp "$section" "$option" "$default"
+       [ -z "$_loctmp" ] && return 0
+       xappend "$switch $_loctmp"
+}
 
-       if [ -n "$proxy_server" ]; then
-               proxy_param="-t $proxy_server"
-       fi
+start_instance() {
+       local cfg="$1" param
 
-       if [ -z "$url_prefix" ]; then
-               url_prefix="https://dns.google.com/resolve?"
-       fi
+       append_parm "$cfg" 'listen_addr' '-a' '127.0.0.1'
+       append_parm "$cfg" 'listen_port' '-p' '5053'
+       append_parm "$cfg" 'bootstrap_dns' '-b'
+       append_parm "$cfg" 'url_prefix' '-r'
+       append_parm "$cfg" 'user' '-u' 'nobody'
+       append_parm "$cfg" 'group' '-g' 'nogroup'
+       append_parm "$cfg" 'subnet_addr' '-e'
+       append_parm "$cfg" 'proxy_server' '-t'
 
        procd_open_instance
-       procd_set_param command ${PROG} \
-               -a "$listen_addr" -p "$listen_port" \
-               -u "$user" -g "$group" $subnet_param $proxy_param \
-               -r "$url_prefix"
+       procd_set_param command ${PROG} ${param}
        procd_set_param respawn
        procd_close_instance
 }
index b9fbe3ae6ee8672dab9e00a8995007c1cd113c67..6bc7da6d96f6346dca9187697eb54f79d314d096 100644 (file)
@@ -9,13 +9,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=i2pd
-PKG_VERSION:=2.19.0
+PKG_VERSION:=2.21.0
 PKG_RELEASE:=1
 PKG_BUILD_PARALLEL:=1
 
 PKG_SOURCE_URL:=https://codeload.github.com/PurpleI2P/i2pd/tar.gz/$(PKG_VERSION)?
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_HASH:=7202497ffc3db632d0f7fed93eafaf39aa75efea199705dae7d022249b069eb9
+PKG_HASH:=96c15cf7b51feacd5bb3f7032c7d961961325102574a1a4d6cb8dd794e906e5b
 PKG_LICENSE:=BSD-3-clause
 
 include $(INCLUDE_DIR)/package.mk
diff --git a/net/ipvsadm/Makefile b/net/ipvsadm/Makefile
new file mode 100644 (file)
index 0000000..88c78b3
--- /dev/null
@@ -0,0 +1,61 @@
+#
+# Copyright (C) 2016-2017 Mauro Mozzarelli
+#
+# This is free software, licensed under the GNU General Public License
+# See /LICENSE for more information.
+#
+# AUTHOR: Mauro Mozzarelli <mauro@ezplanet.org>
+#
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=ipvsadm
+PKG_VERSION:=1.29
+PKG_MAINTAINER:=Mauro Mozzarelli <mauro@ezplanet.org>, \
+               Florian Eckert <fe@dev.tdt.de>
+PKG_LICENSE:=GPL-2.0+
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
+PKG_SOURCE_URL:=https://www.kernel.org/pub/linux/utils/kernel/ipvsadm/
+PKG_HASH:=c3de4a21d90a02c621f0c72ee36a7aa27374b6f29fd4178f33fbf71b4c66c149
+
+PKG_BUILD_PARALLEL:=1
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/ipvsadm
+  SECTION:=net
+  CATEGORY:=Network
+  TITLE:=IP Virtual Server Configuration Manager
+  URL:=http://www.linuxvirtualserver.org
+  DEPENDS:= +kmod-nf-ipvs +libnl-tiny +libpopt
+endef
+
+define Package/ipvsadm/description
+  IPVS (IP Virtual Server) implements transport-layer load balancing
+  inside the Linux kernel, so called Layer-4 switching. The command line tool
+  ipvsadm is used to set up, maintain or inspect the virtual server table
+  in the Linux kernel. The Linux Virtual Server can be used to build scalable
+  network services based on a cluster of two or more nodes.
+endef
+
+TARGET_CFLAGS += \
+       -D_GNU_SOURCE \
+       -I$(STAGING_DIR)/usr/include/libnl-tiny
+
+define Build/Compile
+       CFLAGS="$(TARGET_CFLAGS)" \
+       $(MAKE) -C $(PKG_BUILD_DIR) \
+               CC="$(TARGET_CC)" \
+               LIBS="$(TARGET_LDFLAGS) -lnl-tiny -lpopt"
+endef
+
+define Package/ipvsadm/install
+       $(INSTALL_DIR) $(1)/sbin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/ipvsadm $(1)/sbin/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/ipvsadm-save $(1)/sbin/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/ipvsadm-restore $(1)/sbin/
+endef
+
+$(eval $(call BuildPackage,ipvsadm))
diff --git a/net/ipvsadm/patches/001-Makefile.patch b/net/ipvsadm/patches/001-Makefile.patch
new file mode 100644 (file)
index 0000000..e552cfc
--- /dev/null
@@ -0,0 +1,54 @@
+--- a/Makefile
++++ b/Makefile
+@@ -35,7 +35,7 @@ ARCH         = $(shell uname -m)
+ RPMSOURCEDIR  = $(shell rpm --eval '%_sourcedir')
+ RPMSPECDIR    = $(shell rpm --eval '%_specdir')
+-CC            = gcc
++BUILD_ROOT    = $(DESTDIR)
+ INCLUDE               =
+ SBIN          = $(BUILD_ROOT)/sbin
+ MANDIR                = usr/man
+@@ -46,9 +46,9 @@ INSTALL              = install
+ STATIC_LIBS   = libipvs/libipvs.a
+ ifeq "${ARCH}" "sparc64"
+-    CFLAGS = -Wall -Wunused -Wstrict-prototypes -g -m64 -pipe -mcpu=ultrasparc -mcmodel=medlow
++    CFLAGS += -Wall -Wunused -Wstrict-prototypes -g -m64 -pipe -mcpu=ultrasparc -mcmodel=medlow
+ else
+-    CFLAGS = -Wall -Wunused -Wstrict-prototypes -g
++    CFLAGS += -Wall -Wunused -Wstrict-prototypes -g
+ endif
+@@ -83,8 +83,9 @@ DEFINES              += $(shell if [ ! -f ../ip_vs.h
+ all:            libs ipvsadm
++$(STATIC_LIBS): libs
+ libs:
+-              make -C libipvs
++              $(MAKE) -C libipvs
+ ipvsadm:      $(OBJS) $(STATIC_LIBS)
+               $(CC) $(CFLAGS) -o $@ $^ $(LIBS)
+@@ -106,7 +107,7 @@ clean:
+               rm -rf debian/tmp
+               find . -name '*.[ao]' -o -name "*~" -o -name "*.orig" \
+                 -o -name "*.rej" -o -name core | xargs rm -f
+-              make -C libipvs clean
++              $(MAKE) -C libipvs clean
+ distclean:    clean
+--- a/libipvs/Makefile
++++ b/libipvs/Makefile
+@@ -1,7 +1,6 @@
+ # Makefile for libipvs
+-CC            = gcc
+-CFLAGS                = -Wall -Wunused -Wstrict-prototypes -g -fPIC
++CFLAGS                += -Wall -Wunused -Wstrict-prototypes -g -fPIC
+ ifneq (0,$(HAVE_NL))
+ CFLAGS                += -DLIBIPVS_USE_NL
+ CFLAGS                += $(shell \
diff --git a/net/ipvsadm/patches/002-save-restore.patch b/net/ipvsadm/patches/002-save-restore.patch
new file mode 100644 (file)
index 0000000..34737a2
--- /dev/null
@@ -0,0 +1,34 @@
+--- a/ipvsadm-restore
++++ b/ipvsadm-restore
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+ #      ipvsadm-restore - Restore IPVS rules
+ #
+ #      A very simple wrapper to restore IPVS rules
+@@ -11,6 +11,8 @@
+ #      This file:
+ #
+ #      ChangeLog
++#      M. Mozzarelli       :        Amended to use /bin/sh for compatibility
++#                          :        with embedded systems using busybox
+ #      Horms               :        Clear IPVS rules before adding from STDIN
+ #      Horms               :        Filter out "^#"
+ #
+--- a/ipvsadm-save
++++ b/ipvsadm-save
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+ #      ipvsadm-save - Save IPVS rules
+ #
+ #      A very simple wrapper to save IPVS rules
+@@ -12,6 +12,8 @@
+ #
+ #      ChangeLog
+ #
++#    M. Mozzarelli          :  Amended to use /bin/sh for compatibility
++#                           :  with embedded systems using busybox
+ #      Wensong Zhang          :  Added the "-n" option and the help()
+ #
index 940846b5ca4beae37d3ec3e7065f81530e136e0b..2b86918a912e441b01393b16e169ee46db7b5bdc 100644 (file)
@@ -5,28 +5,26 @@
 # See /LICENSE for more information.
 
 include $(TOPDIR)/rules.mk
+include $(INCLUDE_DIR)/kernel.mk
 
 PKG_NAME:=jool
-PKG_VERSION:=2018.01.17
+PKG_VERSION:=3.5.7
 PKG_RELEASE:=2
 
-PKG_LICENSE:=GPL-3.0
-PKG_LICENSE_FILES:=COPYING
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://codeload.github.com/NICMx/Jool/tar.gz/v$(PKG_VERSION)?
+PKG_HASH:=b8e95d1526cd2434dedbae292afd2d17f0780ac2dca2be21264712b41eb76a3d
+PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/Jool-$(PKG_VERSION)
 
-PKG_SOURCE_PROTO:=git
-PKG_SOURCE_URL:=https://github.com/NICMx/Jool.git
-PKG_SOURCE_VERSION:=9dfaf22e49f7905d94af9b73f9bee22c26d7dd4a
-PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_SOURCE_VERSION)
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_VERSION).tar.xz
-PKG_MIRROR_HASH:=79b558561f06f3df01a541b1d39b7d3d88f91d0ee6b8ce3abf91ebbed737225a
+PKG_MAINTAINER:=Dan Luedtke <mail@danrl.com>
+PKG_LICENSE:=GPL-2.0
+PKG_LICENSE_FILES:=COPYING
 
-PKG_BUILD_DIR=$(KERNEL_BUILD_DIR)/$(PKG_SOURCE_SUBDIR)
 PKG_BUILD_PARALLEL:=1
 PKG_BUILD_DEPENDS:=USE_UCLIBC:argp-standalone USE_MUSL:argp-standalone
 
 PKG_FIXUP:=autoreconf
 
-include $(INCLUDE_DIR)/kernel.mk
 include $(INCLUDE_DIR)/package.mk
 
 MAKE_PATH:=usr
@@ -54,7 +52,6 @@ define Package/jool/Default
   SECTION:=net
   CATEGORY:=Network
   URL:=https://www.jool.mx
-  MAINTAINER:=Dan Luedtke <mail@danrl.com>
 endef
 
 define Package/jool/Default/description
diff --git a/net/jool/patches/010-Add-support-for-kernel-4.17.patch b/net/jool/patches/010-Add-support-for-kernel-4.17.patch
new file mode 100644 (file)
index 0000000..be860a4
--- /dev/null
@@ -0,0 +1,76 @@
+From 831486ea6c7d7adfbdc453587a65bcba247d698b Mon Sep 17 00:00:00 2001
+From: Alberto Leiva Popper <ydahhrk@gmail.com>
+Date: Fri, 6 Jul 2018 13:19:21 -0500
+Subject: [PATCH 1/2] Add support for kernel 4.17
+
+Fixes #266.
+---
+ mod/common/hash_table.c    | 14 +++-----------
+ mod/stateful/fragment_db.c |  4 +---
+ 2 files changed, 4 insertions(+), 14 deletions(-)
+
+diff --git a/mod/common/hash_table.c b/mod/common/hash_table.c
+index 25ddd7a6..4e9272f8 100644
+--- a/mod/common/hash_table.c
++++ b/mod/common/hash_table.c
+@@ -23,8 +23,7 @@
+  * @macro HTABLE_NAME name of the hash table structure to generate. Optional; Default: hash_table.
+  * @macro KEY_TYPE data type of the table's keys.
+  * @macro VALUE_TYPE data type of the table's values.
+- * @macro HASH_TABLE_SIZE The size of the internal array, in slots. Optional;
+- *            Default = Max = 64k - 1.
++ * @macro HASH_TABLE_SIZE The size of the internal array, in slots. MUST be a power of 2.
+  * @macro GENERATE_PRINT just define it if you want the print function; otherwise it will not be
+  *            generated.
+  * @macro GENERATE_FOR_EACH just define it if you want the for_each function; otherwise it will not
+@@ -44,13 +43,6 @@
+ #define HTABLE_NAME hash_table
+ #endif
+-#ifndef HASH_TABLE_SIZE
+-/**
+- * This number should not exceed unsigned int's maximum.
+- */
+-#define HASH_TABLE_SIZE (64 * 1024 - 1)
+-#endif
+-
+ /** Creates a token name by concatenating prefix and suffix. */
+ #define CONCAT_AUX(prefix, suffix) prefix ## suffix
+ /** Seems useless, but if not present, the compiler won't expand the HTABLE_NAME macro... */
+@@ -131,7 +123,7 @@ static struct KEY_VALUE_PAIR *GET_AUX(struct HTABLE_NAME *table, const KEY_TYPE
+       if (WARN(!table, "The table is NULL."))
+               return NULL;
+-      hash_code = table->hash_function(key) % HASH_TABLE_SIZE;
++      hash_code = table->hash_function(key) & (HASH_TABLE_SIZE - 1);
+       hlist_for_each(current_node, &table->table[hash_code]) {
+               current_pair = hlist_entry(current_node, struct KEY_VALUE_PAIR, hlist_hook);
+               if (table->equals_function(key, &current_pair->key))
+@@ -210,7 +202,7 @@ static int PUT(struct HTABLE_NAME *table, KEY_TYPE *key, VALUE_TYPE *value)
+       key_value->value = value;
+       /* Insert the key-value to the table. */
+-      hash_code = table->hash_function(key) % HASH_TABLE_SIZE;
++      hash_code = table->hash_function(key) & (HASH_TABLE_SIZE - 1);
+       hlist_add_head(&key_value->hlist_hook, &table->table[hash_code]);
+       list_add_tail(&key_value->list_hook, &table->list);
+diff --git a/mod/stateful/fragment_db.c b/mod/stateful/fragment_db.c
+index 44f966aa..ef0b1f5a 100644
+--- a/mod/stateful/fragment_db.c
++++ b/mod/stateful/fragment_db.c
+@@ -90,10 +90,8 @@ static bool equals_function(const struct packet *k1, const struct packet *k2)
+ static unsigned int inet6_hash_frag(__be32 id, const struct in6_addr *saddr,
+               const struct in6_addr *daddr, u32 rnd)
+ {
+-      u32 c;
+-      c = jhash_3words(ipv6_addr_hash(saddr), ipv6_addr_hash(daddr),
++      return jhash_3words(ipv6_addr_hash(saddr), ipv6_addr_hash(daddr),
+                       (__force u32)id, rnd);
+-      return c & (INETFRAGS_HASHSZ - 1);
+ }
+ #endif
+-- 
+2.19.1
+
diff --git a/net/jool/patches/020-packet-rename-offset_to_ptr-to-skb_offset_to_ptr-to-.patch b/net/jool/patches/020-packet-rename-offset_to_ptr-to-skb_offset_to_ptr-to-.patch
new file mode 100644 (file)
index 0000000..4023af7
--- /dev/null
@@ -0,0 +1,65 @@
+From f9e62248f252accb0609243958fb51f0f99a5bf3 Mon Sep 17 00:00:00 2001
+From: Ricardo Salveti <ricardo@foundries.io>
+Date: Mon, 1 Oct 2018 22:45:17 -0300
+Subject: [PATCH 2/2] packet: rename offset_to_ptr to skb_offset_to_ptr to
+ avoid conflicts with newer kernel
+
+Rename offset_to_ptr to skb_offset_to_ptr to avoid definition conflict
+when building jool against linux >= 4.19.
+
+Fixes:
+| mod/stateful/../common/packet.c:73:14: error: conflicting types for 'offset_to_ptr'
+|  static void *offset_to_ptr(struct sk_buff *skb, unsigned int offset)
+|               ^~~~~~~~~~~~~
+| In file included from kernel-source/include/linux/export.h:45,
+|                  from kernel-source/include/linux/linkage.h:7,
+|                  from kernel-source/include/linux/kernel.h:7,
+|                  from kernel-source/include/linux/skbuff.h:17,
+|                  from mod/stateful/../../include/nat64/mod/common/packet.h:81,
+|                  from mod/stateful/../common/packet.c:1:
+| kernel-source/include/linux/compiler.h:297:21: note: previous definition of 'offset_to_ptr' was here
+|  static inline void *offset_to_ptr(const int *off)
+|                      ^~~~~~~~~~~~~
+
+Signed-off-by: Ricardo Salveti <ricardo@foundries.io>
+---
+ mod/common/packet.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/mod/common/packet.c b/mod/common/packet.c
+index 9b4fbcd6..1b094fcc 100644
+--- a/mod/common/packet.c
++++ b/mod/common/packet.c
+@@ -70,7 +70,7 @@ static int inhdr4(struct sk_buff *skb, const char *msg)
+       return -EINVAL;
+ }
+-static void *offset_to_ptr(struct sk_buff *skb, unsigned int offset)
++static void *skb_offset_to_ptr(struct sk_buff *skb, unsigned int offset)
+ {
+       return ((void *) skb->data) + offset;
+ }
+@@ -368,9 +368,9 @@ int pkt_init_ipv6(struct packet *pkt, struct sk_buff *skb)
+       pkt->l4_proto = meta.l4_proto;
+       pkt->is_inner = 0;
+       pkt->is_hairpin = false;
+-      pkt->hdr_frag = meta.has_frag_hdr ? offset_to_ptr(skb, meta.frag_offset) : NULL;
++      pkt->hdr_frag = meta.has_frag_hdr ? skb_offset_to_ptr(skb, meta.frag_offset) : NULL;
+       skb_set_transport_header(skb, meta.l4_offset);
+-      pkt->payload = offset_to_ptr(skb, meta.payload_offset);
++      pkt->payload = skb_offset_to_ptr(skb, meta.payload_offset);
+       pkt->original_pkt = pkt;
+       return 0;
+@@ -530,7 +530,7 @@ int pkt_init_ipv4(struct packet *pkt, struct sk_buff *skb)
+       pkt->is_hairpin = false;
+       pkt->hdr_frag = NULL;
+       skb_set_transport_header(skb, meta.l4_offset);
+-      pkt->payload = offset_to_ptr(skb, meta.payload_offset);
++      pkt->payload = skb_offset_to_ptr(skb, meta.payload_offset);
+       pkt->original_pkt = pkt;
+       return 0;
+-- 
+2.19.1
+
index 00f86882911dc479f68e85360766114e598fbd8d..1340f7495c34dd5172bf9dc4f4962566762b07fb 100644 (file)
@@ -2,14 +2,14 @@ include $(TOPDIR)/rules.mk
 
 
 PKG_NAME:=kadnode
-PKG_VERSION:=2.2.3
+PKG_VERSION:=2.2.5
 PKG_RELEASE:=1
 
 PKG_LICENSE:=MIT
 
 PKG_SOURCE_URL:=https://codeload.github.com/mwarning/KadNode/tar.gz/v$(PKG_VERSION)?
 PKG_SOURCE:=kadnode-$(PKG_VERSION).tar.gz
-PKG_HASH:=1f5538a4b904fd2a624a2046f9320f72357af619190188f14bfdb15b5e5f8488
+PKG_HASH:=a72dc54d1869e47e374935cf44aa888a9b13c9dc017ae22e29cf13ead38a506b
 PKG_BUILD_DIR:=$(BUILD_DIR)/KadNode-$(PKG_VERSION)
 
 
index e4cae206ce0acc3ee7cc85032970667391323eb6..dfbed1b41bac54f9fd9f2ff0ebf1b8df66ed0c05 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=keepalived
-PKG_VERSION:=1.4.4
+PKG_VERSION:=2.0.7
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=http://www.keepalived.org/software
-PKG_HASH:=147c2b3b782223128551fd0a1564eaa30ed84a94b68c50ec5087747941314704
+PKG_HASH:=bce45d6d5cf3620bfd88472ec839a75b5a14a54fda12d09e890670244873b8ab
 
 PKG_LICENSE:=GPL-2.0+
 PKG_LICENSE_FILES:=COPYING
@@ -31,12 +31,15 @@ define Package/keepalived
   TITLE:=Failover and monitoring daemon for LVS clusters
   URL:=http://www.keepalived.org/
   DEPENDS:= \
-    +PACKAGE_libnl-genl:libnl-genl \
     +libopenssl \
     +libip4tc \
     +IPV6:libip6tc \
     +libxtables \
-    +kmod-macvlan
+    +kmod-macvlan \
+    +libmagic \
+    +libnl-route \
+    +libnfnetlink \
+    +kmod-nf-ipvs
 endef
 
 define Package/keepalived/description
@@ -50,9 +53,8 @@ define Package/keepalived/conffiles
 endef
 
 CONFIGURE_ARGS+= \
+       --disable-libnl \
        --enable-sha1 \
-       --disable-lvs \
-       --disable-lvs-syncd \
        --disable-snmp \
        --with-kernel-dir="$(LINUX_DIR)/$(LINUX_UAPI_DIR)"
 
diff --git a/net/keepalived/patches/0001-Include-stdbool.h-in-process.c.patch b/net/keepalived/patches/0001-Include-stdbool.h-in-process.c.patch
new file mode 100644 (file)
index 0000000..733f6ab
--- /dev/null
@@ -0,0 +1,25 @@
+From 6c7a281473083f7ac47b426b2127a8c8e76caca5 Mon Sep 17 00:00:00 2001
+From: Quentin Armitage <quentin@armitage.org.uk>
+Date: Sat, 25 Aug 2018 11:36:11 +0100
+Subject: [PATCH] Include stdbool.h in process.c
+
+Signed-off-by: Quentin Armitage <quentin@armitage.org.uk>
+---
+ keepalived/core/process.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/keepalived/core/process.c b/keepalived/core/process.c
+index f11c32a3..22bcf254 100644
+--- a/keepalived/core/process.c
++++ b/keepalived/core/process.c
+@@ -30,6 +30,7 @@
+ #ifdef _HAVE_SCHED_RT_
+ #include <sched.h>
+ #endif
++#include <stdbool.h>
+ #include "process.h"
+ #include "logger.h"
+-- 
+2.11.0
+
index 4ef28d1b6cbeaf2a0c17f1dabf8a9ff04b3c1bed..675d1dad1393d822f58740a5d1a5750db1286368 100644 (file)
@@ -8,15 +8,15 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=knot
-PKG_VERSION:=2.6.8
+PKG_VERSION:=2.7.3
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=https://secure.nic.cz/files/knot-dns/
-PKG_HASH:=0daee8efd6262f10c54ee6f5fb99ca4d0f72e275513ec0902032af594cac1b15
+PKG_HASH:=8717c0f34e441e96bc32bc93b48333ea9c094c5075f91575e40ac30fcf6692df
 
 PKG_MAINTAINER:=Daniel Salzman <daniel.salzman@nic.cz>
-PKG_LICENSE:=GPL-3.0 LGPL-2.0 0BSD MIT OLDAP-2.8
+PKG_LICENSE:=GPL-3.0 LGPL-2.0 0BSD BSD-3-Clause OLDAP-2.8
 
 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
 PKG_FIXUP:=autoreconf
@@ -161,10 +161,7 @@ endef
 
 define Build/Compile
        $(MAKE) -C $(PKG_BUILD_DIR)
-       $(MAKE) -C $(PKG_BUILD_DIR)/libtap check
-       $(MAKE) -C $(PKG_BUILD_DIR)/src/dnssec/tests check-compile
        $(MAKE) -C $(PKG_BUILD_DIR)/tests check-compile
-       $(MAKE) -C $(PKG_BUILD_DIR)/src/zscanner check-compile
 endef
 
 define Build/InstallDev
@@ -174,11 +171,11 @@ define Build/InstallDev
        $(INSTALL_DIR)                                          $(1)/usr/include/libknot
        $(CP) $(PKG_INSTALL_DIR)/usr/include/libknot/*          $(1)/usr/include/libknot/
 
-       $(INSTALL_DIR)                                          $(1)/usr/include/dnssec
-       $(CP) $(PKG_INSTALL_DIR)/usr/include/dnssec/*           $(1)/usr/include/dnssec/
+       $(INSTALL_DIR)                                          $(1)/usr/include/libdnssec
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/libdnssec/*        $(1)/usr/include/libdnssec/
 
-       $(INSTALL_DIR)                                          $(1)/usr/include/zscanner
-       $(CP) $(PKG_INSTALL_DIR)/usr/include/zscanner/*         $(1)/usr/include/zscanner/
+       $(INSTALL_DIR)                                          $(1)/usr/include/libzscanner
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/libzscanner/*      $(1)/usr/include/libzscanner/
 
        $(INSTALL_DIR)                                                  $(1)/usr/lib/pkgconfig
        $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/*.pc       $(1)/usr/lib/pkgconfig/
@@ -238,25 +235,17 @@ define Package/knot-tests/install
        $(INSTALL_BIN) ./files/runtests.sh                      $(1)/usr/share/knot/
 
        $(INSTALL_DIR)                                          $(1)/usr/share/knot/tap
-       $(INSTALL_BIN) $(PKG_BUILD_DIR)/libtap/runtests         $(1)/usr/share/knot/tap/
-       $(INSTALL_BIN) $(PKG_BUILD_DIR)/libtap/tap/libtap.sh    $(1)/usr/share/knot/tap/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/tests/tap/runtests      $(1)/usr/share/knot/tap/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/tests/tap/libtap.sh     $(1)/usr/share/knot/tap/
 
        $(INSTALL_DIR)                                                          $(1)/usr/share/knot/tests
 
-       $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/zscanner/tests/.libs/zscanner-tool  $(1)/usr/share/knot/tests/
-       $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/zscanner/tests/unittests            $(1)/usr/share/knot/tests/test_zscanner
-       $(INSTALL_DATA) $(PKG_BUILD_DIR)/src/zscanner/tests/TESTS               $(1)/usr/share/knot/tests/
-       cp -a $(PKG_BUILD_DIR)/src/zscanner/tests/data                          $(1)/usr/share/knot/tests/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/tests/libzscanner/.libs/zscanner-tool   $(1)/usr/share/knot/tests/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/tests/libzscanner/test_zscanner         $(1)/usr/share/knot/tests/
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/tests/libzscanner/TESTS                $(1)/usr/share/knot/tests/
+       cp -a $(PKG_BUILD_DIR)/tests/libzscanner/data                           $(1)/usr/share/knot/tests/
 
-       find $(PKG_BUILD_DIR)/src/dnssec/tests -maxdepth 1 -executable -type f | \
-               xargs -I{} basename {} | \
-               xargs -I{} $(INSTALL_BIN) -T $(PKG_BUILD_DIR)/src/dnssec/tests/{}       $(1)/usr/share/knot/tests/dnssec_test_{}
-
-       find $(PKG_BUILD_DIR)/tests/.libs -maxdepth 1 -executable -type f | \
-               xargs -I{} basename {} | \
-               xargs -I{} $(INSTALL_BIN) -T $(PKG_BUILD_DIR)/tests/.libs/{}            $(1)/usr/share/knot/tests/{}
-
-       for module in contrib libknot modules utils; do \
+       for module in contrib knot libdnssec libknot modules utils; do \
                find $(PKG_BUILD_DIR)/tests/$$$${module}/.libs -maxdepth 1 -executable -type f | \
                        xargs -I{} basename {} | \
                        xargs -I{} $(INSTALL_BIN) -T $(PKG_BUILD_DIR)/tests/$$$${module}/.libs/{} \
index 7ea4cfdd8b88a711bfc60f1bd456c3f4d3ec7205..fff1ec30c409c43e56dbd2ef9408ee079080ee80 100644 (file)
@@ -1,17 +1,17 @@
-diff --git a/src/zscanner/tests/unittests.in b/src/zscanner/tests/unittests.in
-index 9a4af53..f9b45bf 100644
---- a/src/zscanner/tests/unittests.in
-+++ b/src/zscanner/tests/unittests.in
+diff --git a/tests/libzscanner/test_zscanner.in b/tests/libzscanner/test_zscanner.in
+index 2c0c27526..72b2124c7 100644
+--- a/tests/libzscanner/test_zscanner.in
++++ b/tests/libzscanner/test_zscanner.in
 @@ -1,15 +1,14 @@
  #!/bin/sh
  
--SOURCE=@top_srcdir@/src/zscanner/tests
--BUILD=@top_builddir@/src/zscanner/tests
+-SOURCE=@top_srcdir@/tests/libzscanner
+-BUILD=@top_builddir@/tests/libzscanner
 +SOURCE="."
 +BUILD="/tmp/knot-test"
 +mkdir -p "$BUILD"
  
--. @top_srcdir@/libtap/tap/libtap.sh
+-. @top_srcdir@/tests/tap/libtap.sh
 -
 -cd "$BUILD"
 +. ../tap/libtap.sh
@@ -19,7 +19,7 @@ index 9a4af53..f9b45bf 100644
  TMPDIR=$(test_tmpdir)
  TESTS_DIR="$SOURCE"/data
 -ZSCANNER_TOOL="$BUILD"/zscanner-tool
-+ZSCANNER_TOOL=./zscanner-tool
++ZSCANNER_TOOL="$SOURCE"/zscanner-tool
  
- plan 71
+ plan 80
  
index 54ad80b75f04205d7ba96fde66fef98e85b08020..8c626690e576408e37c8f6db6f77ebd63663718b 100644 (file)
@@ -1,24 +1,13 @@
 diff --git a/samples/knot.sample.conf.in b/samples/knot.sample.conf.in
-index e07c8a7..8e057b0 100644
+index 10302f958..75082f537 100644
 --- a/samples/knot.sample.conf.in
 +++ b/samples/knot.sample.conf.in
-@@ -9,7 +9,7 @@ server:
-     # Listen on all configured IPv6 interfaces.
-     listen: ::@53
-     # User for running the server.
--    # user: knot:knot
-+    user: knot:knot
- log:
-     # Log info and more serious events to syslog.
-@@ -33,7 +33,9 @@ acl:
- #    action: notify
- template:
--#  - id: default
-+   - id: default
-+     max-journal-db-size: 20M
-+     max-timer-db-size: 5M
- #    storage: "@storage_dir@"
+@@ -30,6 +30,8 @@ template:
+   - id: default
+     storage: "@storage_dir@"
+     file: "%s.zone"
++    max-journal-db-size: 20M
++    max-timer-db-size: 5M
  
  zone:
+ #    # Master zone
index 5e366e3619413912d5b76dd233eb309a34f80835..22388ab507e32490b45a3ad416a66df7b95d16eb 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=krb5
 PKG_VERSION:=1.16.1
-PKG_RELEASE:=3
+PKG_RELEASE:=4
 
 PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org>
 
@@ -71,7 +71,8 @@ CONFIGURE_VARS += \
        ac_cv_func_regcomp=yes \
        ac_cv_printf_positional=yes \
        ac_cv_file__etc_environment=no \
-       ac_cv_file__etc_TIMEZONE=no
+       ac_cv_file__etc_TIMEZONE=no \
+       ac_cv_header_keyutils_h=no
 
 CONFIGURE_ARGS += \
        --localstatedir=/etc \
index 85b66464680364d156fac98991aad404496f3e82..2ba3643e203f102877aa6667d8dab2510008d1f2 100644 (file)
@@ -8,13 +8,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=linuxptp
-PKG_VERSION:=1.9.2
+PKG_VERSION:=2.0
 PKG_RELEASE:=1
 
 PKG_MAINTAINER:=Wojciech Dubowik <Wojciech.Dubowik@neratec.com>
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tgz
 PKG_SOURCE_URL:=@SF/$(PKG_NAME)/v$(PKG_VERSION)
-PKG_HASH:=7f662e65c66c37ff211dc525476626875c2b74162ded05c8a25d036fb963b8d0
+PKG_HASH:=0a24d9401e87d4af023d201e234d91127d82c350daad93432106284aa9459c7d
 
 PKG_LICENSE:=GPL-2.0
 PKG_LICENSE_FILES:=COPYING
index 72d01aa3f381c6d9db760e003d13d02202e34eeb..37845146ce692d4c45252e5c1188ff3221f3f018 100644 (file)
@@ -8,13 +8,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=mDNSResponder
-PKG_VERSION:=576.30.4
-PKG_RELEASE:=2
+PKG_VERSION:=878.70.2
+PKG_RELEASE:=1
 
 PKG_SOURCE:=mDNSResponder-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=http://opensource.apple.com/tarballs/mDNSResponder/
-PKG_HASH:=4737cb51378377e11d0edb7bcdd1bec79cbdaa7b27ea09c13e3006e58f8d92c0
-PKG_MAINTAINER:=Steven Barth <cyrus@openwrt.org>
+PKG_HASH:=cdd03171ca05f16ea987bba1f8b0c4847d3035283ea0f5fa0ade75f64ec83ed5
+PKG_MAINTAINER:=
 PKG_LICENSE:=Apache-2.0
 
 PKG_BUILD_DIR:=$(BUILD_DIR)/mDNSResponder-$(PKG_VERSION)
index b1685fc45bb6201c15e4639287dff9671967d0c7..aa90eb98b3164b170f63815b53affa693fb4883a 100644 (file)
@@ -48,8 +48,8 @@
  LINKOPTS = -lsocket -lnsl -lresolv
  JAVACFLAGS_OS += -I$(JDK)/include/solaris
  ifneq ($(DEBUG),1)
-@@ -148,7 +149,8 @@ CFLAGS_OS = -DHAVE_IPV6 -no-cpp-precomp
-       -D__MAC_OS_X_VERSION_MIN_REQUIRED=__MAC_OS_X_VERSION_10_4 \
+@@ -149,7 +150,8 @@    -D__MAC_OS_X_VERSION_MIN_REQUIRED=__MAC_OS_X_VERSION_10_4 \
+       -DHAVE_STRLCPY=1 \
        -D__APPLE_USE_RFC_2292 #-Wunreachable-code
  CC = gcc
 -LD = $(CC) -dynamiclib
@@ -58,7 +58,7 @@
  LINKOPTS = -lSystem
  LDSUFFIX = dylib
  JDK = /System/Library/Frameworks/JavaVM.framework/Home
-@@ -170,8 +172,9 @@ NSSLIBFILE  := $(NSSLIBNAME)-$(NSSVERSIO
+@@ -172,8 +174,9 @@ NSSLIBFILE  := $(NSSLIBNAME)-$(NSSVERSIO
  NSSLINKNAME := $(NSSLIBNAME).so.2
  NSSINSTPATH := /lib
  
@@ -69,7 +69,7 @@
  INSTBASE?=/usr
  STARTUPSCRIPTNAME?=mdns
  
-@@ -257,7 +260,7 @@ libdns_sd: setup $(BUILDDIR)/libdns_sd.$
+@@ -259,7 +262,7 @@ libdns_sd: setup $(BUILDDIR)/libdns_sd.$
  CLIENTLIBOBJS = $(OBJDIR)/dnssd_clientlib.c.so.o $(OBJDIR)/dnssd_clientstub.c.so.o $(OBJDIR)/dnssd_ipc.c.so.o
  
  $(BUILDDIR)/libdns_sd.$(LDSUFFIX): $(CLIENTLIBOBJS)
@@ -78,7 +78,7 @@
        @$(STRIP) $@
  
  Clients: setup libdns_sd ../Clients/build/dns-sd
-@@ -292,7 +295,7 @@ InstalledManPages: $(MANPATH)/man8/mdnsd
+@@ -294,7 +297,7 @@ InstalledManPages: $(MANPATH)/man8/mdnsd
  InstalledClients: $(INSTBASE)/bin/dns-sd
        @echo $+ " installed"
  
 +      -[ -f $(ETCBASE)/nsswitch.conf ] && sed -e '/mdns/!s/^\(hosts:.*\)dns\(.*\)/\1mdns dns\2/' $(ETCBASE)/nsswitch.conf.pre-mdns > $(ETCBASE)/nsswitch.conf
  
  #############################################################################
index 974588d200a62efbff514e904a5767c8db579ee2..998c241c56c2d8f3e197a28907fcf8defcdab65e 100644 (file)
@@ -1,10 +1,5 @@
---- /dev/null
-+++ b/.gitignore
-@@ -0,0 +1,4 @@
-+Clients/build
-+mDNSPosix/build
-+mDNSPosix/objects
-+
+diff --git a/Clients/Makefile b/Clients/Makefile
+index 383af31..925c20e 100755
 --- a/Clients/Makefile
 +++ b/Clients/Makefile
 @@ -36,7 +36,7 @@ TARGETS = build/dns-sd build/dns-sd64
@@ -16,6 +11,8 @@
  endif
  
  all: $(TARGETS)
+diff --git a/mDNSPosix/PosixDaemon.c b/mDNSPosix/PosixDaemon.c
+index 88b3292..e86a6c7 100644
 --- a/mDNSPosix/PosixDaemon.c
 +++ b/mDNSPosix/PosixDaemon.c
 @@ -37,6 +37,11 @@
      if (mStatus_NoError == err)
          err = MainLoop(&mDNSStorage);
  
---- a/mDNSPosix/Responder.c
-+++ b/mDNSPosix/Responder.c
-@@ -603,7 +603,8 @@ static mStatus RegisterServicesInFile(co
-         status = mStatus_UnknownErr;
-     }
--    assert(0 == fclose(fp));
-+    int rv = fclose(fp);
-+    assert(0 == rv);
-     return status;
- }
+diff --git a/mDNSPosix/mDNSPosix.c b/mDNSPosix/mDNSPosix.c
+index 6effa12..7c1d6eb 100755
 --- a/mDNSPosix/mDNSPosix.c
 +++ b/mDNSPosix/mDNSPosix.c
-@@ -138,7 +138,7 @@ mDNSlocal void SockAddrTomDNSAddr(const
- // mDNS core calls this routine when it needs to send a packet.
- mDNSexport mStatus mDNSPlatformSendUDP(const mDNS *const m, const void *const msg, const mDNSu8 *const end,
--                                       mDNSInterfaceID InterfaceID, UDPSocket *src, const mDNSAddr *dst, 
-+                                       mDNSInterfaceID InterfaceID, UDPSocket *src, const mDNSAddr *dst,
-                                        mDNSIPPort dstPort, mDNSBool useBackgroundTrafficClass)
- {
-     int err = 0;
-@@ -583,9 +583,17 @@ mDNSlocal void FreePosixNetworkInterface
- {
-     assert(intf != NULL);
-     if (intf->intfName != NULL) free((void *)intf->intfName);
--    if (intf->multicastSocket4 != -1) assert(close(intf->multicastSocket4) == 0);
-+    if (intf->multicastSocket4 != -1)
-+      {
-+        int rv = close(intf->multicastSocket4);
-+        assert(rv == 0);
-+      }
- #if HAVE_IPV6
--    if (intf->multicastSocket6 != -1) assert(close(intf->multicastSocket6) == 0);
-+    if (intf->multicastSocket6 != -1)
-+      {
-+        int rv = close(intf->multicastSocket6);
-+        assert(rv == 0);
-+      }
- #endif
-     // Move interface to the RecentInterfaces list for a minute
-@@ -724,6 +732,29 @@ mDNSlocal int SetupSocket(struct sockadd
+@@ -733,6 +741,29 @@ mDNSlocal int SetupSocket(struct sockaddr *intfAddr, mDNSIPPort port, int interf
              if (err < 0) { err = errno; perror("setsockopt - IP_MULTICAST_TTL"); }
          }
  
          // And start listening for packets
          if (err == 0)
          {
-@@ -805,6 +836,29 @@ mDNSlocal int SetupSocket(struct sockadd
+@@ -814,6 +845,29 @@ mDNSlocal int SetupSocket(struct sockaddr *intfAddr, mDNSIPPort port, int interf
              if (err < 0) { err = errno; perror("setsockopt - IPV6_MULTICAST_HOPS"); }
          }
  
          // And start listening for packets
          if (err == 0)
          {
-@@ -836,7 +890,12 @@ mDNSlocal int SetupSocket(struct sockadd
-     }
-     // Clean up
--    if (err != 0 && *sktPtr != -1) { assert(close(*sktPtr) == 0); *sktPtr = -1; }
-+    if (err != 0 && *sktPtr != -1)
-+      {
-+        int rv = close(*sktPtr);
-+        assert(rv == 0);
-+        *sktPtr = -1;
-+      }
-     assert((err == 0) == (*sktPtr != -1));
-     return err;
- }
-@@ -942,19 +1001,14 @@ mDNSlocal int SetupInterfaceList(mDNS *c
+@@ -958,19 +1017,14 @@ mDNSlocal int SetupInterfaceList(mDNS *const m)
      int err            = 0;
      struct ifi_info *intfList      = get_ifi_info(AF_INET, mDNStrue);
      struct ifi_info *firstLoopback = NULL;
  #endif
  
      if (err == 0)
-@@ -1030,7 +1084,7 @@ mDNSlocal mStatus OpenIfNotifySocket(int
+@@ -1046,7 +1100,7 @@ mDNSlocal mStatus OpenIfNotifySocket(int *pFD)
      /* Subscribe the socket to Link & IP addr notifications. */
      mDNSPlatformMemZero(&snl, sizeof snl);
      snl.nl_family = AF_NETLINK;
      ret = bind(sock, (struct sockaddr *) &snl, sizeof snl);
      if (0 == ret)
          *pFD = sock;
-@@ -1108,11 +1162,18 @@ mDNSlocal mDNSu32       ProcessRoutingNo
+@@ -1124,11 +1178,18 @@ mDNSlocal mDNSu32       ProcessRoutingNotification(int sd)
          PrintNetLinkMsg(pNLMsg);
  #endif
  
  
          // Advance pNLMsg to the next message in the buffer
          if ((pNLMsg->nlmsg_flags & NLM_F_MULTI) != 0 && pNLMsg->nlmsg_type != NLMSG_DONE)
-@@ -1283,8 +1344,12 @@ mDNSexport mStatus mDNSPlatformInit(mDNS
+@@ -1299,8 +1360,12 @@ mDNSexport mStatus mDNSPlatformInit(mDNS *const m)
      if (err == mStatus_NoError) err = SetupSocket(&sa, zeroIPPort, 0, &m->p->unicastSocket6);
  #endif
  
  
      // Tell mDNS core about DNS Servers
      mDNS_Lock(m);
-@@ -1317,9 +1382,17 @@ mDNSexport void mDNSPlatformClose(mDNS *
- {
-     assert(m != NULL);
-     ClearInterfaceList(m);
--    if (m->p->unicastSocket4 != -1) assert(close(m->p->unicastSocket4) == 0);
-+    if (m->p->unicastSocket4 != -1)
-+      {
-+        int rv = close(m->p->unicastSocket4);
-+        assert(rv == 0);
-+      }
- #if HAVE_IPV6
--    if (m->p->unicastSocket6 != -1) assert(close(m->p->unicastSocket6) == 0);
-+    if (m->p->unicastSocket6 != -1)
-+      {
-+        int rv = close(m->p->unicastSocket6);
-+        assert(rv == 0);
-+      }
- #endif
- }
-@@ -1575,14 +1648,14 @@ mDNSexport mStatus    mDNSPlatformClearS
- mDNSexport mDNSu16 mDNSPlatformGetUDPPort(UDPSocket *sock)
- {
-     (void) sock; // unused
-- 
-+
-     return (mDNSu16)-1;
- }
- mDNSexport mDNSBool mDNSPlatformInterfaceIsD2D(mDNSInterfaceID InterfaceID)
- {
-     (void) InterfaceID; // unused
--    
-+
-     return mDNSfalse;
- }
+diff --git a/mDNSPosix/mDNSUNP.c b/mDNSPosix/mDNSUNP.c
+index b392fc7..f551ad5 100755
 --- a/mDNSPosix/mDNSUNP.c
 +++ b/mDNSPosix/mDNSUNP.c
 @@ -63,6 +63,7 @@
  
  /* Converts a prefix length to IPv6 network mask */
  void plen_to_mask(int plen, char *addr) {
-@@ -86,7 +87,7 @@ struct ifi_info *get_ifi_info_linuxv6(in
-     FILE *fp;
+@@ -86,7 +87,7 @@ struct ifi_info *get_ifi_info_linuxv6(int family, int doaliases)
+     FILE *fp = NULL;
      char addr[8][5];
      int flags, myflags, index, plen, scope;
 -    char ifname[9], lastname[IFNAMSIZ];
 +    char ifname[IFNAMSIZ], lastname[IFNAMSIZ];
      char addr6[32+7+1]; /* don't forget the seven ':' */
      struct addrinfo hints, *res0;
-     struct sockaddr_in6 *sin6;
-@@ -94,7 +95,8 @@ struct ifi_info *get_ifi_info_linuxv6(in
+     int err;
+@@ -92,7 +93,8 @@ struct ifi_info *get_ifi_info_linuxv6(int family, int doaliases)
      int err;
      int sockfd = -1;
      struct ifreq ifr;
      res0=NULL;
      ifihead = NULL;
      ifipnext = &ifihead;
-@@ -106,11 +108,12 @@ struct ifi_info *get_ifi_info_linuxv6(in
+@@ -104,11 +106,12 @@ struct ifi_info *get_ifi_info_linuxv6(int family, int doaliases)
              goto gotError;
          }
          while (fscanf(fp,
              myflags = 0;
              if (strncmp(lastname, ifname, IFNAMSIZ) == 0) {
                  if (doaliases == 0)
-@@ -204,8 +207,11 @@ gotError:
-         res0=NULL;
-     }
- done:
-+    if (fp)
-+      fclose(fp);
-     if (sockfd != -1) {
--        assert(close(sockfd) == 0);
-+      int rv = close(sockfd);
-+      assert(rv == 0);
-     }
-     return(ifihead);    /* pointer to first structure in linked list */
- }
+diff --git a/mDNSShared/dnsextd_parser.y b/mDNSShared/dnsextd_parser.y
+index 18c5990..d4b63ce 100644
 --- a/mDNSShared/dnsextd_parser.y
 +++ b/mDNSShared/dnsextd_parser.y
 @@ -15,6 +15,8 @@
  int  yylex(void);
  
  
-@@ -378,7 +380,7 @@ int yywrap(void);
+@@ -409,7 +419,7 @@ int yywrap(void);
  
  extern int yylineno;
  
diff --git a/net/mdnsresponder/patches/114-fix_posix_build.patch b/net/mdnsresponder/patches/114-fix_posix_build.patch
deleted file mode 100644 (file)
index d3fbae5..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/mDNSPosix/mDNSPosix.c
-+++ b/mDNSPosix/mDNSPosix.c
-@@ -1673,7 +1673,7 @@ mDNSexport mDNSs32 mDNSPlatformGetServic
-     return -1;
- }
--mDNSexport void mDNSPlatformSetDelegatePID(UDPSocket *src, const mDNSAddr *dst, DNSQuestion *q)
-+mDNSexport void mDNSPlatformSetuDNSSocktOpt(UDPSocket *src, const mDNSAddr *dst, DNSQuestion *q)
- {
-     (void) src;
-     (void) dst;
index b1e7caa4f2e48b9996282d8b4c8b26f43435e54f..611187676989ab74d85e41286d6fb48e095ba6ad 100644 (file)
@@ -1,6 +1,6 @@
 --- a/Clients/dns-sd.c
 +++ b/Clients/dns-sd.c
-@@ -1811,7 +1811,7 @@ Fail:
+@@ -2288,7 +2288,7 @@ Fail:
  
  // NOT static -- otherwise the compiler may optimize it out
  // The "@(#) " pattern is a special prefix the "what" command looks for
@@ -11,7 +11,7 @@
  // If the process crashes, then this string will be magically included in the automatically-generated crash log
 --- a/mDNSPosix/PosixDaemon.c
 +++ b/mDNSPosix/PosixDaemon.c
-@@ -289,9 +289,9 @@ asm (".desc ___crashreporter_info__, 0x1
+@@ -290,9 +290,9 @@ asm (".desc ___crashreporter_info__, 0x1
  
  // For convenience when using the "strings" command, this is the last thing in the file
  #if mDNSResponderVersion > 1
@@ -33,7 +33,7 @@
 +const char VersionString_SCCS[] = "@(#) libjdns_sd " STRINGIFY(mDNSResponderVersion);
 --- a/mDNSShared/dnsextd.c
 +++ b/mDNSShared/dnsextd.c
-@@ -3141,7 +3141,7 @@ mDNS mDNSStorage;
+@@ -3136,7 +3136,7 @@ mDNS mDNSStorage;
  
  // For convenience when using the "strings" command, this is the last thing in the file
  // The "@(#) " pattern is a special prefix the "what" command looks for
index f0a80461eecd43f2b6d8180b5e9811e353252dec..69cbaf467a2ed78072649576c8f69a6cef90830e 100644 (file)
@@ -9,14 +9,15 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=mosquitto
-PKG_VERSION:=1.5.1
+PKG_VERSION:=1.5.3
 PKG_RELEASE:=3
 PKG_LICENSE:=BSD-3-Clause
 PKG_LICENSE_FILES:=LICENSE.txt
+PKG_CPE_ID:=cpe:/a:eclipse:mosquitto
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://mosquitto.org/files/source/
-PKG_HASH:=8557bc7ae34dfaf32a0fb56d2491b7a7f731269c88337227233013502df4d5b0
+PKG_HASH:=3081a998d303a883b1cd064009beabc88aa9159e26f5258a4ae6007160491d10
 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)
 
 include $(INCLUDE_DIR)/package.mk
@@ -197,6 +198,15 @@ define Build/InstallDev
        $(CP) $(PKG_BUILD_DIR)/lib/cpp/libmosquittopp.so.1 $(1)/usr/lib/
        $(LN) libmosquitto.so.1 $(1)/usr/lib/libmosquitto.so
        $(LN) libmosquittopp.so.1 $(1)/usr/lib/libmosquittopp.so
+       $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
+       $(CP) $(PKG_BUILD_DIR)/libmosquitto.pc.in $(1)/usr/lib/pkgconfig/libmosquitto.pc
+       sed -i -e "s#@CMAKE_INSTALL_PREFIX@#/usr#" \
+              -e "s#@VERSION@#$(PKG_VERSION)#" \
+           $(1)/usr/lib/pkgconfig/libmosquitto.pc
+       $(CP) $(PKG_BUILD_DIR)/libmosquittopp.pc.in $(1)/usr/lib/pkgconfig/libmosquittopp.pc
+       sed -i -e "s#@CMAKE_INSTALL_PREFIX@#/usr#" \
+              -e "s#@VERSION@#$(PKG_VERSION)#" \
+           $(1)/usr/lib/pkgconfig/libmosquittopp.pc
 endef
 
 # This installs files on the target.  Compare with Build/InstallDev
index 9435b1354d816549ffb0bdfc5f17594ee0fedadd..67921de4c776b85e65ab1cebb43f83e15ee37307 100644 (file)
@@ -9,14 +9,13 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=mtr
 PKG_VERSION:=0.92
-PKG_RELEASE:=2
-
-PKG_MAINTAINER:=Jonathan McCrohan <jmccrohan@gmail.com>
+PKG_RELEASE:=4
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://codeload.github.com/traviscross/mtr/tar.gz/v$(PKG_VERSION)?
-PKG_HASH:=568a52911a8933496e60c88ac6fea12379469d7943feb9223f4337903e4bc164
+PKG_SOURCE_URL:=https://www.bitwizard.nl/mtr/files
+PKG_HASH:=f2979db9e2f41aa8e6574e7771767c9afe111d9213814eb47f5e1e71876e4382
 
+PKG_MAINTAINER:=Jonathan McCrohan <jmccrohan@gmail.com>
 PKG_LICENSE:=GPL-2.0+
 PKG_LICENSE_FILES:=COPYING
 
@@ -50,10 +49,7 @@ CONFIGURE_ARGS += \
        --without-gtk \
        $(call autoconf_bool,CONFIG_IPV6,ipv6)
 
-define Build/Configure
-       echo $(PKG_VERSION) > .tarball-version
-       $(call Build/Configure/Default)
-endef
+CONFIGURE_VARS += ac_cv_lib_cap_cap_set_proc=no
 
 define Package/mtr/install
        $(INSTALL_DIR) $(1)/usr/sbin
diff --git a/net/mtr/patches/010-remove-libcap-support.patch b/net/mtr/patches/010-remove-libcap-support.patch
deleted file mode 100644 (file)
index db15a51..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-diff --git a/configure.ac b/configure.ac
-index a08ce67..83bf094 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -106,10 +106,6 @@ AS_IF([test "x$with_ncurses" = "xyes"],
- ])
- AM_CONDITIONAL([WITH_CURSES], [test "x$with_ncurses" = xyes])
--AC_CHECK_LIB([cap], [cap_set_proc], [],
--  AS_IF([test "$host_os" = linux-gnu],
--    AC_MSG_WARN([Capabilities support is strongly recommended for increased security.  See SECURITY for more information.])))
--
- # Enable ipinfo
- AC_ARG_WITH([ipinfo],
-   [AS_HELP_STRING([--without-ipinfo], [Do not try to use ipinfo lookup at all])],
diff --git a/net/mtr/patches/020-Sami-Kerola-prevent-MTR-reporting-unknown-revision.patch b/net/mtr/patches/020-Sami-Kerola-prevent-MTR-reporting-unknown-revision.patch
deleted file mode 100644 (file)
index 4923d72..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-From 94218682b15832fd6f8ed09a767941974075a1b4 Mon Sep 17 00:00:00 2001
-From: "R.E. Wolff" <R.E.Wolff@BitWizard.nl>
-Date: Tue, 7 Nov 2017 17:24:14 +0100
-Subject: [PATCH] Sami Kerola: prevent MTR reporting unknown revision
-
----
- Makefile.am | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/Makefile.am b/Makefile.am
-index c0709ca..23ac1fc 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -156,3 +156,7 @@ endif  # if CYGWIN
- if BUILD_BASH_COMPLETION
- dist_bashcompletion_DATA = bash-completion/mtr
- endif
-+
-+dist-hook:
-+      $(AM_V_GEN)echo $(VERSION) > $(distdir)/.tarball-version
-+
--- 
-2.17.1
-
index adb54b24ae08cc29ca7b73a52022eac00d057bcc..2e7d2ec992d817fde201c19bb598e43bc8f262dc 100644 (file)
@@ -8,7 +8,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=mwan3
-PKG_VERSION:=2.6.18
+PKG_VERSION:=2.7.5
 PKG_RELEASE:=1
 PKG_MAINTAINER:=Florian Eckert <fe@dev.tdt.de>
 PKG_LICENSE:=GPLv2
index b7f6c2c11ba27b86629444b0cd9ed458f85cdf80..966601eee2dd1e78ad0051e6613cb5ede01cc6cc 100644 (file)
@@ -1,7 +1,8 @@
 
 config globals 'globals'
        option mmx_mask '0x3F00'
-       option local_source 'lan'
+       option local_source 'none'
+       option rtmon_interval '5'
 
 config interface 'wan'
        option enabled '1'
diff --git a/net/mwan3/files/etc/hotplug.d/iface/13-mwan3 b/net/mwan3/files/etc/hotplug.d/iface/13-mwan3
new file mode 100644 (file)
index 0000000..c21e1db
--- /dev/null
@@ -0,0 +1,98 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /lib/functions/network.sh
+. /lib/mwan3/mwan3.sh
+
+LOG="logger -t mwan3[$$] -p"
+
+[ "$ACTION" = "connected" -o "$ACTION" = "disconnected" ] || exit 1
+[ -n "$INTERFACE" ] || exit 2
+
+if [ "$ACTION" = "connected" ]; then
+       [ -n "$DEVICE" ] || exit 3
+fi
+
+config_load mwan3
+config_get_bool enabled globals 'enabled' '0'
+config_get local_source globals 'local_source' 'none'
+[ ${enabled} = "1" ] || exit 0
+[ ${local_source} = "none" ] || exit 0
+
+config_get enabled $INTERFACE enabled 0
+config_get online_metric $INTERFACE online_metric 0
+[ "$enabled" == "1" ] || exit 0
+
+if [ "$online_metric" = 0 ]; then
+       $LOG notice "No online metric for interface "$INTERFACE" found"
+       exit 0
+fi
+
+mwan3_add_failover_metric() {
+       local iface="$1"
+       local device="$2"
+       local metric="$3"
+
+       local route_args
+
+       config_get family $iface family ipv4
+
+       if [ "$family" == "ipv4" ]; then
+               if ubus call network.interface.${iface}_4 status 1>/dev/null 2>&1; then
+                       network_get_gateway route_args ${iface}_4
+               else
+                       network_get_gateway route_args $iface
+               fi
+
+               if [ -n "$route_args" -a "$route_args" != "0.0.0.0" ]; then
+                       route_args="via $route_args"
+               else
+                       route_args=""
+               fi
+
+               $IP4 route add default $route_args dev $device proto static metric $metric 1>/dev/null 2>&1
+       fi
+
+       if [ "$family" == "ipv6" ]; then
+               if ubus call network.interface.${iface}_6 status 1>/dev/null 2>&1; then
+                       network_get_gateway6 route_args ${iface}_6
+               else
+                       network_get_gateway6 route_args $iface
+               fi
+
+               if [ -n "$route_args" -a "$route_args" != "::" ]; then
+                       route_args="via $route_args"
+               else
+                       route_args=""
+               fi
+
+               $IP6 route add default $route_args dev $device proto static metric $metric 1>/dev/null 2>&1
+       fi
+}
+
+mwan3_del_failover_metric() {
+       local iface="$1"
+       local device="$2"
+       local metric="$3"
+
+       config_get family $iface family ipv4
+
+       if [ "$family" == "ipv4" ]; then
+               $IP4 route del default dev $device proto static metric $metric 1>/dev/null 2>&1
+       fi
+
+       if [ "$family" == "ipv6" ]; then
+               $IP6 route del default dev $device proto static metric $metric 1>/dev/null 2>&1
+       fi
+}
+
+case "$ACTION" in
+       connected)
+               mwan3_add_failover_metric "$INTERFACE" "$DEVICE" "$online_metric"
+               ;;
+       disconnected)
+               mwan3_del_failover_metric "$INTERFACE" "$DEVICE" "$online_metric"
+               ;;
+esac
+
+exit 0
index a02f88baa70ed245880f531ae8245c1c088b9cf2..897872e68b4cd2206653184c8d6b043a5b72647e 100644 (file)
@@ -19,6 +19,7 @@ config_get_bool enabled globals 'enabled' '0'
 mwan3_lock
 mwan3_init
 mwan3_set_connected_iptables
+mwan3_set_custom_ipset
 mwan3_unlock
 
 config_get enabled $INTERFACE enabled 0
diff --git a/net/mwan3/files/etc/hotplug.d/iface/16-mwan3 b/net/mwan3/files/etc/hotplug.d/iface/16-mwan3
new file mode 100644 (file)
index 0000000..d2d148b
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /lib/functions/network.sh
+. /lib/mwan3/mwan3.sh
+
+config_load mwan3
+config_get_bool enabled globals 'enabled' '0'
+[ ${enabled} -gt 0 ] || exit 0
+
+if [ "$ACTION" == "ifup" ]; then
+       mwan3_lock
+       mwan3_rtmon
+       mwan3_unlock
+fi
+
+exit 0
index dac1fb89a5607c897b9e652238de204cdcd4627a..2dccef3635c14682f488608090737df84a3e03c5 100755 (executable)
@@ -3,15 +3,7 @@
 START=19
 
 reload() {
-       local enabled
-
-       config_load mwan3
-       config_get_bool enabled globals 'enabled' 0
-       [ ${enabled} -gt 0 ] || {
-               echo "Warning: mwan3 is global disabled. Usage: /etc/init.d/mwan3 start"
-               exit 0
-       }
-       mwan3 restart
+       /usr/sbin/mwan3 restart
 }
 
 boot() {
@@ -20,13 +12,9 @@ boot() {
 }
 
 start() {
-       . /lib/config/uci.sh
-       uci_toggle_state mwan3 globals enabled "1"
-       mwan3 start
+       /usr/sbin/mwan3 start
 }
 
 stop() {
-       . /lib/config/uci.sh
-       uci_toggle_state mwan3 globals enabled "0"
-       mwan3 stop
+       /usr/sbin/mwan3 stop
 }
index 2c5bbf3c126e9a10e5f7122dbc41916b46c30245..42e08beb9b9cba123089dd7d442a1b969b7f8517 100644 (file)
@@ -7,6 +7,18 @@ IPT4="iptables -t mangle -w"
 IPT6="ip6tables -t mangle -w"
 LOG="logger -t mwan3[$$] -p"
 CONNTRACK_FILE="/proc/net/nf_conntrack"
+IPv6_REGEX="([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|"
+IPv6_REGEX="${IPv6_REGEX}([0-9a-fA-F]{1,4}:){1,7}:|"
+IPv6_REGEX="${IPv6_REGEX}([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|"
+IPv6_REGEX="${IPv6_REGEX}([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|"
+IPv6_REGEX="${IPv6_REGEX}([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|"
+IPv6_REGEX="${IPv6_REGEX}([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|"
+IPv6_REGEX="${IPv6_REGEX}([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|"
+IPv6_REGEX="${IPv6_REGEX}[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|"
+IPv6_REGEX="${IPv6_REGEX}:((:[0-9a-fA-F]{1,4}){1,7}|:)|"
+IPv6_REGEX="${IPv6_REGEX}fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|"
+IPv6_REGEX="${IPv6_REGEX}::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|"
+IPv6_REGEX="${IPv6_REGEX}([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])"
 
 MWAN3_STATUS_DIR="/var/run/mwan3"
 MWAN3TRACK_STATUS_DIR="/var/run/mwan3track"
@@ -20,6 +32,63 @@ MM_BLACKHOLE=""
 MMX_UNREACHABLE=""
 MM_UNREACHABLE=""
 
+mwan3_rtmon_ipv4()
+{
+       local tid=1
+       local idx=0
+       local ret=1
+       mkdir -p /tmp/mwan3rtmon
+       ($IP4 route list table main  | grep -v "^default\|linkdown" | sort -n; echo empty fixup) >/tmp/mwan3rtmon/ipv4.main
+       while uci get mwan3.@interface[$idx] >/dev/null 2>&1 ; do
+               idx=$((idx+1))
+               tid=$idx
+               [ "$(uci get mwan3.@interface[$((idx-1))].family)" = "ipv4" ] && {
+                       if $IP4 route list table $tid | grep -q ^default; then
+                               ($IP4 route list table $tid  | grep -v "^default\|linkdown" | sort -n; echo empty fixup) >/tmp/mwan3rtmon/ipv4.$tid
+                               cat /tmp/mwan3rtmon/ipv4.$tid | grep -v -x -F -f /tmp/mwan3rtmon/ipv4.main | while read line; do
+                                       $IP4 route del table $tid $line
+                               done
+                               cat /tmp/mwan3rtmon/ipv4.main | grep -v -x -F -f /tmp/mwan3rtmon/ipv4.$tid | while read line; do
+                                       $IP4 route add table $tid $line
+                               done
+                       fi
+               }
+               if [ "$(uci get mwan3.@interface[$((idx-1))].enabled)" = "1" ]; then
+                       ret=0
+               fi
+       done
+       rm -f /tmp/mwan3rtmon/ipv4.*
+       return $ret
+}
+
+mwan3_rtmon_ipv6()
+{
+       local tid=1
+       local idx=0
+       local ret=1
+       mkdir -p /tmp/mwan3rtmon
+       ($IP6 route list table main  | grep -v "^default\|^::/0\|^unreachable" | sort -n; echo empty fixup) >/tmp/mwan3rtmon/ipv6.main
+       while uci get mwan3.@interface[$idx] >/dev/null 2>&1 ; do
+               idx=$((idx+1))
+               tid=$idx
+               [ "$(uci get mwan3.@interface[$((idx-1))].family)" = "ipv6" ] && {
+                       if $IP6 route list table $tid | grep -q "^default\|^::/0"; then
+                               ($IP6 route list table $tid  | grep -v "^default\|^::/0\|^unreachable" | sort -n; echo empty fixup) >/tmp/mwan3rtmon/ipv6.$tid
+                               cat /tmp/mwan3rtmon/ipv6.$tid | grep -v -x -F -f /tmp/mwan3rtmon/ipv6.main | while read line; do
+                                       $IP6 route del table $tid $line
+                               done
+                               cat /tmp/mwan3rtmon/ipv6.main | grep -v -x -F -f /tmp/mwan3rtmon/ipv6.$tid | while read line; do
+                                       $IP6 route add table $tid $line
+                               done
+                       fi
+               }
+               if [ "$(uci get mwan3.@interface[$((idx-1))].enabled)" = "1" ]; then
+                       ret=0
+               fi
+       done
+       rm -f /tmp/mwan3rtmon/ipv6.*
+       return $ret
+}
 
 # counts how many bits are set to 1
 # n&(n-1) clears the lowest bit set to 1
@@ -119,6 +188,46 @@ mwan3_get_iface_id()
        export "$1=$_tmp"
 }
 
+mwan3_set_custom_ipset_v4()
+{
+       local custom_network_v4
+
+       for custom_network_v4 in $($IP4 route list table "$1" | awk '{print $1}' | egrep '[0-9]{1,3}(\.[0-9]{1,3}){3}'); do
+               $LOG notice "Adding network $custom_network_v4 from table $1 to mwan3_custom_v4 ipset"
+               $IPS -! add mwan3_custom_v4_temp $custom_network_v4
+       done
+}
+
+mwan3_set_custom_ipset_v6()
+{
+       local custom_network_v6
+
+       for custom_network_v6 in $($IP6 route list table "$1" | awk '{print $1}' | egrep "$IPv6_REGEX"); do
+               $LOG notice "Adding network $custom_network_v6 from table $1 to mwan3_custom_v6 ipset"
+               $IPS -! add mwan3_custom_v6_temp $custom_network_v6
+       done
+}
+
+mwan3_set_custom_ipset()
+{
+       $IPS -! create mwan3_custom_v4 hash:net
+       $IPS create mwan3_custom_v4_temp hash:net
+       config_list_foreach "globals" "rt_table_lookup" mwan3_set_custom_ipset_v4
+       $IPS swap mwan3_custom_v4_temp mwan3_custom_v4
+       $IPS destroy mwan3_custom_v4_temp
+
+
+       $IPS -! create mwan3_custom_v6 hash:net family inet6
+       $IPS create mwan3_custom_v6_temp hash:net family inet6
+       config_list_foreach "globals" "rt_table_lookup" mwan3_set_custom_ipset_v6
+       $IPS swap mwan3_custom_v6_temp mwan3_custom_v6
+       $IPS destroy mwan3_custom_v6_temp
+
+       $IPS -! create mwan3_connected list:set
+       $IPS -! add mwan3_connected mwan3_custom_v4
+       $IPS -! add mwan3_connected mwan3_custom_v6
+}
+
 mwan3_set_connected_iptables()
 {
        local connected_network_v4 connected_network_v6
@@ -142,7 +251,7 @@ mwan3_set_connected_iptables()
        $IPS -! create mwan3_connected_v6 hash:net family inet6
        $IPS create mwan3_connected_v6_temp hash:net family inet6
 
-       for connected_network_v6 in $($IP6 route | awk '{print $1}' | egrep '([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])'); do
+       for connected_network_v6 in $($IP6 route | awk '{print $1}' | egrep "$IPv6_REGEX"); do
                $IPS -! add mwan3_connected_v6_temp $connected_network_v6
        done
 
@@ -152,6 +261,12 @@ mwan3_set_connected_iptables()
        $IPS -! create mwan3_connected list:set
        $IPS -! add mwan3_connected mwan3_connected_v4
        $IPS -! add mwan3_connected mwan3_connected_v6
+
+       $IPS -! create mwan3_dynamic_v4 hash:net
+       $IPS -! add mwan3_connected mwan3_dynamic_v4
+
+       $IPS -! create mwan3_dynamic_v6 hash:net family inet6
+       $IPS -! add mwan3_connected mwan3_dynamic_v6
 }
 
 mwan3_set_general_rules()
@@ -185,11 +300,9 @@ mwan3_set_general_iptables()
                if ! $IPT -S mwan3_connected &> /dev/null; then
                        $IPT -N mwan3_connected
                        $IPS -! create mwan3_connected list:set
-                       $IPT -A mwan3_connected -m set --match-set mwan3_connected dst -j MARK --set-xmark $MMX_DEFAULT/$MMX_MASK
-               fi
-
-               if ! $IPT -S mwan3_ifaces_out &> /dev/null; then
-                       $IPT -N mwan3_ifaces_out
+                       $IPT -A mwan3_connected \
+                               -m set --match-set mwan3_connected dst \
+                               -j MARK --set-xmark $MMX_DEFAULT/$MMX_MASK
                fi
 
                if ! $IPT -S mwan3_rules &> /dev/null; then
@@ -200,19 +313,43 @@ mwan3_set_general_iptables()
                        $IPT -N mwan3_hook
                        # do not mangle ipv6 ra service
                        if [ "$IPT" = "$IPT6" ]; then
-                               $IPT6 -A mwan3_hook -p ipv6-icmp -m icmp6 --icmpv6-type 133 -j RETURN
-                               $IPT6 -A mwan3_hook -p ipv6-icmp -m icmp6 --icmpv6-type 134 -j RETURN
-                               $IPT6 -A mwan3_hook -p ipv6-icmp -m icmp6 --icmpv6-type 135 -j RETURN
-                               $IPT6 -A mwan3_hook -p ipv6-icmp -m icmp6 --icmpv6-type 136 -j RETURN
-                               $IPT6 -A mwan3_hook -p ipv6-icmp -m icmp6 --icmpv6-type 137 -j RETURN
+                               $IPT6 -A mwan3_hook \
+                                       -p ipv6-icmp \
+                                       -m icmp6 --icmpv6-type 133 \
+                                       -j RETURN
+                               $IPT6 -A mwan3_hook \
+                                       -p ipv6-icmp \
+                                       -m icmp6 --icmpv6-type 134 \
+                                       -j RETURN
+                               $IPT6 -A mwan3_hook \
+                                       -p ipv6-icmp \
+                                       -m icmp6 --icmpv6-type 135 \
+                                       -j RETURN
+                               $IPT6 -A mwan3_hook \
+                                       -p ipv6-icmp \
+                                       -m icmp6 --icmpv6-type 136 \
+                                       -j RETURN
+                               $IPT6 -A mwan3_hook \
+                                       -p ipv6-icmp \
+                                       -m icmp6 --icmpv6-type 137 \
+                                       -j RETURN
                        fi
-                       $IPT -A mwan3_hook -j CONNMARK --restore-mark --nfmask $MMX_MASK --ctmask $MMX_MASK
-                       $IPT -A mwan3_hook -m mark --mark 0x0/$MMX_MASK -j mwan3_ifaces_in
-                       $IPT -A mwan3_hook -m mark --mark 0x0/$MMX_MASK -j mwan3_connected
-                       $IPT -A mwan3_hook -m mark --mark 0x0/$MMX_MASK -j mwan3_ifaces_out
-                       $IPT -A mwan3_hook -m mark --mark 0x0/$MMX_MASK -j mwan3_rules
-                       $IPT -A mwan3_hook -j CONNMARK --save-mark --nfmask $MMX_MASK --ctmask $MMX_MASK
-                       $IPT -A mwan3_hook -m mark ! --mark $MMX_DEFAULT/$MMX_MASK -j mwan3_connected
+                       $IPT -A mwan3_hook \
+                               -j CONNMARK --restore-mark --nfmask $MMX_MASK --ctmask $MMX_MASK
+                       $IPT -A mwan3_hook \
+                               -m mark --mark 0x0/$MMX_MASK \
+                               -j mwan3_ifaces_in
+                       $IPT -A mwan3_hook \
+                               -m mark --mark 0x0/$MMX_MASK \
+                               -j mwan3_connected
+                       $IPT -A mwan3_hook \
+                               -m mark --mark 0x0/$MMX_MASK \
+                               -j mwan3_rules
+                       $IPT -A mwan3_hook \
+                               -j CONNMARK --save-mark --nfmask $MMX_MASK --ctmask $MMX_MASK
+                       $IPT -A mwan3_hook \
+                               -m mark ! --mark $MMX_DEFAULT/$MMX_MASK \
+                               -j mwan3_connected
                fi
 
                if ! $IPT -S PREROUTING | grep mwan3_hook &> /dev/null; then
@@ -241,30 +378,29 @@ mwan3_create_iface_iptables()
                        $IPT4 -N mwan3_ifaces_in
                fi
 
-               if ! $IPT4 -S mwan3_ifaces_out &> /dev/null; then
-                       $IPT4 -N mwan3_ifaces_out
-               fi
-
                if ! $IPT4 -S mwan3_iface_in_$1 &> /dev/null; then
                        $IPT4 -N mwan3_iface_in_$1
                fi
 
-               if ! $IPT4 -S mwan3_iface_out_$1 &> /dev/null; then
-                       $IPT4 -N mwan3_iface_out_$1
-               fi
-
                $IPT4 -F mwan3_iface_in_$1
-               $IPT4 -A mwan3_iface_in_$1 -i $2 -m set --match-set mwan3_connected src -m mark --mark 0x0/$MMX_MASK -m comment --comment "default" -j MARK --set-xmark $MMX_DEFAULT/$MMX_MASK
-               $IPT4 -A mwan3_iface_in_$1 -i $2 -m mark --mark 0x0/$MMX_MASK -m comment --comment "$1" -j MARK --set-xmark $(mwan3_id2mask id MMX_MASK)/$MMX_MASK
-
-               $IPT4 -D mwan3_ifaces_in -m mark --mark 0x0/$MMX_MASK -j mwan3_iface_in_$1 &> /dev/null
-               $IPT4 -A mwan3_ifaces_in -m mark --mark 0x0/$MMX_MASK -j mwan3_iface_in_$1
-
-               $IPT4 -F mwan3_iface_out_$1
-               $IPT4 -A mwan3_iface_out_$1 -o $2 -m mark --mark 0x0/$MMX_MASK -m comment --comment "$1" -j MARK --set-xmark $(mwan3_id2mask id MMX_MASK)/$MMX_MASK
-
-               $IPT4 -D mwan3_ifaces_out -m mark --mark 0x0/$MMX_MASK -j mwan3_iface_out_$1 &> /dev/null
-               $IPT4 -A mwan3_ifaces_out -m mark --mark 0x0/$MMX_MASK -j mwan3_iface_out_$1
+               $IPT4 -A mwan3_iface_in_$1 \
+                       -i $2 \
+                       -m set --match-set mwan3_connected src \
+                       -m mark --mark 0x0/$MMX_MASK \
+                       -m comment --comment "default" \
+                       -j MARK --set-xmark $MMX_DEFAULT/$MMX_MASK
+               $IPT4 -A mwan3_iface_in_$1 \
+                       -i $2 \
+                       -m mark --mark 0x0/$MMX_MASK \
+                       -m comment --comment "$1" \
+                       -j MARK --set-xmark $(mwan3_id2mask id MMX_MASK)/$MMX_MASK
+
+               $IPT4 -D mwan3_ifaces_in \
+                       -m mark --mark 0x0/$MMX_MASK \
+                       -j mwan3_iface_in_$1 &> /dev/null
+               $IPT4 -A mwan3_ifaces_in \
+                       -m mark --mark 0x0/$MMX_MASK \
+                       -j mwan3_iface_in_$1
        fi
 
        if [ "$family" == "ipv6" ]; then
@@ -274,30 +410,26 @@ mwan3_create_iface_iptables()
                        $IPT6 -N mwan3_ifaces_in
                fi
 
-               if ! $IPT6 -S mwan3_ifaces_out &> /dev/null; then
-                       $IPT6 -N mwan3_ifaces_out
-               fi
-
                if ! $IPT6 -S mwan3_iface_in_$1 &> /dev/null; then
                        $IPT6 -N mwan3_iface_in_$1
                fi
 
-               if ! $IPT6 -S mwan3_iface_out_$1 &> /dev/null; then
-                       $IPT6 -N mwan3_iface_out_$1
-               fi
-
                $IPT6 -F mwan3_iface_in_$1
-               $IPT6 -A mwan3_iface_in_$1 -i $2 -m set --match-set mwan3_connected_v6 src -m mark --mark 0x0/$MMX_MASK -m comment --comment "default" -j MARK --set-xmark $MMX_DEFAULT/$MMX_MASK
-               $IPT6 -A mwan3_iface_in_$1 -i $2 -m mark --mark 0x0/$MMX_MASK -m comment --comment "$1" -j MARK --set-xmark $(mwan3_id2mask id MMX_MASK)/$MMX_MASK
-
-               $IPT6 -D mwan3_ifaces_in -m mark --mark 0x0/$MMX_MASK -j mwan3_iface_in_$1 &> /dev/null
-               $IPT6 -A mwan3_ifaces_in -m mark --mark 0x0/$MMX_MASK -j mwan3_iface_in_$1
-
-               $IPT6 -F mwan3_iface_out_$1
-               $IPT6 -A mwan3_iface_out_$1 -o $2 -m mark --mark 0x0/$MMX_MASK -m comment --comment "$1" -j MARK --set-xmark $(mwan3_id2mask id MMX_MASK)/$MMX_MASK
-
-               $IPT6 -D mwan3_ifaces_out -m mark --mark 0x0/$MMX_MASK -j mwan3_iface_out_$1 &> /dev/null
-               $IPT6 -A mwan3_ifaces_out -m mark --mark 0x0/$MMX_MASK -j mwan3_iface_out_$1
+               $IPT6 -A mwan3_iface_in_$1 -i $2 \
+                       -m set --match-set mwan3_connected_v6 src \
+                       -m mark --mark 0x0/$MMX_MASK \
+                       -m comment --comment "default" \
+                       -j MARK --set-xmark $MMX_DEFAULT/$MMX_MASK
+               $IPT6 -A mwan3_iface_in_$1 -i $2 -m mark --mark 0x0/$MMX_MASK \
+                       -m comment --comment "$1" \
+                       -j MARK --set-xmark $(mwan3_id2mask id MMX_MASK)/$MMX_MASK
+
+               $IPT6 -D mwan3_ifaces_in \
+                       -m mark --mark 0x0/$MMX_MASK \
+                       -j mwan3_iface_in_$1 &> /dev/null
+               $IPT6 -A mwan3_ifaces_in \
+                       -m mark --mark 0x0/$MMX_MASK \
+                       -j mwan3_iface_in_$1
        fi
 }
 
@@ -307,30 +439,26 @@ mwan3_delete_iface_iptables()
 
        if [ "$family" == "ipv4" ]; then
 
-               $IPT4 -D mwan3_ifaces_in -m mark --mark 0x0/$MMX_MASK -j mwan3_iface_in_$1 &> /dev/null
+               $IPT4 -D mwan3_ifaces_in \
+                       -m mark --mark 0x0/$MMX_MASK \
+                       -j mwan3_iface_in_$1 &> /dev/null
                $IPT4 -F mwan3_iface_in_$1 &> /dev/null
                $IPT4 -X mwan3_iface_in_$1 &> /dev/null
-
-               $IPT4 -D mwan3_ifaces_out -m mark --mark 0x0/$MMX_MASK -j mwan3_iface_out_$1 &> /dev/null
-               $IPT4 -F mwan3_iface_out_$1 &> /dev/null
-               $IPT4 -X mwan3_iface_out_$1 &> /dev/null
        fi
 
        if [ "$family" == "ipv6" ]; then
 
-               $IPT6 -D mwan3_ifaces_in -m mark --mark 0x0/$MMX_MASK -j mwan3_iface_in_$1 &> /dev/null
+               $IPT6 -D mwan3_ifaces_in \
+                       -m mark --mark 0x0/$MMX_MASK \
+                       -j mwan3_iface_in_$1 &> /dev/null
                $IPT6 -F mwan3_iface_in_$1 &> /dev/null
                $IPT6 -X mwan3_iface_in_$1 &> /dev/null
-
-               $IPT6 -D mwan3_ifaces_out -m mark --mark 0x0/$MMX_MASK -j mwan3_iface_out_$1 &> /dev/null
-               $IPT6 -F mwan3_iface_out_$1 &> /dev/null
-               $IPT6 -X mwan3_iface_out_$1 &> /dev/null
        fi
 }
 
 mwan3_create_iface_route()
 {
-       local id route_args
+       local id route_args metric
 
        config_get family $1 family ipv4
        mwan3_get_iface_id id $1
@@ -350,8 +478,14 @@ mwan3_create_iface_route()
                        route_args=""
                fi
 
+               network_get_metric metric $1
+               if [ -n "$metric" -a "$metric" != "0" ]; then
+                       route_args="$route_args metric $metric"
+               fi
+
                $IP4 route flush table $id
                $IP4 route add table $id default $route_args dev $2
+               mwan3_rtmon_ipv4
        fi
 
        if [ "$family" == "ipv6" ]; then
@@ -367,8 +501,14 @@ mwan3_create_iface_route()
                        route_args=""
                fi
 
+               network_get_metric metric $1
+               if [ -n "$metric" -a "$metric" != "0" ]; then
+                       route_args="$route_args metric $metric"
+               fi
+
                $IP6 route flush table $id
                $IP6 route add table $id default $route_args dev $2
+               mwan3_rtmon_ipv6
        fi
 }
 
@@ -409,7 +549,7 @@ mwan3_create_iface_rules()
                        $IP4 rule del pref $(($id+2000))
                done
 
-               $IP4 rule add pref $(($id+1000)) iif $2 lookup main
+               $IP4 rule add pref $(($id+1000)) iif $2 lookup $id
                $IP4 rule add pref $(($id+2000)) fwmark $(mwan3_id2mask id MMX_MASK)/$MMX_MASK lookup $id
        fi
 
@@ -423,7 +563,7 @@ mwan3_create_iface_rules()
                        $IP6 rule del pref $(($id+2000))
                done
 
-               $IP6 rule add pref $(($id+1000)) iif $2 lookup main
+               $IP6 rule add pref $(($id+1000)) iif $2 lookup $id
                $IP6 rule add pref $(($id+2000)) fwmark $(mwan3_id2mask id MMX_MASK)/$MMX_MASK lookup $id
        fi
 }
@@ -475,6 +615,16 @@ mwan3_delete_iface_ipset_entries()
        done
 }
 
+mwan3_rtmon()
+{
+       pid="$(pgrep -f mwan3rtmon)"
+       if [ "${pid}" != "" ]; then
+               kill -USR1 "${pid}"
+       else
+               [ -x /usr/sbin/mwan3rtmon ] && /usr/sbin/mwan3rtmon &
+       fi
+}
+
 mwan3_track()
 {
        local track_ip track_ips pid
@@ -507,13 +657,14 @@ mwan3_track_signal()
 
 mwan3_set_policy()
 {
-       local iface_count id iface family metric probability weight
+       local iface_count id iface family metric probability weight device
 
        config_get iface $1 interface
        config_get metric $1 metric 1
        config_get weight $1 weight 1
 
        [ -n "$iface" ] || return 0
+       network_get_device device $iface
        [ "$metric" -gt $DEFAULT_LOWEST_METRIC ] && $LOG warn "Member interface $iface has >$DEFAULT_LOWEST_METRIC metric. Not appending to policy" && return 0
 
        mwan3_get_iface_id id $iface
@@ -529,7 +680,10 @@ mwan3_set_policy()
 
                                total_weight_v4=$weight
                                $IPT4 -F mwan3_policy_$policy
-                               $IPT4 -A mwan3_policy_$policy -m mark --mark 0x0/$MMX_MASK -m comment --comment "$iface $weight $weight" -j MARK --set-xmark $(mwan3_id2mask id MMX_MASK)/$MMX_MASK
+                               $IPT4 -A mwan3_policy_$policy \
+                                       -m mark --mark 0x0/$MMX_MASK \
+                                       -m comment --comment "$iface $weight $weight" \
+                                       -j MARK --set-xmark $(mwan3_id2mask id MMX_MASK)/$MMX_MASK
 
                                lowest_metric_v4=$metric
 
@@ -550,8 +704,20 @@ mwan3_set_policy()
 
                                probability="-m statistic --mode random --probability $probability"
 
-                               $IPT4 -I mwan3_policy_$policy -m mark --mark 0x0/$MMX_MASK $probability -m comment --comment "$iface $weight $total_weight_v4" -j MARK --set-xmark $(mwan3_id2mask id MMX_MASK)/$MMX_MASK
+                               $IPT4 -I mwan3_policy_$policy \
+                                       -m mark --mark 0x0/$MMX_MASK $probability \
+                                       -m comment --comment "$iface $weight $total_weight_v4" \
+                                       -j MARK --set-xmark $(mwan3_id2mask id MMX_MASK)/$MMX_MASK
                        fi
+               else
+                       [ -n "$device" ] && {
+                               $IPT4 -S mwan3_policy_$policy | grep -q '.*--comment ".* [0-9]* [0-9]*"' || \
+                                       $IPT4 -I mwan3_policy_$policy \
+                                       -o $device \
+                                       -m mark --mark 0x0/$MMX_MASK \
+                                       -m comment --comment "out $iface $device" \
+                                       -j MARK --set-xmark $MMX_DEFAULT/$MMX_MASK
+                       }
                fi
        fi
 
@@ -562,7 +728,10 @@ mwan3_set_policy()
 
                                total_weight_v6=$weight
                                $IPT6 -F mwan3_policy_$policy
-                               $IPT6 -A mwan3_policy_$policy -m mark --mark 0x0/$MMX_MASK -m comment --comment "$iface $weight $weight" -j MARK --set-xmark $(mwan3_id2mask id MMX_MASK)/$MMX_MASK
+                               $IPT6 -A mwan3_policy_$policy \
+                                       -m mark --mark 0x0/$MMX_MASK \
+                                       -m comment --comment "$iface $weight $weight" \
+                                       -j MARK --set-xmark $(mwan3_id2mask id MMX_MASK)/$MMX_MASK
 
                                lowest_metric_v6=$metric
 
@@ -583,8 +752,21 @@ mwan3_set_policy()
 
                                probability="-m statistic --mode random --probability $probability"
 
-                               $IPT6 -I mwan3_policy_$policy -m mark --mark 0x0/$MMX_MASK $probability -m comment --comment "$iface $weight $total_weight_v6" -j MARK --set-xmark $(mwan3_id2mask id MMX_MASK)/$MMX_MASK
+                               $IPT6 -I mwan3_policy_$policy \
+                                       -m mark --mark 0x0/$MMX_MASK \
+                                       $probability \
+                                       -m comment --comment "$iface $weight $total_weight_v6" \
+                                       -j MARK --set-xmark $(mwan3_id2mask id MMX_MASK)/$MMX_MASK
                        fi
+               else
+                       [ -n "$device" ] && {
+                               $IPT6 -S mwan3_policy_$policy | grep -q '.*--comment ".* [0-9]* [0-9]*"' || \
+                                       $IPT6 -I mwan3_policy_$policy \
+                                       -o $device \
+                                       -m mark --mark 0x0/$MMX_MASK \
+                                       -m comment --comment "out $iface $device" \
+                                       -j MARK --set-xmark $MMX_DEFAULT/$MMX_MASK
+                       }
                fi
        fi
 }
@@ -611,13 +793,22 @@ mwan3_create_policies_iptables()
 
                case "$last_resort" in
                        blackhole)
-                               $IPT -A mwan3_policy_$1 -m mark --mark 0x0/$MMX_MASK -m comment --comment "blackhole" -j MARK --set-xmark $MMX_BLACKHOLE/$MMX_MASK
+                               $IPT -A mwan3_policy_$1 \
+                                       -m mark --mark 0x0/$MMX_MASK \
+                                       -m comment --comment "blackhole" \
+                                       -j MARK --set-xmark $MMX_BLACKHOLE/$MMX_MASK
                        ;;
                        default)
-                               $IPT -A mwan3_policy_$1 -m mark --mark 0x0/$MMX_MASK -m comment --comment "default" -j MARK --set-xmark $MMX_DEFAULT/$MMX_MASK
+                               $IPT -A mwan3_policy_$1 \
+                                       -m mark --mark 0x0/$MMX_MASK \
+                                       -m comment --comment "default" \
+                                       -j MARK --set-xmark $MMX_DEFAULT/$MMX_MASK
                        ;;
                        *)
-                               $IPT -A mwan3_policy_$1 -m mark --mark 0x0/$MMX_MASK -m comment --comment "unreachable" -j MARK --set-xmark $MMX_UNREACHABLE/$MMX_MASK
+                               $IPT -A mwan3_policy_$1 \
+                                       -m mark --mark 0x0/$MMX_MASK \
+                                       -m comment --comment "unreachable" \
+                                       -j MARK --set-xmark $MMX_UNREACHABLE/$MMX_MASK
                        ;;
                esac
        done
@@ -649,9 +840,14 @@ mwan3_set_sticky_iptables()
                        [ -n "$id" ] || return 0
 
                        for IPT in "$IPT4" "$IPT6"; do
-                               if [ -n "$($IPT -S mwan3_iface_in_$1 2> /dev/null)" -a -n "$($IPT -S mwan3_iface_out_$1 2> /dev/null)" ]; then
-                                       $IPT -I mwan3_rule_$rule -m mark --mark $(mwan3_id2mask id MMX_MASK)/$MMX_MASK -m set ! --match-set mwan3_sticky_$rule src,src -j MARK --set-xmark 0x0/$MMX_MASK
-                                       $IPT -I mwan3_rule_$rule -m mark --mark 0/$MMX_MASK -j MARK --set-xmark $(mwan3_id2mask id MMX_MASK)/$MMX_MASK
+                               if [ -n "$($IPT -S mwan3_iface_in_$1 2> /dev/null)" ]; then
+                                       $IPT -I mwan3_rule_$rule \
+                                               -m mark --mark $(mwan3_id2mask id MMX_MASK)/$MMX_MASK \
+                                               -m set ! --match-set mwan3_sticky_$rule src,src \
+                                               -j MARK --set-xmark 0x0/$MMX_MASK
+                                       $IPT -I mwan3_rule_$rule \
+                                               -m mark --mark 0/$MMX_MASK \
+                                               -j MARK --set-xmark $(mwan3_id2mask id MMX_MASK)/$MMX_MASK
                                fi
                        done
                fi
@@ -707,8 +903,12 @@ mwan3_set_user_iptables_rule()
                                        $IPT -F mwan3_rule_$1
                                done
 
-                               $IPS -! create mwan3_sticky_v4_$rule hash:ip,mark markmask $MMX_MASK timeout $timeout
-                               $IPS -! create mwan3_sticky_v6_$rule hash:ip,mark markmask $MMX_MASK timeout $timeout family inet6
+                               $IPS -! create mwan3_sticky_v4_$rule \
+                                       hash:ip,mark markmask $MMX_MASK \
+                                       timeout $timeout
+                               $IPS -! create mwan3_sticky_v6_$rule \
+                                       hash:ip,mark markmask $MMX_MASK \
+                                       timeout $timeout family inet6
                                $IPS -! create mwan3_sticky_$rule list:set
                                $IPS -! add mwan3_sticky_$rule mwan3_sticky_v4_$rule
                                $IPS -! add mwan3_sticky_$rule mwan3_sticky_v6_$rule
@@ -716,9 +916,15 @@ mwan3_set_user_iptables_rule()
                                config_foreach mwan3_set_sticky_iptables interface
 
                                for IPT in "$IPT4" "$IPT6"; do
-                                       $IPT -A mwan3_rule_$1 -m mark --mark 0/$MMX_MASK -j $policy
-                                       $IPT -A mwan3_rule_$1 -m mark ! --mark 0xfc00/0xfc00 -j SET --del-set mwan3_sticky_$rule src,src
-                                       $IPT -A mwan3_rule_$1 -m mark ! --mark 0xfc00/0xfc00 -j SET --add-set mwan3_sticky_$rule src,src
+                                       $IPT -A mwan3_rule_$1 \
+                                               -m mark --mark 0/$MMX_MASK \
+                                               -j $policy
+                                       $IPT -A mwan3_rule_$1 \
+                                               -m mark ! --mark 0xfc00/0xfc00 \
+                                               -j SET --del-set mwan3_sticky_$rule src,src
+                                       $IPT -A mwan3_rule_$1 \
+                                               -m mark ! --mark 0xfc00/0xfc00 \
+                                               -j SET --add-set mwan3_sticky_$rule src,src
                                done
 
                                policy="mwan3_rule_$1"
@@ -739,10 +945,24 @@ mwan3_set_user_iptables_rule()
                        for IPT in "$IPT4" "$IPT6"; do
                                case $proto in
                                        tcp|udp)
-                                       $IPT -A mwan3_rules -p $proto -s $src_ip -d $dest_ip $ipset -m multiport --sports $src_port -m multiport --dports $dest_port -m mark --mark 0/$MMX_MASK -m comment --comment "$1" -j $policy &> /dev/null
+                                       $IPT -A mwan3_rules \
+                                               -p $proto \
+                                               -s $src_ip \
+                                               -d $dest_ip $ipset \
+                                               -m multiport --sports $src_port \
+                                               -m multiport --dports $dest_port \
+                                               -m mark --mark 0/$MMX_MASK \
+                                               -m comment --comment "$1" \
+                                               -j $policy &> /dev/null
                                        ;;
                                        *)
-                                       $IPT -A mwan3_rules -p $proto -s $src_ip -d $dest_ip $ipset -m mark --mark 0/$MMX_MASK -m comment --comment "$1" -j $policy &> /dev/null
+                                       $IPT -A mwan3_rules \
+                                               -p $proto \
+                                               -s $src_ip \
+                                               -d $dest_ip $ipset \
+                                               -m mark --mark 0/$MMX_MASK \
+                                               -m comment --comment "$1" \
+                                               -j $policy &> /dev/null
                                        ;;
                                esac
                        done
@@ -751,10 +971,24 @@ mwan3_set_user_iptables_rule()
 
                        case $proto in
                                tcp|udp)
-                               $IPT4 -A mwan3_rules -p $proto -s $src_ip -d $dest_ip $ipset -m multiport --sports $src_port -m multiport --dports $dest_port -m mark --mark 0/$MMX_MASK -m comment --comment "$1" -j $policy &> /dev/null
+                               $IPT4 -A mwan3_rules \
+                                       -p $proto \
+                                       -s $src_ip \
+                                       -d $dest_ip $ipset \
+                                       -m multiport --sports $src_port \
+                                       -m multiport --dports $dest_port \
+                                       -m mark --mark 0/$MMX_MASK \
+                                       -m comment --comment "$1" \
+                                       -j $policy &> /dev/null
                                ;;
                                *)
-                               $IPT4 -A mwan3_rules -p $proto -s $src_ip -d $dest_ip $ipset -m mark --mark 0/$MMX_MASK -m comment --comment "$1" -j $policy &> /dev/null
+                               $IPT4 -A mwan3_rules \
+                                       -p $proto \
+                                       -s $src_ip \
+                                       -d $dest_ip $ipset \
+                                       -m mark --mark 0/$MMX_MASK \
+                                       -m comment --comment "$1" \
+                                       -j $policy &> /dev/null
                                ;;
                        esac
 
@@ -762,10 +996,24 @@ mwan3_set_user_iptables_rule()
 
                        case $proto in
                                tcp|udp)
-                               $IPT6 -A mwan3_rules -p $proto -s $src_ip -d $dest_ip $ipset -m multiport --sports $src_port -m multiport --dports $dest_port -m mark --mark 0/$MMX_MASK -m comment --comment "$1" -j $policy &> /dev/null
+                               $IPT6 -A mwan3_rules \
+                                       -p $proto \
+                                       -s $src_ip \
+                                       -d $dest_ip $ipset \
+                                       -m multiport --sports $src_port \
+                                       -m multiport --dports $dest_port \
+                                       -m mark --mark 0/$MMX_MASK \
+                                       -m comment --comment "$1" \
+                                       -j $policy &> /dev/null
                                ;;
                                *)
-                               $IPT6 -A mwan3_rules -p $proto -s $src_ip -d $dest_ip $ipset -m mark --mark 0/$MMX_MASK -m comment --comment "$1" -j $policy &> /dev/null
+                               $IPT6 -A mwan3_rules \
+                                       -p $proto \
+                                       -s $src_ip \
+                                       -d $dest_ip $ipset \
+                                       -m mark --mark 0/$MMX_MASK \
+                                       -m comment --comment "$1" \
+                                       -j $policy &> /dev/null
                                ;;
                        esac
                fi
@@ -822,9 +1070,15 @@ mwan3_report_iface_status()
 
        if [ -z "$id" -o -z "$device" ]; then
                result="unknown"
-       elif [ -n "$($IP rule | awk '$1 == "'$(($id+1000)):'"')" -a -n "$($IP rule | awk '$1 == "'$(($id+2000)):'"')" -a -n "$($IPT -S mwan3_iface_in_$1 2> /dev/null)" -a -n "$($IPT -S mwan3_iface_out_$1 2> /dev/null)" -a -n "$($IP route list table $id default dev $device 2> /dev/null)" ]; then
+       elif [ -n "$($IP rule | awk '$1 == "'$(($id+1000)):'"')" ] && \
+               [ -n "$($IP rule | awk '$1 == "'$(($id+2000)):'"')" ] && \
+               [ -n "$($IPT -S mwan3_iface_in_$1 2> /dev/null)" ] && \
+               [ -n "$($IP route list table $id default dev $device 2> /dev/null)" ]; then
                result="$(mwan3_get_iface_hotplug_state $1)"
-       elif [ -n "$($IP rule | awk '$1 == "'$(($id+1000)):'"')" -o -n "$($IP rule | awk '$1 == "'$(($id+2000)):'"')" -o -n "$($IPT -S mwan3_iface_in_$1 2> /dev/null)" -o -n "$($IPT -S mwan3_iface_out_$1 2> /dev/null)" -o -n "$($IP route list table $id default dev $device 2> /dev/null)" ]; then
+       elif [ -n "$($IP rule | awk '$1 == "'$(($id+1000)):'"')" ] || \
+               [ -n "$($IP rule | awk '$1 == "'$(($id+2000)):'"')" ] || \
+               [ -n "$($IPT -S mwan3_iface_in_$1 2> /dev/null)" ] || \
+               [ -n "$($IP route list table $id default dev $device 2> /dev/null)" ]; then
                result="error"
        elif [ "$enabled" == "1" ]; then
                result="offline"
@@ -851,53 +1105,43 @@ mwan3_report_iface_status()
        echo " interface $1 is $result and tracking is $tracking"
 }
 
-mwan3_report_policies_v4()
+mwan3_report_policies()
 {
-       local percent policy share total_weight weight iface
+       local ipt="$1"
+       local policy="$2"
 
-       for policy in $($IPT4 -S | awk '{print $2}' | grep mwan3_policy_ | sort -u); do
-               echo "$policy:" | sed 's/mwan3_policy_//'
+       local percent total_weight weight iface
 
-               [ -n "$total_weight" ] || total_weight=$($IPT4 -S $policy | cut -s -d'"' -f2 | head -1 | awk '{print $3}')
+       total_weight=$($ipt -S $policy | grep -v '.*--comment "out .*" .*$' | cut -s -d'"' -f2 | head -1 | awk '{print $3}')
 
-               if [ ! -z "${total_weight##*[!0-9]*}" ]; then
-                       for iface in $($IPT4 -S $policy | cut -s -d'"' -f2 | awk '{print $1}'); do
-                               weight=$($IPT4 -S $policy | cut -s -d'"' -f2 | awk '$1 == "'$iface'"' | awk '{print $2}')
-                               percent=$(($weight*100/$total_weight))
-                               echo " $iface ($percent%)"
-                       done
-               else
-                       echo " $($IPT4 -S $policy | sed '/.*--comment \([^ ]*\) .*$/!d;s//\1/;q')"
-               fi
+       if [ ! -z "${total_weight##*[!0-9]*}" ]; then
+               for iface in $($ipt -S $policy | grep -v '.*--comment "out .*" .*$' | cut -s -d'"' -f2 | awk '{print $1}'); do
+                       weight=$($ipt -S $policy | grep -v '.*--comment "out .*" .*$' | cut -s -d'"' -f2 | awk '$1 == "'$iface'"' | awk '{print $2}')
+                       percent=$(($weight*100/$total_weight))
+                       echo " $iface ($percent%)"
+               done
+       else
+               echo " $($ipt -S $policy | grep -v '.*--comment "out .*" .*$' | sed '/.*--comment \([^ ]*\) .*$/!d;s//\1/;q')"
+       fi
+}
 
-               unset total_weight
+mwan3_report_policies_v4()
+{
+       local policy
 
-               echo -e
+       for policy in $($IPT4 -S | awk '{print $2}' | grep mwan3_policy_ | sort -u); do
+               echo "$policy:" | sed 's/mwan3_policy_//'
+               mwan3_report_policies "$IPT4" "$policy"
        done
 }
 
 mwan3_report_policies_v6()
 {
-       local percent policy share total_weight weight iface
+       local policy
 
        for policy in $($IPT6 -S | awk '{print $2}' | grep mwan3_policy_ | sort -u); do
                echo "$policy:" | sed 's/mwan3_policy_//'
-
-               [ -n "$total_weight" ] || total_weight=$($IPT6 -S $policy | cut -s -d'"' -f2 | head -1 | awk '{print $3}')
-
-               if [ ! -z "${total_weight##*[!0-9]*}" ]; then
-                       for iface in $($IPT6 -S $policy | cut -s -d'"' -f2 | awk '{print $1}'); do
-                               weight=$($IPT6 -S $policy | cut -s -d'"' -f2 | awk '$1 == "'$iface'"' | awk '{print $2}')
-                               percent=$(($weight*100/$total_weight))
-                               echo " $iface ($percent%)"
-                       done
-               else
-                       echo " $($IPT6 -S $policy | sed '/.*--comment \([^ ]*\) .*$/!d;s//\1/;q')"
-               fi
-
-               unset total_weight
-
-               echo -e
+               mwan3_report_policies "$IPT6" "$policy"
        done
 }
 
@@ -906,9 +1150,7 @@ mwan3_report_connected_v4()
        local address
 
        if [ -n "$($IPT4 -S mwan3_connected 2> /dev/null)" ]; then
-               for address in $($IPS list mwan3_connected_v4 | egrep '[0-9]{1,3}(\.[0-9]{1,3}){3}'); do
-                       echo " $address"
-               done
+               $IPS -o save list mwan3_connected_v4 | grep add | cut -d " " -f 3
        fi
 }
 
@@ -917,9 +1159,7 @@ mwan3_report_connected_v6()
        local address
 
        if [ -n "$($IPT6 -S mwan3_connected 2> /dev/null)" ]; then
-               for address in $($IPS list mwan3_connected_v6 | egrep '([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])'); do
-                       echo " $address"
-               done
+               $IPS -o save list mwan3_connected_v6 | grep add | cut -d " " -f 3
        fi
 }
 
@@ -979,3 +1219,25 @@ mwan3_track_clean()
                fi
        }
 }
+
+mwan3_online_metric_clean() {
+       local iface="$1"
+
+       local online_metric ifname
+
+       config_get family $iface family ipv4
+       config_get online_metric $iface online_metric ""
+       ifname=$(uci_get_state network $iface ifname)
+
+       if [ "$family" == "ipv4" ] \
+               && [ "$online_metric" != "" ] \
+               && [ "$ifname" != "" ]; then
+               $IP4 route del default dev $ifname proto static metric $online_metric 1>/dev/null 2>&1
+       fi
+
+       if [ "$family" == "ipv6" ] \
+               && [ "$online_metric" != "" ] \
+               && [ "$ifname" != "" ]; then
+               $IP6 route del default dev $ifname proto static metric $online_metric 1>/dev/null 2>&1
+       fi
+}
index eb5f98ce5d5988a87d229e29ad04db394c553d07..dc4eeb6df6b2a51e1b27a93a68f69f2b1cf82825 100755 (executable)
@@ -15,7 +15,7 @@ report_connected_v4() {
        local address
 
        if [ -n "$($IPT4 -S mwan3_connected 2> /dev/null)" ]; then
-               for address in $($IPS list mwan3_connected_v4 | tail -n +8); do
+               for address in $($IPS -o save list mwan3_connected_v4 | grep add | cut -d " " -f 3); do
                        json_add_string "" "${address}"
                done
        fi
@@ -25,7 +25,7 @@ report_connected_v6() {
        local address
 
        if [ -n "$($IPT6 -S mwan3_connected 2> /dev/null)" ]; then
-               for address in $($IPS list mwan3_connected_v6 | tail -n +8); do
+               for address in $($IPS -o save list mwan3_connected_v6 | grep add | cut -d " " -f 3); do
                        json_add_string "" "${address}"
                done
        fi
@@ -36,7 +36,9 @@ get_mwan3_status() {
        local iface_select="${2}"
        local running="0"
        local age=0
-       local pid device time_p time_n
+       local uptime=0
+       local downtime=0
+       local pid device time_p time_n time_u time_d
 
        network_get_device device $1
 
@@ -52,8 +54,22 @@ get_mwan3_status() {
                        let age=time_n-time_p
                }
 
+               time_u="$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/UPTIME")"
+               [ -z "${time_u}" ] || [ "${time_u}" = "0" ] || {
+                       time_n="$(get_uptime)"
+                       let uptime=time_n-time_u
+               }
+
+               time_d="$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/DOWNTIME")"
+               [ -z "${time_d}" ] || [ "${time_d}" = "0" ] || {
+                       time_n="$(get_uptime)"
+                       let downtime=time_n-time_d
+               }
+
                json_add_object "${iface}"
                json_add_int age "$age"
+               json_add_int uptime "${uptime}"
+               json_add_int downtime "${downtime}"
                json_add_int "score" "$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/SCORE")"
                json_add_int "lost" "$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/LOST")"
                json_add_int "turn" "$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/TURN")"
index a0c296f18e2bc0ea2acce0787163a596723a044f..139da3d259c2ebce51936db28de71ca9af100326 100755 (executable)
@@ -43,9 +43,15 @@ ifdown()
 
 ifup()
 {
-       local device enabled up l3_device
+       local device enabled up l3_device status
 
        config_load mwan3
+       config_get_bool enabled globals 'enabled' 0
+       [ ${enabled} -gt 0 ] || {
+               echo "The service mwan3 is global disabled."
+               echo "Please execute \"/etc/init.d/mwan3 start\" first."
+               exit 1
+       }
 
        if [ -z "$1" ]; then
                echo "Expecting interface. Usage: mwan3 ifup <interface>" && exit 0
@@ -61,13 +67,18 @@ ifup()
                exit 0
        }
 
-       json_load $(ubus -S call network.interface.$1 status)
-       json_get_vars up l3_device
+       status=$(ubus -S call network.interface.$1 status)
+       [ -n "$status" ] && {
+               json_load $status
+               json_get_vars up l3_device 
+       }
+
        config_get enabled "$1" enabled 0
 
-       if [ "$up" -eq 1 ] \
+
+       if [ "$up" = "1" ] \
                && [ -n "$l3_device" ] \
-               && [ "$enabled" -eq 1 ]; then
+               && [ "$enabled" = "1" ]; then
                ACTION=ifup INTERFACE=$1 DEVICE=$l3_device /sbin/hotplug-call iface
        fi
 }
@@ -123,12 +134,7 @@ start()
 {
        local enabled src_ip local_source
 
-       config_load mwan3
-       config_get_bool enabled globals 'enabled' 0
-       [ ${enabled} -gt 0 ] || {
-               echo "Warning: mwan3 is global disabled. Usage: /etc/init.d/mwan3 start"
-               exit 0
-       }
+       uci_toggle_state mwan3 globals enabled "1"
 
        config_get local_source globals local_source 'none'
        [ "${local_source}" = "none" ] || {
@@ -155,6 +161,12 @@ stop()
 {
        local ipset route rule table IP IPT pid src_ip
 
+       for pid in $(pgrep -f "mwan3rtmon"); do
+               kill -TERM "$pid" > /dev/null 2>&1
+               sleep 1
+               kill -KILL "$pid" > /dev/null 2>&1
+       done
+
        for pid in $(pgrep -f "mwan3track"); do
                kill -TERM "$pid" > /dev/null 2>&1
                sleep 1
@@ -163,6 +175,7 @@ stop()
 
        config_load mwan3
        config_foreach mwan3_track_clean interface
+       config_foreach mwan3_online_metric_clean interface
 
        for IP in "$IP4" "$IP6"; do
 
@@ -205,6 +218,8 @@ stop()
                ip route del default via "${src_ip}" dev lo 1>/dev/null 2>&1
                ip addr del "${src_ip}/32" dev lo 1>/dev/null 2>&1
        }
+
+       uci_toggle_state mwan3 globals enabled "0"
 }
 
 restart() {
diff --git a/net/mwan3/files/usr/sbin/mwan3rtmon b/net/mwan3/files/usr/sbin/mwan3rtmon
new file mode 100755 (executable)
index 0000000..667d0cc
--- /dev/null
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /lib/mwan3/mwan3.sh
+
+LOG="logger -t $(basename "$0")[$$] -p"
+
+clean_up() {
+       $LOG notice "Stopping mwan3rtmon..."
+       exit 0
+}
+
+rtchange() {
+       $LOG info "Detect rtchange event."
+}
+
+main() {
+       local rtmon_interval
+       trap clean_up TERM
+       trap rtchange USR1
+
+       config_load mwan3
+       config_get rtmon_interval globals rtmon_interval '5'
+
+       sleep 3
+       while mwan3_rtmon_ipv4 || mwan3_rtmon_ipv6; do
+               [ "$rtmon_interval" = "0" ] && break
+               sleep $rtmon_interval
+       done
+}
+
+main "$@"
index 274a024cc833d5d5a935b94433d3ceb099ca3b8d..4208784725fac630f00fc9ac36af1fd7781d1484 100755 (executable)
@@ -55,6 +55,7 @@ main() {
        local recovery_interval down up size
        local keep_failure_interval check_quality failure_latency
        local recovery_latency failure_loss recovery_loss
+       local max_ttl
 
        [ -z "$5" ] && echo "Error: should not be started manually" && exit 0
 
@@ -84,6 +85,7 @@ main() {
        config_get down $1 down 5
        config_get up $1 up 5
        config_get size $1 size 56
+       config_get max_ttl $1 max_ttl 60
        config_get failure_interval $1 failure_interval $interval
        config_get_bool keep_failure_interval $1 keep_failure_interval 0
        config_get recovery_interval $1 recovery_interval $interval
@@ -106,9 +108,13 @@ main() {
 
        if [ "$STATUS" = "unknown" ]; then
                echo "unknown" > /var/run/mwan3track/$1/STATUS
+               echo "0" > /var/run/mwan3track/$1/UPTIME
+               echo "$(get_uptime)" > /var/run/mwan3track/$1/DOWNTIME
                score=0
        else
                echo "online" > /var/run/mwan3track/$1/STATUS
+               echo "0" > /var/run/mwan3track/$1/DOWNTIME
+               echo "$(get_uptime)" > /var/run/mwan3track/$1/UPTIME
                env -i ACTION="connected" INTERFACE="$1" DEVICE="$2" /sbin/hotplug-call iface
        fi
        while true; do
@@ -120,10 +126,10 @@ main() {
                                case "$track_method" in
                                        ping)
                                                if [ $check_quality -eq 0 ]; then
-                                                       ping -I $DEVICE -c $count -W $timeout -s $size -q $track_ip &> /dev/null
+                                                       ping -I $DEVICE -c $count -W $timeout -s $size -t $max_ttl -q $track_ip &> /dev/null
                                                        result=$?
                                                else
-                                                       ping_result="$(ping -I $DEVICE -c $count -W $timeout -s $size -q $track_ip | tail -2)"
+                                                       ping_result="$(ping -I $DEVICE -c $count -W $timeout -s $size -t $max_ttl -q $track_ip | tail -2)"
                                                        loss="$(echo "$ping_result" | grep "packet loss" |  cut -d "," -f3 | awk '{print $1}' | sed -e 's/%//')"
                                                        if [ "$loss" -eq 100 ]; then
                                                                latency=999999
@@ -197,6 +203,8 @@ main() {
 
                        if [ $score -eq $up ]; then
                                echo "offline" > /var/run/mwan3track/$1/STATUS
+                               echo "0" > /var/run/mwan3track/$1/UPTIME
+                               echo "$(get_uptime)" > /var/run/mwan3track/$1/DOWNTIME
                                $LOG notice "Interface $1 ($2) is offline"
                                env -i ACTION=ifdown INTERFACE=$1 DEVICE=$2 /sbin/hotplug-call iface
                                env -i ACTION="disconnected" INTERFACE="$1" DEVICE="$2" /sbin/hotplug-call iface
@@ -237,8 +245,12 @@ main() {
                wait
 
                if [ "${IFDOWN_EVENT}" -eq 1 ]; then
-                       score=0
                        echo "offline" > /var/run/mwan3track/$1/STATUS
+                       echo "$(get_uptime)" > /var/run/mwan3track/$1/DOWNTIME
+                       echo "0" > /var/run/mwan3track/$1/UPTIME
+                       $LOG notice "Interface $1 ($2) is offline"
+                       env -i ACTION="disconnected" INTERFACE="$1" DEVICE="$2" /sbin/hotplug-call iface
+                       score=0
                        IFDOWN_EVENT=0
                fi
        done
index ecb4efa123934b38829d2afe6240964a8a86fd2a..8fa011523af05616bef194c78fd7f3668da9492d 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=net-snmp
-PKG_VERSION:=5.7.3
-PKG_RELEASE:=10
+PKG_VERSION:=5.8
+PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=@SF/net-snmp
-PKG_HASH:=12ef89613c7707dc96d13335f153c1921efc9d61d3708ef09f3fc4a7014fb4f0
+PKG_HASH:=b2fc3500840ebe532734c4786b0da4ef0a5f67e51ef4c86b3345d697e4976adf
 PKG_MAINTAINER:=Stijn Tintel <stijn@linux-ipv6.be>
 PKG_LICENSE:=MIT BSD-3-Clause-Clear
 
@@ -209,6 +209,7 @@ CONFIGURE_ARGS += \
 
 CONFIGURE_VARS += \
        ac_cv_header_netlink_netlink_h=yes \
+       ac_cv_header_pcre_h=no \
        netsnmp_cv_func_nl_connect_LIBS=-lnl-tiny \
 
 ifeq ($(CONFIG_IPV6),y)
index 290622098e79519331039df433faeb1753e24f6a..730bdbcfc925ea2d92db703f52b912defc8f52d2 100644 (file)
@@ -15,14 +15,14 @@ link tests to fail due to a stray "no" word getting passed to the linker.
 Signed-off-by: Jo-Philipp Wich <jo@mein.io>
 --- a/configure.d/config_os_libs2
 +++ b/configure.d/config_os_libs2
-@@ -226,14 +226,22 @@ if test "x$with_nl" != "xno"; then
-     case $target_os in
-     linux*) # Check for libnl (linux)
+@@ -254,14 +254,22 @@ if test "x$with_nl" != "xno"; then
+         )
          netsnmp_save_CPPFLAGS="$CPPFLAGS"
--        CPPFLAGS="-I/usr/include/libnl3 $CPPFLAGS"
+-        CPPFLAGS="${LIBNL3_CFLAGS} $CPPFLAGS"
 -        NETSNMP_SEARCH_LIBS(nl_connect, nl-3,
 -            [AC_CHECK_HEADERS(netlink/netlink.h)
--            EXTERNAL_MIBGROUP_INCLUDES="$EXTERNAL_MIBGROUP_INCLUDES -I/usr/include/libnl3"],
+-            EXTERNAL_MIBGROUP_INCLUDES="$EXTERNAL_MIBGROUP_INCLUDES ${LIBNL3_CFLAGS}"],
 -            [CPPFLAGS="$netsnmp_save_CPPFLAGS"], [], [], [LMIBLIBS])
 +        netsnmp_netlink_include_flags=""
          if test "x$ac_cv_header_netlink_netlink_h" != xyes; then
index c6e1db44803186170f7cddc49c301cbe2eadcb82..2b24d94438569542c1fcfb4b3c129adbf2246403 100644 (file)
@@ -1,6 +1,6 @@
 --- a/agent/mibgroup/mibII/interfaces.c
 +++ b/agent/mibgroup/mibII/interfaces.c
-@@ -1590,6 +1590,10 @@ Interface_Scan_Init(void)
+@@ -1588,6 +1588,10 @@ Interface_Scan_Init(void)
          struct ifnet   *nnew;
          char           *stats, *ifstart = line;
  
@@ -11,7 +11,7 @@
          if (line[strlen(line) - 1] == '\n')
              line[strlen(line) - 1] = '\0';
  
-@@ -1622,7 +1622,7 @@ Interface_Scan_Init(void)
+@@ -1620,7 +1624,7 @@ Interface_Scan_Init(void)
                                                 &coll) != 5)) {
              if ((scan_line_to_use == scan_line_2_2)
                  && !strstr(line, "No statistics available"))
index 5ace743218d1350f82b86f095bd341200465c419..7b71ed0874e79198acf700050fceb1d091d2f84b 100644 (file)
@@ -1,7 +1,7 @@
 diff -uNr a/local/Makefile.in b/local/Makefile.in
 --- a/local/Makefile.in        2014-02-20 08:36:42.000000000 +0800
 +++ b/local/Makefile.in        2014-05-27 13:21:34.245223503 +0800
-@@ -103,7 +103,7 @@
+@@ -101,7 +101,7 @@
  
  mib2c.made: $(srcdir)/mib2c
        if test "x$(PERL)" != "x" ; then \
@@ -13,7 +13,7 @@ diff -uNr a/local/Makefile.in b/local/Makefile.in
 diff -uNr a/Makefile.top b/Makefile.top
 --- a/Makefile.top     2014-02-20 08:36:42.000000000 +0800
 +++ b/Makefile.top     2014-05-27 13:26:53.023737120 +0800
-@@ -27,6 +27,7 @@
+@@ -28,6 +28,7 @@
  snmplibdir    = $(datadir)/snmp
  mibdir                = $(snmplibdir)/mibs
  persistentdir = @PERSISTENT_DIRECTORY@
@@ -24,7 +24,7 @@ diff -uNr a/Makefile.top b/Makefile.top
 diff -uNr a/mibs/Makefile.in b/mibs/Makefile.in
 --- a/mibs/Makefile.in 2014-02-20 08:36:42.000000000 +0800
 +++ b/mibs/Makefile.in 2014-05-27 13:25:07.151988585 +0800
-@@ -49,11 +49,15 @@
+@@ -47,11 +47,15 @@
  UCDMIBS = UCD-SNMP-MIB.txt UCD-DEMO-MIB.txt UCD-IPFWACC-MIB.txt \
        UCD-DLMOD-MIB.txt UCD-DISKIO-MIB.txt
  
index 7b65c1867cc5f1f7f6f416fb965e6027f4ddc8f6..d9de73e0d14ae5f52760a89973f43824a136fd51 100644 (file)
@@ -1,6 +1,6 @@
 --- a/configure
 +++ b/configure
-@@ -14197,7 +14197,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+@@ -15097,7 +15097,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
    need_version=no
    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
    soname_spec='${libname}${release}${shared_ext}$major'
index 2d572c06fee352410e77f29ee3b8b91fdc310c21..656fdede49cc5a063d80c1ba225e6ed75ce96dc5 100644 (file)
@@ -1,8 +1,8 @@
 --- a/Makefile.top
 +++ b/Makefile.top
-@@ -85,7 +85,7 @@ LIBCURRENT  = 30
+@@ -87,7 +87,7 @@ LIBCURRENT  = 30
  LIBAGE      = 0
- LIBREVISION = 3
+ LIBREVISION = 0
  
 -LIB_LD_CMD      = $(LIBTOOL) --mode=link $(LINKCC) $(CFLAGS) -rpath $(libdir) -version-info $(LIBCURRENT):$(LIBREVISION):$(LIBAGE) -o
 +LIB_LD_CMD      = $(LIBTOOL) --mode=link $(LINKCC) $(CFLAGS) -rpath $(libdir) $(LDFLAGS) -version-info $(LIBCURRENT):$(LIBREVISION):$(LIBAGE) -o
diff --git a/net/netopeer2/Config_keystored.in b/net/netopeer2/Config_keystored.in
deleted file mode 100644 (file)
index 7325250..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-if PACKAGE_netopeer2-keystored
-
-config SSH_KEYS
-       bool "Generate default ssh keys"
-       default y
-
-endif
diff --git a/net/netopeer2/Makefile b/net/netopeer2/Makefile
deleted file mode 100644 (file)
index 09668f0..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-#
-# Copyright (C) 2017 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-# Warning by default OpenWrt does not have a root password which is necessery for NETCONF server.
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=netopeer2
-
-PKG_LICENSE:=BSD-3-Clause
-PKG_MAINTAINER:=Mislav Novakovic <mislav.novakovic@sartura.hr>
-
-PKG_VERSION:=0.5.26
-
-PKG_SOURCE_PROTO:=git
-PKG_SOURCE_VERSION:=3b99e99c9d507ddc89d21d7f1cbded494e6aa72e
-PKG_MIRROR_HASH:=d29b501d56bf9a2480759cc55368c842f69b07722afb3a0a70f05d6088f72574
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.xz
-PKG_SOURCE_URL:=https://github.com/CESNET/Netopeer2.git
-PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION)
-
-PKG_BUILD_ROOT:=$(BUILD_DIR)/$(PKG_SOURCE_SUBDIR)
-PKG_BUILD_DIR:=$(PKG_BUILD_ROOT)
-
-PKG_BUILD_PARALLEL:=1
-PKG_INSTALL:=1
-
-CMAKE_INSTALL:=1
-
-include $(INCLUDE_DIR)/package.mk
-include $(INCLUDE_DIR)/cmake.mk
-
-define Package/netopeer2-keystored/config
-  source "$(SOURCE)/Config_keystored.in"
-endef
-
-define Package/netopeer2-server
-  SECTION:=utils
-  CATEGORY:=Utilities
-  TITLE:=NETCONF server
-  URL:=$(PKG_SOURCE_URL)
-  DEPENDS:=+libpthread +libyang +libnetconf2 +netopeer2-keystored +libsysrepo +sysrepocfg +sysrepoctl +sysrepo
-  MENU:=1
-endef
-
-define Package/netopeer2-cli
-  SECTION:=utils
-  CATEGORY:=Utilities
-  TITLE:=Netopeer2 cli tool
-  URL:=$(PKG_SOURCE_URL)
-  DEPENDS:=+libpthread +libyang +libnetconf2 +libopenssl
-endef
-
-define Package/netopeer2-keystored
-  SECTION:=utils
-  CATEGORY:=Utilities
-  TITLE:=Netopeer2 key store management
-  URL:=$(PKG_SOURCE_URL)
-  DEPENDS:=+libopenssl +libsysrepo +sysrepo +sysrepocfg +sysrepoctl +SSH_KEYS:openssh-keygen +SSH_KEYS:openssl-util
-  MENU:=1
-endef
-
-define Package/netopeer2/description
- Netopeer2 is a set of tools implementing network configuration tools based on the NETCONF
- Protocol. This is the second generation of the toolset, originally available as the Netopeer
- project. Netopeer2 is based on the new generation of the NETCONF and YANG libraries -
- libyang and libnetconf2. The Netopeer server uses sysrepo as a NETCONF datastore implementation.
-endef
-
-CMAKE_OPTIONS += \
-       -DCMAKE_INSTALL_PREFIX:PATH=/usr \
-       -DCMAKE_BUILD_TYPE:STRING=Release \
-       -DKEYSTORED_KEYS_DIR:STRING=/etc/keystored/keys
-
-define Package/netopeer2-server/install
-       $(INSTALL_DIR) $(1)/bin
-       $(INSTALL_BIN) $(PKG_BUILD_ROOT)/server/netopeer2-server $(1)/bin/
-
-       $(INSTALL_DIR) $(1)/etc/sysrepo/yang
-       $(INSTALL_DATA) $(PKG_BUILD_ROOT)/modules/ietf-ssh-server.yang $(1)/etc/sysrepo/yang/ietf-ssh-server@2016-11-02.yang
-       $(INSTALL_DATA) $(PKG_BUILD_ROOT)/modules/ietf-tls-server.yang $(1)/etc/sysrepo/yang/ietf-tls-server@2016-11-02.yang
-       $(INSTALL_DATA) $(PKG_BUILD_ROOT)/modules/iana-crypt-hash.yang $(1)/etc/sysrepo/yang/iana-crypt-hash@2014-08-06.yang
-       $(INSTALL_DATA) $(PKG_BUILD_ROOT)/modules/ietf-x509-cert-to-name.yang $(1)/etc/sysrepo/yang/ietf-x509-cert-to-name@2014-12-10.yang
-       $(INSTALL_DATA) $(PKG_BUILD_ROOT)/modules/ietf-netconf-server.yang $(1)/etc/sysrepo/yang/ietf-netconf-server@2016-11-02.yang
-       $(INSTALL_DATA) $(PKG_BUILD_ROOT)/modules/ietf-netconf-monitoring.yang $(1)/etc/sysrepo/yang/ietf-netconf-monitoring@2010-10-04.yang
-       $(INSTALL_DATA) $(PKG_BUILD_ROOT)/modules/ietf-netconf-with-defaults.yang $(1)/etc/sysrepo/yang/ietf-netconf-with-defaults@2011-06-01.yang
-       $(INSTALL_DATA) $(PKG_BUILD_ROOT)/modules/ietf-system.yang $(1)/etc/sysrepo/yang/ietf-system@2014-08-06.yang
-
-       $(INSTALL_DIR) $(1)/etc/uci-defaults
-       $(INSTALL_BIN) ./files/netopeer2-server.default $(1)/etc/uci-defaults/99_netopeer2-server
-
-       $(INSTALL_DIR) $(1)/etc/init.d/
-       $(INSTALL_BIN) ./files/netopeer2-server.init $(1)/etc/init.d/netopeer2-server
-
-       $(INSTALL_DIR) $(1)/usr/share/netopeer2-server
-       $(INSTALL_DATA) ./files/stock_config.xml $(1)/usr/share/netopeer2-server
-endef
-
-define Package/netopeer2-cli/install
-       $(INSTALL_DIR) $(1)/bin
-       $(INSTALL_BIN) $(PKG_BUILD_ROOT)/cli/netopeer2-cli $(1)/bin/
-endef
-
-define Package/netopeer2-keystored/install
-       $(INSTALL_DIR) $(1)/usr/lib/sysrepo/plugins/
-       $(INSTALL_BIN) $(PKG_BUILD_ROOT)/keystored/libkeystored.so $(1)/usr/lib/sysrepo/plugins/
-
-       $(INSTALL_DIR) $(1)/etc/sysrepo/yang
-       $(INSTALL_DATA) $(PKG_BUILD_ROOT)/modules/ietf-keystore.yang $(1)/etc/sysrepo/yang/ietf-keystore@2016-10-31.yang
-
-       $(INSTALL_DIR) $(1)/etc/uci-defaults
-
-       $(INSTALL_DIR) $(1)/etc/keystored/keys
-ifeq ($(CONFIG_SSH_KEYS),y)
-       $(INSTALL_BIN) ./files/netopeer2-keystored-keygen.default $(1)/etc/uci-defaults/97_netopeer2-keystored
-else
-       $(INSTALL_BIN) ./files/netopeer2-keystored.default $(1)/etc/uci-defaults/97_netopeer2-keystored
-       #ssh key name is specified in ./files/stock_config.xml file, you will need to provide the ssh keys yourself.
-       $(INSTALL_DATA) ./files/ssh_host_rsa_key.pem $(1)/etc/keystored/keys
-       $(INSTALL_DATA) ./files/ssh_host_rsa_key.pub.pem $(1)/etc/keystored/keys
-endif
-
-       $(INSTALL_DIR) $(1)/usr/share/netopeer2-keystored
-       $(INSTALL_DATA) $(PKG_BUILD_ROOT)/keystored/stock_key_config.xml $(1)/usr/share/netopeer2-keystored
-endef
-
-$(eval $(call BuildPackage,netopeer2-server))
-$(eval $(call BuildPackage,netopeer2-cli))
-$(eval $(call BuildPackage,netopeer2-keystored))
diff --git a/net/netopeer2/files/netopeer2-keystored-keygen.default b/net/netopeer2/files/netopeer2-keystored-keygen.default
deleted file mode 100644 (file)
index df28081..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/sh
-
-# Warning, problems can occur if the device restarts in the middle of this uci-default script
-
-if [ -x /bin/sysrepoctl ]; then
-       match=$(sysrepoctl -l | grep "ietf-keystore ")
-       if [ ! "$match" ]; then
-               sysrepoctl --install --yang=/etc/sysrepo/yang/ietf-keystore@2016-10-31.yang -o root:root -p 600
-               if [ -x /bin/sysrepocfg ]; then
-                       sysrepocfg -d startup -i /usr/share/netopeer2-keystored/stock_key_config.xml ietf-keystore
-                       rm /usr/share/netopeer2-keystored/stock_key_config.xml
-               fi
-
-               #generate ssh keys
-               ssh-keygen -t rsa -f /tmp/ssh_host_rsa_key -N ""
-               openssl rsa -in /tmp/ssh_host_rsa_key -outform pem > /etc/keystored/keys/ssh_host_rsa_key.pem
-               openssl rsa -pubout -in /etc/keystored/keys/ssh_host_rsa_key.pem -out /etc/keystored/keys/ssh_host_rsa_key.pub.pem
-               rm /tmp/ssh_host_rsa_key
-       fi
-fi
-
-exit 0
diff --git a/net/netopeer2/files/netopeer2-keystored.default b/net/netopeer2/files/netopeer2-keystored.default
deleted file mode 100644 (file)
index dda6f45..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/sh
-
-# Warning, problems can occur if the device restarts in the middle of this uci-default script
-
-if [ -x /bin/sysrepoctl ]; then
-       match=$(sysrepoctl -l | grep "ietf-keystore ")
-       if [ ! "$match" ]; then
-               sysrepoctl --install --yang=/etc/sysrepo/yang/ietf-keystore@2016-10-31.yang -o root:root -p 600
-               if [ -x /bin/sysrepocfg ]; then
-                       sysrepocfg -d startup -i /usr/share/netopeer2-keystored/stock_key_config.xml ietf-keystore
-                       rm /usr/share/netopeer2-keystored/stock_key_config.xml
-               fi
-       fi
-fi
-
-exit 0
diff --git a/net/netopeer2/files/netopeer2-server.default b/net/netopeer2/files/netopeer2-server.default
deleted file mode 100644 (file)
index a931270..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/bin/sh
-
-# Warning, problems can occur if the device restarts in the middle of this uci-default script
-
-if [ -x /bin/sysrepoctl ]; then
-       match=$(sysrepoctl -l | grep "ietf-ssh-server ")
-       if [ ! "$match" ]; then
-               sysrepoctl --install --yang=/etc/sysrepo/yang/ietf-ssh-server@2016-11-02.yang -p 600
-       fi
-
-       match=$(sysrepoctl -l | grep "ietf-tls-server ")
-       if [ ! "$match" ]; then
-               sysrepoctl --install --yang=/etc/sysrepo/yang/ietf-tls-server@2016-11-02.yang -p 600
-       fi
-
-       match=$(sysrepoctl -l | grep "iana-crypt-hash ")
-       if [ ! "$match" ]; then
-               sysrepoctl --install --yang=/etc/sysrepo/yang/iana-crypt-hash@2014-08-06.yang -p 600
-       fi
-
-       match=$(sysrepoctl -l | grep "ietf-x509-cert-to-name ")
-       if [ ! "$match" ]; then
-               sysrepoctl --install --yang=/etc/sysrepo/yang/ietf-x509-cert-to-name@2014-12-10.yang -p 600
-       fi
-
-       match=$(sysrepoctl -l | grep "ietf-netconf-server ")
-       if [ ! "$match" ]; then
-               sysrepoctl --install --yang=/etc/sysrepo/yang/ietf-netconf-server@2016-11-02.yang -o root:root -p 600
-               sysrepoctl -m ietf-netconf-server -e listen
-               sysrepoctl -m ietf-netconf-server -e ssh-listen
-               if [ -x /bin/sysrepocfg ]; then
-                       sysrepocfg -d startup -i /usr/share/netopeer2-server/stock_config.xml ietf-netconf-server
-                       rm /usr/share/netopeer2-server/stock_config.xml
-               fi
-       fi
-
-       match=$(sysrepoctl -l | grep "ietf-netconf-monitoring ")
-       if [ ! "$match" ]; then
-               sysrepoctl --install --yang=/etc/sysrepo/yang/ietf-netconf-monitoring@2010-10-04.yang -o root:root -p 600
-       fi
-
-       match=$(sysrepoctl -l | grep "ietf-netconf-with-defaults ")
-       if [ ! "$match" ]; then
-               sysrepoctl --install --yang=/etc/sysrepo/yang/ietf-netconf-with-defaults@2011-06-01.yang -o root:root -p 600
-       fi
-
-       match=$(sysrepoctl -l | grep "ietf-system ")
-       if [ ! "$match" ]; then
-               sysrepoctl --install --yang=/etc/sysrepo/yang/ietf-system@2014-08-06.yang -o root:root -p 600
-               sysrepoctl -m ietf-system -e authentication
-               sysrepoctl -m ietf-system -e local-users
-       fi
-fi
-
-exit 0
diff --git a/net/netopeer2/files/netopeer2-server.init b/net/netopeer2/files/netopeer2-server.init
deleted file mode 100644 (file)
index 59f7699..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/bin/sh /etc/rc.common
-
-START=99
-STOP=11
-
-USE_PROCD=1
-PROG=/bin/netopeer2-server
-
-start_service() {
-
-    PERSIST_FILE=/etc/sysrepo/data/ietf-keystore.persist
-
-    while [ ! -f $PERSIST_FILE ]
-    do
-        echo "no persist file yet"
-        sleep 3
-    done
-
-    RETRY_CNT=5
-    LAST_LINE=$(tail -n1 $PERSIST_FILE)
-
-    while [[ -f $PERSIST_FILE && $LAST_LINE != "</module>" ]]
-    do
-        sleep 1
-
-        echo "$RETRY_CNT: $LAST_LINE"
-        LAST_LINE=$(tail -n1 $PERSIST_FILE)
-        RETRY_CNT=$(($RETRY_CNT-1))
-
-        if [ $RETRY_CNT -le 0 ];
-        then
-            rm $PERSIST_FILE
-            RETRY_CNT=5
-        fi
-         done
-
-    procd_open_instance
-    procd_set_param command $PROG
-    procd_append_param command -d -v 0
-    procd_set_param respawn
-    procd_close_instance
-}
-
-stop_service()
-{
-    service_stop ${PROG}
-}
diff --git a/net/netopeer2/files/stock_config.xml b/net/netopeer2/files/stock_config.xml
deleted file mode 100644 (file)
index 4576684..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<netconf-server xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-server">
-  <listen>
-    <endpoint>
-      <name>test_ssh_listen_endpt</name>
-      <ssh>
-        <address>::</address>
-        <port>830</port>
-        <host-keys>
-          <host-key>
-            <name>test_ssh_listen_key</name>
-            <public-key>ssh_host_rsa_key</public-key>
-          </host-key>
-        </host-keys>
-      </ssh>
-    </endpoint>
-  </listen>
-</netconf-server>
diff --git a/net/netopeer2/patches/001-fix-for-cmake-build b/net/netopeer2/patches/001-fix-for-cmake-build
deleted file mode 100644 (file)
index 920086a..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-Index: netopeer2-0.4.13-ae560bef2e70d274f6d028b59e3cb398ea2a621d/CMakeLists.txt
-===================================================================
---- /dev/null
-+++ netopeer2-0.4.13-ae560bef2e70d274f6d028b59e3cb398ea2a621d/CMakeLists.txt
-@@ -0,0 +1,5 @@
-+cmake_minimum_required(VERSION 2.6)
-+
-+add_subdirectory(server)
-+add_subdirectory(cli)
-+add_subdirectory(keystored)
-Index: netopeer2-0.4.13-ae560bef2e70d274f6d028b59e3cb398ea2a621d/cli/CMakeLists.txt
-===================================================================
---- netopeer2-0.4.13-ae560bef2e70d274f6d028b59e3cb398ea2a621d.orig/cli/CMakeLists.txt
-+++ netopeer2-0.4.13-ae560bef2e70d274f6d028b59e3cb398ea2a621d/cli/CMakeLists.txt
-@@ -1,7 +1,7 @@
- cmake_minimum_required(VERSION 2.6)
- # include custom Modules
--set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/../CMakeModules/")
-+set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/CMakeModules/")
- project(netopeer2-cli C)
- include(GNUInstallDirs)
-@@ -83,7 +83,7 @@ endif()
- install(FILES ${PROJECT_SOURCE_DIR}/doc/${PROJECT_NAME}.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
- # clean cmake cache
--add_custom_target(cleancache
-+add_custom_target(cleancache_cli
-                   COMMAND make clean
-                   COMMAND find . -iname '*cmake*' -not -name CMakeLists.txt -exec rm -rf {} +
-                   COMMAND rm -rf Makefile Doxyfile
-Index: netopeer2-0.4.13-ae560bef2e70d274f6d028b59e3cb398ea2a621d/keystored/CMakeLists.txt
-===================================================================
---- netopeer2-0.4.13-ae560bef2e70d274f6d028b59e3cb398ea2a621d.orig/keystored/CMakeLists.txt
-+++ netopeer2-0.4.13-ae560bef2e70d274f6d028b59e3cb398ea2a621d/keystored/CMakeLists.txt
-@@ -1,7 +1,7 @@
- cmake_minimum_required(VERSION 2.6)
- # include custom Modules
--set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/../CMakeModules/")
-+set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/CMakeModules/")
- project(keystored C)
- include(GNUInstallDirs)
-@@ -140,7 +140,7 @@ if (SSH_KEY_INSTALL)
-         execute_process(COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/scripts/ssh-key-import.sh)")
- endif()
--add_custom_target(install-scripts-ide
-+add_custom_target(install-scripts-ide-keystored
-     scripts/model-install.sh
-     scripts/ssh-key-import.sh
- )
-Index: netopeer2-0.4.13-ae560bef2e70d274f6d028b59e3cb398ea2a621d/server/CMakeLists.txt
-===================================================================
---- netopeer2-0.4.13-ae560bef2e70d274f6d028b59e3cb398ea2a621d.orig/server/CMakeLists.txt
-+++ netopeer2-0.4.13-ae560bef2e70d274f6d028b59e3cb398ea2a621d/server/CMakeLists.txt
-@@ -1,7 +1,7 @@
- cmake_minimum_required(VERSION 2.8.9)
- # include custom Modules
--set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/../CMakeModules/")
-+set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/CMakeModules/")
- project(netopeer2-server C)
- include(GNUInstallDirs)
-@@ -176,7 +176,7 @@ if (ENABLE_CONFIGURATION)
-         execute_process(COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/scripts/model-install.sh)")
- endif()
--add_custom_target(install-scripts-ide
-+add_custom_target(install-scripts-ide-server
-     scripts/model-install.sh
diff --git a/net/nfs-kernel-server/Config.in b/net/nfs-kernel-server/Config.in
new file mode 100644 (file)
index 0000000..454a44e
--- /dev/null
@@ -0,0 +1,8 @@
+menu "Select nfs-kernel-server configuration options"
+        depends on PACKAGE_nfs-kernel-server
+
+config NFS_KERNEL_SERVER_V4
+       bool "Include support for NFSv4"
+       default y
+
+endmenu
index de88938f28501829721555147a8a050ee13db418..e9f2fd574fd7fddd01a35f2e6ea237d1f11109b1 100644 (file)
@@ -7,12 +7,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=nfs-kernel-server
-PKG_VERSION:=2.3.2
+PKG_VERSION:=2.3.3
 PKG_RELEASE:=2
-PKG_HASH:=1748a046e452ceb2285cc07b61ec0f85af7c92ac443e111a6c8a1061254ca717
+PKG_HASH:=3c8c63611c7e78b7a3b2f8a28b9928a5b5e66d5e9ad09a1e54681508884320a4
 
 PKG_SOURCE_URL:=@SF/nfs
-PKG_SOURCE:=nfs-utils-$(PKG_VERSION).tar.bz2
+PKG_SOURCE:=nfs-utils-$(PKG_VERSION).tar.xz
 
 HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/nfs-utils-$(PKG_VERSION)
 PKG_BUILD_DIR:=$(BUILD_DIR)/nfs-utils-$(PKG_VERSION)
@@ -20,7 +20,10 @@ PKG_INSTALL:=1
 PKG_BUILD_PARALLEL:=1
 PKG_BUILD_DEPENDS:=$(PKG_NAME)/host
 HOST_BUILD_DEPENDS:=libtirpc/host
-PKG_CONFIG_DEPENDS:= CONFIG_IPV6
+
+PKG_CONFIG_DEPENDS:= \
+       CONFIG_IPV6 \
+       CONFIG_NFS_KERNEL_SERVER_V4
 
 include $(INCLUDE_DIR)/host-build.mk
 include $(INCLUDE_DIR)/package.mk
@@ -37,13 +40,17 @@ endef
 define Package/nfs-kernel-server
   $(call Package/nfs-kernel-server/Default)
   TITLE:=Kernel NFS server support
-  DEPENDS+= +kmod-fs-nfsd +kmod-fs-nfs +rpcbind
+  DEPENDS+= +kmod-fs-nfsd +kmod-fs-nfs +NFS_KERNEL_SERVER_V4:kmod-fs-nfs-v4 +rpcbind +NFS_KERNEL_SERVER_V4:nfs-utils-libs +NFS_KERNEL_SERVER_V4:libkeyutils +NFS_KERNEL_SERVER_V4:libdevmapper
 endef
 
 define Package/nfs-kernel-server/description
   Kernel NFS server support
 endef
 
+define Package/nfs-kernel-server/config
+  source "$(SOURCE)/Config.in"
+endef
+
 define Package/nfs-kernel-server-utils
   $(call Package/nfs-kernel-server/Default)
   TITLE:=NFS server utils
@@ -58,11 +65,17 @@ define Package/nfs-kernel-server/conffiles
 /etc/exports
 endef
 
-define Package/nfs-utils
+define Package/nfs-utils/Default
   $(call Package/nfs-kernel-server/Default)
   SECTION:=utils
   CATEGORY:=Utilities
-  DEPENDS+= +libevent2
+  DEPENDS+= +libevent2 +NFS_KERNEL_SERVER_V4:libkeyutils +NFS_KERNEL_SERVER_V4:libdevmapper
+  URL:=http://nfs.sourceforge.net/
+  MAINTAINER:=Peter Wagner <tripolar@gmx.at>
+endef
+
+define Package/nfs-utils
+  $(call Package/nfs-utils/Default)
   TITLE:=updated mount utility (includes nfs4)
 endef
 
@@ -70,6 +83,15 @@ define Package/nfs-utils/description
   Updated mount.nfs command - allows mounting nfs4 volumes
 endef
 
+define Package/nfs-utils-libs
+  $(call Package/nfs-utils/Default)
+  TITLE:=libraries provided by nfs-utils
+endef
+
+define Package/nfs-utils-libs/description
+  Libraries provided by nfs-utils
+endef
+
 TARGET_CFLAGS += -Wno-error=implicit-function-declaration \
                 -Wno-error=strict-prototypes \
                 -Wno-error=incompatible-pointer-types \
@@ -81,12 +103,14 @@ TARGET_LDFLAGS += -Wl,-rpath-link=$(STAGING_DIR)/usr/lib \
                  -L$(STAGING_DIR)/usr/lib/libevent
 
 CONFIGURE_ARGS += \
+       --disable-caps \
        --disable-gss \
-       --disable-nfsv4 \
-       --disable-nfsv41 \
-       --enable-static \
+       --disable-nfsdcld \
+       --disable-nfsdcltrack \
        --enable-shared \
-       --disable-caps
+       --enable-static \
+       $(if $(CONFIG_NFS_KERNEL_SERVER_V4),--enable,--disable)-nfsv4 \
+       $(if $(CONFIG_NFS_KERNEL_SERVER_V4),--enable,--disable)-nfsv41
 
 ifeq ($(CONFIG_IPV6),n)
 CONFIGURE_ARGS += --disable-ipv6
@@ -95,6 +119,7 @@ endif
 CONFIGURE_VARS += \
        libblkid_cv_is_recent=yes \
        ac_cv_lib_resolv___res_querydomain=yes \
+       ac_cv_lib_bsd_daemon=no \
        CONFIG_SQLITE3_TRUE="\#" \
        CONFIG_NFSDCLD_TRUE="\#"
 
@@ -155,13 +180,28 @@ define Package/nfs-kernel-server-utils/install
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/utils/nfsstat/nfsstat $(1)/usr/sbin
 endef
 
+define Package/nfs-utils/InstallDev
+       $(INSTALL_DIR) $(1)/usr/include
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/nfsidmap.h $(1)/usr/include/
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libnfsidmap.{a,la,so*} $(1)/usr/lib/
+       $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libnfsidmap.pc $(1)/usr/lib/pkgconfig/
+endef
+
 define Package/nfs-utils/install
        $(INSTALL_DIR) $(1)/sbin
        $(INSTALL_BIN) $(PKG_INSTALL_DIR)/sbin/mount.nfs $(1)/sbin/
        (cd $(1)/sbin; ln -sf mount.nfs mount.nfs4; ln -sf mount.nfs umount.nfs; ln -sf mount.nfs umount.nfs4)
 endef
 
+define Package/nfs-utils-libs/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libnfsidmap.so* $(1)/usr/lib/
+endef
+
 $(eval $(call HostBuild))
+$(eval $(call BuildPackage,nfs-utils))
+$(eval $(call BuildPackage,nfs-utils-libs))
 $(eval $(call BuildPackage,nfs-kernel-server))
 $(eval $(call BuildPackage,nfs-kernel-server-utils))
-$(eval $(call BuildPackage,nfs-utils))
index af36c12cd0f802d7cab3ef915f1f007aecaf9cbf..394bf2efd2cee3516c32d73fa1f76a0cef7da806 100644 (file)
@@ -7,12 +7,14 @@ STOP=60
 USE_PROCD=1
 
 NFS_D=/var/lib/nfs
+RECOVERY_D=$NFS_D/v4recovery
 LOCK_D=/var/lib/nfs/sm
 
 start_service() {
        grep -q /proc/fs/nfsd /proc/mounts || \
                mount -t nfsd nfsd /proc/fs/nfsd
        mkdir -p $NFS_D
+       mkdir -p $RECOVERY_D
        mkdir -p $LOCK_D
        touch $NFS_D/rmtab
 
index 4880f7dafb7ac5a3431ee1b6c531b11276608191..d04dd857ad73eaf34222b2a1e8f8ee266976b743 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=nginx
-PKG_VERSION:=1.15.2
-PKG_RELEASE:=3
+PKG_VERSION:=1.15.5
+PKG_RELEASE:=1
 
 PKG_SOURCE:=nginx-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=http://nginx.org/download/
-PKG_HASH:=eeba09aecfbe8277ac33a5a2486ec2d6731739f3c1c701b42a0c3784af67ad90
+PKG_HASH:=1a3a889a8f14998286de3b14cc1dd5b2747178e012d6d480a18aa413985dae6f
 
 PKG_MAINTAINER:=Thomas Heil <heil@terminal-consulting.de> \
                                Ansuel Smith <ansuelsmth@gmail.com>
@@ -78,7 +78,7 @@ define Package/nginx/default
   TITLE:=Nginx web server
   URL:=http://nginx.org/
   DEPENDS:=+NGINX_PCRE:libpcre +(NGINX_SSL||NGINX_HTTP_CACHE||NGINX_HTTP_AUTH_BASIC):libopenssl \
-     +NGINX_HTTP_GZIP:zlib +NGINX_LUA:liblua +libpthread
+       +NGINX_HTTP_GZIP:zlib +NGINX_LUA:liblua +libpthread +NGINX_DAV:libexpat
 endef
 
 define Package/nginx/description
@@ -107,7 +107,7 @@ Package/nginx-ssl/description = $(Package/nginx/description) \
 define Package/nginx-all-module
   $(Package/nginx/default)
   TITLE += with ALL module selected
-  DEPENDS:=+libpcre +libopenssl +zlib +liblua +libpthread
+  DEPENDS:=+libpcre +libopenssl +zlib +liblua +libpthread +libexpat
   VARIANT:=all-module
   PROVIDES:=nginx
 endef
@@ -247,7 +247,7 @@ ifneq ($(BUILD_VARIANT),all-module)
     ADDITIONAL_MODULES += --with-http_flv_module
   endif
   ifeq ($(CONFIG_NGINX_DAV),y)
-    ADDITIONAL_MODULES += --with-http_dav_module
+    ADDITIONAL_MODULES += --with-http_dav_module --add-module=$(PKG_BUILD_DIR)/nginx-dav-ext-module
   endif
   ifeq ($(CONFIG_NGINX_HTTP_AUTH_REQUEST),y)
     ADDITIONAL_MODULES += --with-http_auth_request_module
@@ -283,9 +283,11 @@ else
   CONFIG_NGINX_TS_MODULE:=y
   CONFIG_NGINX_NAXSI:=y
   CONFIG_NGINX_LUA:=y
+  CONFIG_NGINX_DAV:=y
   ADDITIONAL_MODULES += --with-http_ssl_module --add-module=$(PKG_BUILD_DIR)/nginx-naxsi/naxsi_src \
     --add-module=$(PKG_BUILD_DIR)/lua-nginx --with-ipv6 --with-http_stub_status_module --with-http_flv_module \
-       --with-http_dav_module --with-http_auth_request_module --with-http_v2_module --with-http_realip_module \
+       --with-http_dav_module --add-module=$(PKG_BUILD_DIR)/nginx-dav-ext-module \
+       --with-http_auth_request_module --with-http_v2_module --with-http_realip_module \
        --with-http_secure_link_module --with-http_sub_module --add-module=$(PKG_BUILD_DIR)/nginx-headers-more \
        --add-module=$(PKG_BUILD_DIR)/nginx-brotli --add-module=$(PKG_BUILD_DIR)/nginx-rtmp \
        --add-module=$(PKG_BUILD_DIR)/nginx-ts
@@ -388,6 +390,7 @@ define Build/Prepare
        $(Prepare/nginx-headers-more)
        $(Prepare/nginx-rtmp)
        $(Prepare/nginx-ts)
+       $(Prepare/nginx-dav-ext-module)
 endef
 
 
@@ -499,6 +502,24 @@ ifeq ($(CONFIG_NGINX_LUA),y)
   endef
 endif
 
+
+ifeq ($(CONFIG_NGINX_DAV),y)
+  define Download/nginx-dav-ext-module
+    VERSION:=430fd774fe838a04f1a5defbf1dd571d42300cf9
+    SUBDIR:=nginx-dav-ext-module
+    FILE:=nginx-dav-ext-module-$(PKG_VERSION)-$$(VERSION).tar.gz
+    URL:=https://github.com/arut/nginx-dav-ext-module.git
+    MIRROR_HASH:=0566053a8756423ecab455fd9d218cec1e017598fcbb3d6415a06f816851611e
+    PROTO:=git
+  endef
+  $(eval $(call Download,nginx-dav-ext-module))
+
+  define Prepare/nginx-dav-ext-module
+       $(eval $(Download/nginx-dav-ext-module))
+       gzip -dc $(DL_DIR)/$(FILE) | tar -C $(PKG_BUILD_DIR) $(TAR_OPTIONS)
+  endef
+endif
+
 $(eval $(call BuildPackage,nginx))
 $(eval $(call BuildPackage,nginx-ssl))
 $(eval $(call BuildPackage,nginx-all-module))
index 3f01d0f58c5bb36179f978fa1d8a3187d267fd71..53167dc651d8bcae41a8f359e510ecd0bd6e6095 100755 (executable)
@@ -5,6 +5,7 @@ START=60
 USE_PROCD=1
 NAME=nlbwmon
 PROG=/usr/sbin/nlbwmon
+NICEPRIO=19
 
 add_subnet() {
        local network="$1"
@@ -80,6 +81,7 @@ start_service() {
        procd_open_instance
        procd_set_param stderr 1
        procd_set_param command "$PROG"
+       procd_set_param nice "$NICEPRIO"
 
        config_load nlbwmon
        config_foreach parse_config nlbwmon
index 2a253f8c0849b76dde0d6120801c161d8b0ed60a..6108e27056b058b2d615b2abce5f4e8333387ff2 100644 (file)
@@ -9,14 +9,14 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=nut
 PKG_VERSION:=2.7.4
-PKG_RELEASE:=7
+PKG_RELEASE:=8
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=http://www.networkupstools.org/source/2.7/
 PKG_HASH:=980e82918c52d364605c0703a5dcf01f74ad2ef06e3d365949e43b7d406d25a7
 PKG_MAINTAINER:=Daniel Dickinson <cshored@thecshore.com>
-PKG_LICENSE:=GPL-2.0
-PKG_LICENSE_FILES:=LICENSE-GPL2
+PKG_LICENSE:=GPL-2.0+ GPL-3.0+ GPL-1.0+ Artistic-1.0-Perl
+PKG_LICENSE_FILES:=LICENSE-GPL2 LICENSE-GPL3 COPYING
 PKG_FIXUP:=autoreconf
 
 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
@@ -63,22 +63,32 @@ define Package/nut/install
 endef
 
 define Package/nut-server/install
+       # Server portion
        $(INSTALL_DIR) $(1)/etc/nut
        $(INSTALL_DIR) $(1)/usr/sbin
        $(INSTALL_DIR) $(1)/etc/init.d
        $(INSTALL_DIR) $(1)/usr/share/nut
-       $(INSTALL_DIR) $(1)/etc/init.d
        $(INSTALL_BIN) ./files/nut-server.init $(1)/etc/init.d/nut-server
        $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/upsd $(1)/usr/sbin
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/upsdrvctl $(1)/usr/sbin
        $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/share/nut/cmdvartab $(1)/usr/share/nut/
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/share/nut/driver.list $(1)/usr/share/nut/
        $(INSTALL_DIR) $(1)/etc/config
        $(INSTALL_CONF) ./files/nut_server $(1)/etc/config/nut_server
-       ln -sf /var/etc/nut/nut.conf $(1)/etc/nut/nut.conf
-       ln -sf /var/etc/nut/ups.conf $(1)/etc/nut/ups.conf
        ln -sf /var/etc/nut/upsd.users  $(1)/etc/nut/upsd.users
        ln -sf /var/etc/nut/upsd.conf $(1)/etc/nut/upsd.conf
+       # Driver common portion
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/upsdrvctl $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/share/nut/driver.list $(1)/usr/share/nut/
+       ln -sf /var/etc/nut/ups.conf $(1)/etc/nut/ups.conf
+       # Mangle libhid.usermap into a format (hotplug shell script) useful for OpenWrt
+       $(INSTALL_DIR) $(1)/etc/hotplug.d/usb
+       $(INSTALL_BIN) ./files/30-libhid-ups.head $(1)/etc/hotplug.d/usb/30-libhid-ups
+       $(CP) $(PKG_INSTALL_DIR)/etc/hotplug/usb/libhid.usermap $(PKG_BUILD_DIR)/30-libhid-ups.middle
+       $(SED) '/^$$$$/d' \
+               -e '/^#/d' \
+               -E -e 's:^[^ ][^ ]*  *0x0003  *0x0{0,3}([^ ][^ ]*)  *0x{0,3}*([^ ][^ ]*).*:\1/\2/* | \\:' \
+               $(PKG_BUILD_DIR)/30-libhid-ups.middle
+       tail -n+2 $(PKG_BUILD_DIR)/30-libhid-ups.middle >>$(1)/etc/hotplug.d/usb/30-libhid-ups
+       cat ./files/30-libhid-ups.tail >>$(1)/etc/hotplug.d/usb/30-libhid-ups
 endef
 
 define Package/nut-common
@@ -87,8 +97,7 @@ define Package/nut-common
        DEPENDS:= nut \
                +NUT_DRIVER_SNMP:libnetsnmp \
                +NUT_DRIVER_USB:libusb-compat \
-               +NUT_SSL:libopenssl \
-               +PACKAGE_libwrap:libwrap
+               +NUT_SSL:libopenssl
 endef
 
 define Package/nut-common/description
@@ -96,6 +105,10 @@ $(call Package/nut/description/Default)
 This package contains the common files.
 endef
 
+define Package/nut-common/conffiles
+/etc/nut/nut.conf
+endef
+
 define Package/nut-common/install
        $(INSTALL_DIR) $(1)/etc/nut
        $(INSTALL_DIR) $(1)/usr/lib
@@ -107,6 +120,7 @@ define Package/nut-server
        $(call Package/nut/Default)
        TITLE+= (server)
        DEPENDS:=nut +nut-common
+       USERID:=nut=113:nut=113
 endef
 
 define Package/nut-server/description
@@ -120,13 +134,16 @@ endef
 
 define Package/nut-server/conffiles
 /etc/config/nut_server
+/etc/nut/upsd.conf
+/etc/nut/upsd.users
+/etc/nut/ups.conf
 endef
 
 define Package/nut-upsmon
   $(call Package/nut/Default)
        TITLE+= (monitor)
        DEPENDS:=nut +nut-common
-       USERID:=nut=113:nut=113
+       USERID:=nutmon=114:nutmon=114
 endef
 
 define Package/nut-upsmon/description
@@ -141,6 +158,7 @@ endef
 
 define Package/nut-upsmon/conffiles
 /etc/config/nut_monitor
+/etc/nut/upsmon.conf
 endef
 
 define Package/nut-upsmon/install
@@ -149,6 +167,7 @@ define Package/nut-upsmon/install
        $(INSTALL_DIR) $(1)/etc/init.d
        $(INSTALL_BIN) ./files/nut-monitor.init $(1)/etc/init.d/nut-monitor
        $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/upsmon $(1)/usr/sbin/
+       $(INSTALL_BIN) ./files/nutshutdown $(1)/usr/sbin/nutshutdown
        $(INSTALL_DIR) $(1)/etc/config
        $(INSTALL_CONF) ./files/nut_monitor $(1)/etc/config/nut_monitor
        ln -sf /var/etc/nut/upsmon.conf $(1)/etc/nut/upsmon.conf
@@ -182,7 +201,7 @@ define Package/nut-upsc/description
 $(call Package/nut/description/Default)
 upsc is provided as a quick way to poll the status of a UPS server. It
 can be used inside shell scripts and other programs that need UPS data
-but don not want to include the full interface.
+but do not want to include the full interface.
 endef
 
 define Package/nut-upsc/install
@@ -308,12 +327,15 @@ define Package/nut-web-cgi/install
        $(INSTALL_CONF) ./files/add_nut_httpd_conf $(1)/etc/uci-defaults/add_nut_httpd_conf
        $(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/nut/upsstats.html.sample $(1)/etc/nut/upsstats.html
        $(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/nut/upsstats-single.html.sample $(1)/etc/nut/upsstats-single.html
-       $(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/nut/upsset.conf.sample $(1)/etc/nut/upsset.conf
+       $(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/nut/upsset.conf.sample $(1)/etc/nut/upsset.conf.disable
+       $(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/nut/upsset.conf.sample $(1)/etc/nut/upsset.conf.enable
+       $(SED) 's/### \?//' $(1)/etc/nut/upsset.conf.enable
        $(INSTALL_DIR) $(1)/etc/config
        $(INSTALL_CONF) ./files/nut_cgi $(1)/etc/config/nut_cgi
        $(INSTALL_DIR) $(1)/etc/init.d
        $(INSTALL_BIN) ./files/nut-cgi.init $(1)/etc/init.d/nut-cgi
        ln -sf /var/etc/nut/hosts.conf $(1)/etc/nut/hosts.conf
+       ln -sf /var/etc/nut/upsset.conf $(1)/etc/nut/upsset.conf
 endef
 
 define Package/nut-avahi-service
@@ -342,7 +364,7 @@ define DriverPackage
         define Package/nut-driver-$(2)
                $(call Package/nut/Default)
                TITLE:=$(2) (NUT $(1) driver)
-               DEPENDS:=nut +nut-common
+               DEPENDS:=nut +nut-server
                $(if $(filter $(1),snmp),DEPENDS+= @NUT_DRIVER_SNMP)
                $(if $(filter $(1),usb),DEPENDS+= @NUT_DRIVER_USB)
                $(if $(filter $(1),serial),DEPENDS+= @NUT_DRIVER_SERIAL)
@@ -502,9 +524,11 @@ CONFIGURE_ARGS += \
        --without-avahi \
        --$(if $(CONFIG_NUT_DRIVER_SNMP),with,without)-snmp \
        --$(if $(CONFIG_NUT_DRIVER_SERIAL),with,without)-serial \
+       --without-doc \
        --without-neon \
        --without-powerman \
        --without-wrap \
+       --with-hotplug-dir=/etc/hotplug \
        --with-cgi \
        --without-ipmi \
        --without-freeipmi \
diff --git a/net/nut/files/30-libhid-ups.head b/net/nut/files/30-libhid-ups.head
new file mode 100755 (executable)
index 0000000..efcbcf6
--- /dev/null
@@ -0,0 +1,51 @@
+#!/bin/sh
+
+. /lib/functions.sh
+
+nut_driver_config() {
+       local cfg="$1"
+       local nomatch="$2"
+
+       config_get runas "$cfg" runas "nut"
+       config_get vendorid "$cfg" vendorid
+       config_get productid "$cfg" productid
+
+       [ "$ACTION" = "add" ] &&[ -n "$DEVNAME" ] && {
+               chmod 0660 /dev/"$DEVNAME"
+               chown ${runas:-root}:$(id -gn "${runas:-root}") /dev/"$DEVNAME"
+       }
+
+       if [ "$(printf "%04x" 0x"$pvendid")" = "$vendorid" ] && \
+               [ "$(printf "%04x" 0x"$pprodid")" = "$productid" ]; then
+                       [ "$ACTION" = "add" ] && {
+                               /etc/init.d/nut-server start "$cfg"
+                       }
+                       [ "$ACTION" = "remove" ] && {
+                               /etc/init.d/nut-server stop "$cfg"
+                       }
+                       found=1
+       elif [ "$nomatch" = "1" ]; then
+               [ "$ACTION" = "add" ] && {
+                       /etc/init.d/nut-server start "$cfg"
+               }
+               [ "$ACTION" = "remove" ] && {
+                       /etc/init.d/nut-server stop "$cfg"
+               }
+       fi
+}
+
+perform_libhid_action() {
+       local vendorid productid runas
+       local pvendid pprodid found
+
+       pvendid=${PRODUCT%/*}
+       pvendid=${pvendid%/*}
+       pprodid=${PRODUCT%/*}
+       pprodid=${pprodid##*/}
+
+       config_load nut_server
+       config_foreach nut_driver_config driver 0
+       [ "$found" != "1" ] && config_foreach nut_driver_config driver 1
+}
+
+[ -n "$PRODUCT" ] && case "$PRODUCT" in
diff --git a/net/nut/files/30-libhid-ups.tail b/net/nut/files/30-libhid-ups.tail
new file mode 100644 (file)
index 0000000..24c2a96
--- /dev/null
@@ -0,0 +1,5 @@
+"")
+       [ -d /var/run/nut ] && [ ! -f /var/run/nut/disable-hotplug ] && \
+               /etc/init.d/nut-server enabled &&  perform_libhid_action
+       ;;
+esac
index d63d98ba95d4618ae036337d95579054dc61bc83..ceb7cce2266cdda9ee89829492d1c771216acf9b 100755 (executable)
@@ -5,9 +5,24 @@
 # See /LICENSE for more information.
 #
 START=51
+USE_PROCD=1
 
 DEFAULT=/etc/default/nut
 UPSCGI_C=/var/etc/nut/hosts.conf
+UPSCGI_S=/var/etc/nut/upsset.conf
+
+nut_upscgi_upsset() {
+       local cfg="$1"
+       local enable
+
+       config_get_bool enable "$cfg" enable 0
+
+       [ $enable -eq 1 ] && {
+               ln -sf /etc/nut/upsset.conf.enable "$UPSCGI_S"
+       } || {
+               ln -sf /etc/nut/upsset.conf.disable "$UPSCGI_S"
+       }
+}
 
 nut_upscgi_add() {
        local cfg="$1"
@@ -25,20 +40,32 @@ nut_upscgi_add() {
            system="$system:$port";
        fi
        config_get displayname "$cfg" displayname
-       echo "MONITOR $system \"$displayname\"" >> $UPSCGI_C
+       echo "MONITOR $system \"$displayname\"" >> "$UPSCGI_C"
 }
 
-start() {
-       rm -f $UPSCGI_C
+service_reload() {
+       mkdir -m 0755 -p "$(dirname "$UPSCGI_C")"
+       rm -f "$UPSCGI_C"
+       rm -f "$UPSCGI_S"
 
        config_load nut_cgi
 
        config_foreach nut_upscgi_add host
+       config_foreach nut_upscgi_upsset upsset
 
        chmod 640 /var/etc/nut/hosts.conf
 }
 
-stop() {
-       rm -f $UPSCGI_C
+start_service() {
+       service_reload
+}
+
+stop_service() {
+       rm -f "$UPSCGI_C"
+       rm -f "$UPSCGI_S"
+       ln -sf /etc/nut/upsset.conf.disable "$UPSCGI_S"
 }
 
+service_triggers() {
+       procd_add_reload_trigger "nut_cgi"
+}
index af814078106534f4848d8be2fae67175f397aebd..513d703058b27ebe64f8a5c59213fd8726843f57 100755 (executable)
@@ -6,56 +6,57 @@ UPSMON_C=/var/etc/nut/upsmon.conf
 
 nut_upsmon_conf() {
        local cfg="$1"
+       local RUNAS val optval
 
-       echo "# Config file automatically generated from UCI config" > $UPSMON_C
+       echo "# Config file automatically generated from UCI config" > "$UPSMON_C"
 
-       config_get runas "$cfg" runas "nut"
-       [ -n "$runas" ] && echo "RUN_AS_USER $runas" >> $UPSMON_C
+       config_get RUNAS "$cfg" runas "nutmon"
+       [ -n "$RUNAS" ] && echo "RUN_AS_USER $RUNAS" >> "$UPSMON_C"
+       runas=$RUNAS
 
        config_get val "$cfg" minsupplies 1
-       echo "MINSUPPLIES $val" >> $UPSMON_C
+       echo "MINSUPPLIES $val" >> "$UPSMON_C"
 
-       config_get val "$cfg" shutdowncmd "/sbin/halt"
-       echo "SHUTDOWNCMD \"$val\"" >> $UPSMON_C
+       config_get val "$cfg" shutdowncmd "/usr/sbin/nutshutdown"
+       echo "SHUTDOWNCMD \"$val\"" >> "$UPSMON_C"
 
        config_get val "$cfg" notifycmd
-       [ -n "$val" ] && echo "NOTIFYCMD \"$val\"" >> $UPSMON_C
+       [ -n "$val" ] && echo "NOTIFYCMD \"$val\"" >> "$UPSMON_C"
 
        config_get val "$cfg" pollfreq 5
-       echo "POLLFREQ $val" >> $UPSMON_C
+       echo "POLLFREQ $val" >> "$UPSMON_C"
 
        config_get val "$cfg" pollfreqalert 5
-       echo "POLLFREQALERT $val" >> $UPSMON_C
+       echo "POLLFREQALERT $val" >> "$UPSMON_C"
 
        config_get val "$cfg" hostsync 15
-       echo "HOSTSYNC $val" >> $UPSMON_C
+       echo "HOSTSYNC $val" >> "$UPSMON_C"
 
        config_get val "$cfg" deadtime 15
-       echo "DEADTIME $val" >> $UPSMON_C
+       echo "DEADTIME $val" >> "$UPSMON_C"
 
-       config_get val "$cfg" powerdownflag /var/run/killpower
-       echo "POWERDOWNFLAG $val" >> $UPSMON_C
+       echo "POWERDOWNFLAG /var/run/killpower" >> "$UPSMON_C"
 
        config_get val "$cfg" onlinemsg
-       [ -n "$val" ] && echo "NOTIFYMSG ONLINE \"$val\"" >> $UPSMON_C
+       [ -n "$val" ] && echo "NOTIFYMSG ONLINE \"$val\"" >> "$UPSMON_C"
        config_get val "$cfg" onbattmsg
-       [ -n "$val" ] && echo "NOTIFYMSG ONBATT \"$val\"" >> $UPSMON_C
+       [ -n "$val" ] && echo "NOTIFYMSG ONBATT \"$val\"" >> "$UPSMON_C"
        config_get val "$cfg" lowbattmsg
-       [ -n "$val" ] && echo "NOTIFYMSG LOWBATT \"$val\"" >> $UPSMON_C
+       [ -n "$val" ] && echo "NOTIFYMSG LOWBATT \"$val\"" >> "$UPSMON_C"
        config_get val "$cfg" fsdmsg
-       [ -n "$val" ] && echo "NOTIFYMSG FSD \"$val\"" >> $UPSMON_C
+       [ -n "$val" ] && echo "NOTIFYMSG FSD \"$val\"" >> "$UPSMON_C"
        config_get val "$cfg" commokmsg
-       [ -n "$val" ] && echo "NOTIFYMSG COMMOK \"$val\"" >> $UPSMON_C
+       [ -n "$val" ] && echo "NOTIFYMSG COMMOK \"$val\"" >> "$UPSMON_C"
        config_get val "$cfg" commbadmsg
-       [ -n "$val" ] && echo "NOTIFYMSG COMMBAD \"$val\"" >> $UPSMON_C
+       [ -n "$val" ] && echo "NOTIFYMSG COMMBAD \"$val\"" >> "$UPSMON_C"
        config_get val "$cfg" shutdownmsg
-       [ -n "$val" ] && echo "NOTIFYMSG SHUTDOWN \"$val\"" >> $UPSMON_C
+       [ -n "$val" ] && echo "NOTIFYMSG SHUTDOWN \"$val\"" >> "$UPSMON_C"
        config_get val "$cfg" replbattmsg
-       [ -n "$val" ] && echo "NOTIFYMSG REPLBATT \"$val\"" >> $UPSMON_C
+       [ -n "$val" ] && echo "NOTIFYMSG REPLBATT \"$val\"" >> "$UPSMON_C"
        config_get val "$cfg" nocommmsg
-       [ -n "$val" ] && echo "NOTIFYMSG NOCOMM \"$val\"" >> $UPSMON_C
+       [ -n "$val" ] && echo "NOTIFYMSG NOCOMM \"$val\"" >> "$UPSMON_C"
        config_get val "$cfg" noparentmsg
-       [ -n "$val" ] && echo "NOTIFYMSG NOPARENT \"$val\"" >> $UPSMON_C
+       [ -n "$val" ] && echo "NOTIFYMSG NOPARENT \"$val\"" >> "$UPSMON_C"
 
        notifylist() {
                local value="$1"
@@ -85,34 +86,34 @@ nut_upsmon_conf() {
        val=""
        config_list_foreach "$cfg" defaultnotify notifylist
        default="$optval"
-       echo "NOTIFYFLAG ONLINE $(setnotify "$cfg" onlinenotify)" >> $UPSMON_C
-       echo "NOTIFYFLAG ONBATT $(setnotify "$cfg" onbattnotify)" >> $UPSMON_C
-       echo "NOTIFYFLAG LOWBATT $(setnotify "$cfg" lowbatnotify)" >> $UPSMON_C
-       echo "NOTIFYFLAG FSD $(setnotify "$cfg" fsdnotify)" >> $UPSMON_C
-       echo "NOTIFYFLAG COMMOK $(setnotify "$cfg" commoknotify)" >> $UPSMON_C
-       echo "NOTIFYFLAG COMMBAD $(setnotify "$cfg" commbadnotify)" >> $UPSMON_C
-       echo "NOTIFYFLAG SHUTDOWN $(setnotify "$cfg" shutdownnotify)" >> $UPSMON_C
-       echo "NOTIFYFLAG REPLBATT $(setnotify "$cfg" repolbattnotify)" >> $UPSMON_C
-       echo "NOTIFYFLAG NOCOMM $(setnotify "$cfg" nocommnotify)" >> $UPSMON_C
-       echo "NOTIFYFLAG NOPARENT $(setnotify "$cfg" noparentnotify)" >> $UPSMON_C
+       echo "NOTIFYFLAG ONLINE $(setnotify "$cfg" onlinenotify)" >> "$UPSMON_C"
+       echo "NOTIFYFLAG ONBATT $(setnotify "$cfg" onbattnotify)" >> "$UPSMON_C"
+       echo "NOTIFYFLAG LOWBATT $(setnotify "$cfg" lowbatnotify)" >> "$UPSMON_C"
+       echo "NOTIFYFLAG FSD $(setnotify "$cfg" fsdnotify)" >> "$UPSMON_C"
+       echo "NOTIFYFLAG COMMOK $(setnotify "$cfg" commoknotify)" >> "$UPSMON_C"
+       echo "NOTIFYFLAG COMMBAD $(setnotify "$cfg" commbadnotify)" >> "$UPSMON_C"
+       echo "NOTIFYFLAG SHUTDOWN $(setnotify "$cfg" shutdownnotify)" >> "$UPSMON_C"
+       echo "NOTIFYFLAG REPLBATT $(setnotify "$cfg" repolbattnotify)" >> "$UPSMON_C"
+       echo "NOTIFYFLAG NOCOMM $(setnotify "$cfg" nocommnotify)" >> "$UPSMON_C"
+       echo "NOTIFYFLAG NOPARENT $(setnotify "$cfg" noparentnotify)" >> "$UPSMON_C"
 
        config_get val "$cfg" rbwarntime 43200
-       echo "RBWARNTIME $val" >> $UPSMON_C
+       echo "RBWARNTIME $val" >> "$UPSMON_C"
 
        config_get val "$cfg" nocommwarntime 300
-       echo "NOCOMMWARNTIME $val" >> $UPSMON_C
+       echo "NOCOMMWARNTIME $val" >> "$UPSMON_C"
 
        config_get val "$cfg" finaldelay 5
-       echo "FINALDELAY $val" >> $UPSMON_C
+       echo "FINALDELAY $val" >> "$UPSMON_C"
 
        config_get val "$cfg" certpath
-       if [ -n "$val" ]; then echo "CERTPATH $val" >> $UPSMON_C; fi
+       if [ -n "$val" ]; then echo "CERTPATH $val" >> "$UPSMON_C"; fi
 
        config_get_bool val "$cfg" certverify 0
-       if [ -n "$val" ]; then echo "CERTVERIFY $val" >> $UPSMON_C; fi
+       if [ -n "$val" ]; then echo "CERTVERIFY $val" >> "$UPSMON_C"; fi
 
        config_get_bool val "$cfg" forcessl 0
-       if [ -n "$val" ]; then echo "FORCESSL $val" >> $UPSMON_C; fi
+       if [ -n "$val" ]; then echo "FORCESSL $val" >> "$UPSMON_C"; fi
 }
 
 nut_upsmon_add() {
@@ -126,12 +127,6 @@ nut_upsmon_add() {
        local password
        local system
 
-       # if UPSMON_C is a symlink we're only doing generated config
-       [ -L $UPSMON_C ] && {
-               rm -f $UPSMON_C
-               nut_upsmon_conf ""
-       }
-
        config_get upsname "$cfg" upsname
        config_get hostname "$cfg" hostname localhost
        config_get port "$cfg" port
@@ -142,40 +137,49 @@ nut_upsmon_add() {
        if [ -n "$port" ]; then
            system="$system:$port";
        fi
-       echo "MONITOR $system $powervalue $username $password $type" >> $UPSMON_C
+       echo "MONITOR $system $powervalue $username $password $type" >> "$UPSMON_C"
 }
 
-start_service() {
-       mkdir -p "$(dirname "$UPSMON_C")"
-       chmod 750 "$(dirname "$UPSMON_C")"
+build_config() {
+       local runas
+       mkdir -m 0750 -p "$(dirname "$UPSMON_C")"
 
        config_load nut_monitor
-
        config_foreach nut_upsmon_conf upsmon
        config_foreach nut_upsmon_add master master
        config_foreach nut_upsmon_add slave slave
 
-       [ -z "$(cat /var/etc/nut/nut.conf)" ] && echo "MODE=netclient" >>/var/etc/nut/nut.conf
-
-       chmod 640 $UPSMON_C
-       chmod 640 /var/etc/nut/nut.conf
-
-       chown ${runas:-root}:$(id -gn ${runas:-root}) /var/etc/nut
-       chown ${runas:-root}:$(id -gn ${runas:-root}) /var/etc/nut/nut.conf
-       chown ${runas:-root}:$(id -gn ${runas:-root}) $UPSMON_C
-
-       [ -d /var/run/nut ] || {
-               mkdir -m 0750 -p /var/run/nut
-               chown ${runas:-root}:$(id -gn ${runas:-root}) /var/run/nut
+       [ -z "$(cat /var/etc/nut/nut.conf)" ] && {
+               echo "MODE=netclient" >>/var/etc/nut/nut.conf
+               chmod 640 /var/etc/nut/nut.conf
+               chgrp $(id -gn ${runas:-root}) /var/etc/nut/nut.conf
        }
 
-       exec $DEBUG /usr/sbin/upsmon $UPSMON_OPTIONS
+       chmod 640 "$UPSMON_C"
+       chgrp $(id -gn ${runas:-root}) "$UPSMON_C"
 }
 
-stop_service() {
-       exec /usr/sbin/upsmon -c stop
+start_service() {
+       build_config
+       procd_open_instance
+       procd_set_param respawn
+       procd_set_param stderr 0
+       procd_set_param stdout 1
+       procd_set_param command /usr/sbin/upsmon -D
+       procd_close_instance
 }
 
 reload_service() {
-       exec /usr/sbin/upsmon -c reload
+       if pgrep upsmon >/dev/null 2>/dev/null; then
+               build_config
+               upsmon -c reload
+       else
+               stop
+               sleep 1
+               start
+       fi
+}
+
+service_triggers() {
+       procd_add_reload_trigger nut_monitor
 }
index e064dd721358bb31681fca75f8ccb4146e31e9a6..73bf30ea183410fad316cb754dab013ba4546d03 100755 (executable)
@@ -6,47 +6,70 @@
 #
 START=50
 
-RUN_D=/var/run
-PID_F=$RUN_D/upsd.pid
-UPS_C=/var/etc/nut/ups.conf
 USERS_C=/var/etc/nut/upsd.users
 UPSD_C=/var/etc/nut/upsd.conf
+UPS_C=/var/etc/nut/ups.conf
 
 USE_PROCD=1
 
-listen_address() {
-    local cfg="$1"
+get_write_driver_config() {
+       local cfg="$1"
+       local var="$2"
+       local def="$3"
+       local flag="$4"
+       local val
 
-    config_get address "$cfg" address "::1"
-    config_get port "$cfg" port
-    echo "LISTEN $address $port" >>$UPSD_C
+       [ -z "$flag" ] && {
+               config_get val "$cfg" "$var" "$def"
+               [ -n "$val" ] && [ "$val" != "0" ] && echo "$var = $val" >>"$UPS_C"
+       }
+
+       [ -n "$flag" ] && {
+               config_get_bool val "$cfg" "$var" "$def"
+               [ "$val" = 1 ] && echo "$var" >>"$UPS_C"
+       }
 }
 
 upsd_statepath() {
+       local cfg="$1"
+       local statepath
+
+       config_get statepath "$cfg" statepath "/var/run/nut"
+       STATEPATH="$statepath"
+}
+
+listen_address() {
     local cfg="$1"
-    config_get statepath "$cfg" statepath
+
+    config_get address "$cfg" address "::1"
+    config_get port "$cfg" port
+    echo "LISTEN $address $port" >>"$UPSD_C"
 }
 
 upsd_config() {
     local cfg="$1"
-    local maxage maxconn certfile
+    local maxage maxconn certfile runas statepath
 
     # Note runas support requires you make sure USB device file is readable by
     # the runas user
-    config_get runas "$cfg" runas
+    config_get runas "$cfg" runas "nut"
+    RUNAS="$runas"
+
+    config_get statepath "$cfg" statepath "/var/run/nut"
+    STATEPATH="$statepath"
 
     config_get maxage "$cfg" maxage
-    [ -n "$maxage" ] && echo "MAXAGE $maxage" >>$UPSD_C
+    [ -n "$maxage" ] && echo "MAXAGE $maxage" >>"$UPSD_C"
 
     config_get statepath "$cfg" statepath
-    [ -n "$statepath" ] && echo "STATEPATH $statepath" >>$UPSD_C
+    [ -n "$statepath" ] && echo "STATEPATH $statepath" >>"$UPSD_C"
 
     config_get maxconn "$cfg" maxconn
-    [ -n "$maxconn" ] && echo "MAXCONN $maxconn" >>$UPSD_C
+    [ -n "$maxconn" ] && echo "MAXCONN $maxconn" >>"$UPSD_C"
 
     #NOTE: certs only apply to SSL-enabled version
     config_get certfile "$cfg" certfile
-    [ -n "$certfile" ] && echo "CERTFILE $certfile" >>$UPSD_C
+    [ -n "$certfile" ] && echo "CERTFILE $certfile" >>"$UPSD_C"
 }
 
 nut_user_add() {
@@ -55,104 +78,180 @@ nut_user_add() {
        local val
 
        config_get val "$cfg" username "$1"
-       echo "[$val]" >> $USERS_C
+       echo "[$val]" >> "$USERS_C"
 
        config_get val "$cfg" password
-       echo "  password = $val" >> $USERS_C
+       echo "  password = $val" >> "$USERS_C"
 
        config_get val "$cfg" actions
        for a in $val; do
-           echo "  actions = $a" >> $USERS_C
+           echo "  actions = $a" >> "$USERS_C"
        done
 
        instcmd() {
                local val="$1"
-               echo "  instcmds = $val" >> $USERS_C
+               echo "  instcmds = $val" >> "$USERS_C"
        }
 
        config_list_foreach "$cfg" instcmd instcmd
 
        config_get val "$cfg" upsmon
        if [ -n "$val" ]; then
-           echo "  upsmon $val" >> $USERS_C
+           echo "  upsmon $val" >> "$USERS_C"
        fi
 }
 
-start_service() {
-       local runas statepath
-
-        mkdir -p /var/etc/nut
-       chmod -R 750 /var/etc/nut
-
-       rm -f $UPSD_C
-       rm -f $USERS_C
-       rm -f $UPSD_C
+build_server_config() {
+        mkdir -m 0755 -p "$(dirname "$UPSD_C")"
+       rm -f "$USERS_C"
+       rm -f "$UPSD_C"
        rm -f /var/etc/nut/nut.conf
 
-       echo "# Config file automatically generated from UCI config" > $UPS_C
-       echo "# Config file automatically generated from UCI config" > $USERS_C
-       echo "# Config file automatically generated from UCI config" > $UPSD_C
-
-        local in_driver have_drivers
-       config_cb() {
-           if [ "$1" != "driver" ]; then
-               in_driver=
-           else
-               echo "[$2]" >> $UPS_C
-               in_driver=true
-               have_drivers=true
-           fi
-       }
-       option_cb() {
-           if [ "$in_driver" = "true" ]; then
-               echo " $1 = $2" >> $UPS_C
-           fi
-       }
-
-       config_load nut_server
+       echo "# Config file automatically generated from UCI config" > "$USERS_C"
+       echo "# Config file automatically generated from UCI config" > "$UPSD_C"
 
        config_foreach nut_user_add user
-       config_foreach upsd_config upsd
        config_foreach listen_address listen_address
-
+       config_foreach upsd_config upsd
        echo "MODE=netserver" >>/var/etc/nut/nut.conf
 
-       chmod 0640 $USERS_C
-       chmod 0640 $UPS_C
-       chmod 0640 $UPSD_C
+       chmod 0640 "$USERS_C"
+       chmod 0640 "$UPSD_C"
        chmod 0640 /var/etc/nut/nut.conf
-       [ -d "${statepath:-/var/run/nut}" ] || {
-               mkdir -m 0750 -p "${statepath:-/var/run/nut}"
-               chown $runas:$(id -gn $runas) "${statepath:-/var/run/nut}"
+
+       [ -d "${STATEPATH}" ] || {
+               mkdir -m 0750 -p "${STATEPATH}"
        }
 
-       if [ -n "$runas" ]; then
-               chown -R $runas:$(id -gn $runas) /var/etc/nut
+       if [ -n "$RUNAS" ]; then
+               chown $RUNAS:$(id -gn $RUNAS) "${STATEPATH}"
+               chgrp $(id -gn $RUNAS) "$USERS_C"
+               chgrp $(id -gn $RUNAS) "$UPSD_C"
        fi
+}
 
-       if [ "$have_drivers" = "true" ]; then
-           $DEBUG /usr/sbin/upsd ${runas:+-u $runas} $OPTIONS
-           $DEBUG /usr/sbin/upsdrvctl ${runas:+-u $runas} start
-       fi
+build_driver_config() {
+       local cfg="$1"
+       local runas
+
+       echo "[$cfg]" >>"$UPS_C"
+
+       config_get runas "$cfg" runas "nut"
+       RUNAS="$runas"
+
+       get_write_driver_config "$cfg" driver "usbhid-ups"
+       get_write_driver_config "$cfg" port "auto"
+       get_write_driver_config "$cfg" mfr
+       get_write_driver_config "$cfg" model
+       get_write_driver_config "$cfg" serial
+       get_write_driver_config "$cfg" sdtime
+       get_write_driver_config "$cfg" offdelay 20
+       get_write_driver_config "$cfg" ondelay 30
+       get_write_driver_config "$cfg" pollfreq 30
+       get_write_driver_config "$cfg" vendor
+       get_write_driver_config "$cfg" product
+       get_write_driver_config "$cfg" bus
+       get_write_driver_config "$cfg" interruptonly 0 1
+       get_write_driver_config "$cfg" interruptsize 0
+       get_write_driver_config "$cfg" maxreport
+       get_write_driver_config "$cfg" vendorid
+       get_write_driver_config "$cfg" productid
+       get_write_driver_config "$cfg" community
+       get_write_driver_config "$cfg" snmp_version
+       get_write_driver_config "$cfg" snmp_retries 0
+       get_write_driver_config "$cfg" snmp_timeout 0
+       get_write_driver_config "$cfg" notransferoids 0 1
+       get_write_driver_config "$cfg" other
+       echo "" >>$UPS_C
 }
 
+build_config() {
+        mkdir -m 0755 -p "$(dirname "$UPS_C")"
+       rm -f "$UPS_C"
+       echo "# Config file automatically generated from UCI config" > "$UPS_C"
+       chmod 0640 "$UPS_C"
+
+       config_load nut_server
+       config_foreach build_driver_config driver
+       [ -n "$RUNAS" ] && chgrp $(id -gn $RUNAS) "$UPS_C"
 
-nut_driver_stop() {
+       build_server_config
+}
+
+start_driver_instance() {
        local cfg="$1"
+       local requested="$2"
+       local RUNAS=nut
        local driver
 
-       config_get driver "$cfg" driver
+       # If wanting a specific instance, only start it
+       [ "$requested" != "$cfg" ] && [ x"$requested" != x"" ] && return 0
+
+       mkdir -m 0755 -p "$(dirname "$UPS_C")"
+
+       [ ! -s "$UPS_C" ] && build_config
+
 
-       [ -r ${statepath:-/var/run/nut}/$driver-$cfg ] && /usr/sbin/upsdrvctl stop $cfg
+       # Avoid hotplug inadvertenly restarting driver during
+       # forced shutdown
+       [ -f /var/run/killpower ] && return 0
+       [ -d /var/run/nut ] && [ -f /var/run/nut/disable-hotplug ] && return 0
+
+
+       if [ -n "$RUNAS" ]; then
+               chown $RUNAS:$(id -gn $RUNAS) "${STATEPATH}"
+               chown $RUNAS:$(id -gn $RUNAS) "$(dirname "$UPS_C")"
+       fi
+
+       config_get driver "$cfg" driver "usbhid-ups"
+       procd_open_instance "$cfg"
+       procd_set_param respawn
+       procd_set_param stderr 0
+       procd_set_param stdout 1
+       procd_set_param command /lib/nut/${driver} -D -a "$cfg" ${RUNAS:+-u $RUNAS}
+       procd_close_instance
+}
+
+start_server_instance() {
+       local RUNAS STATEPATH
+       build_config
+
+       procd_open_instance "upsd"
+       procd_set_param respawn
+       procd_set_param stderr 0
+       procd_set_param stdout 1
+       procd_set_param command /usr/sbin/upsd -D ${RUNAS:+-u $RUNAS}
+       procd_close_instance
 }
 
-stop_service() {
-       [ -r $PID_F ] && /usr/sbin/upsd -c stop
-       config_load ups
+start_service() {
+       local STATEPATH=/var/run/nut
+
+       # Avoid hotplug inadvertenly restarting driver during
+       # forced shutdown
+       [ -f /var/run/killpower ] && return 0
+       [ -d /var/run/nut ] && [ -f /var/run/nut/disable-hotplug ] && return 0
+
+       config_load nut_server
        config_foreach upsd_statepath upsd
-       config_foreach nut_driver_stop driver
+
+       [ -d "${STATEPATH}" ] || {
+               mkdir -m 0750 -p "${STATEPATH}"
+       }
+
+       build_config
+       config_foreach start_driver_instance driver "$@"
+
+       [ "$1" != "upsd" ] && [ x"$1" != x"" ] && return 0
+       start_server_instance "upsd"
 }
 
 reload_service() {
-       upsd -c reload
+       stop
+       sleep 2
+       start
+}
+
+service_triggers() {
+       procd_add_reload_trigger "nut_server"
 }
index 9f0bed6fc10f42370651b2c450c8ce6b25bad7e0..dca5de07cc645d5ceedd17bbc26f24c4a70a3bbc 100644 (file)
@@ -4,3 +4,5 @@
 #      option port # optional port number
 #      option displayname "Display Name"
 
+config upsset
+       option enable 0
index 0b71e95cf05b46da7be6bac3046bdac46b696bf4..59e0f360daeeb02b342feaecee12293d7f268522 100644 (file)
@@ -1,14 +1,13 @@
 #config upsmon 'upsmon'
-#      option runas run-as-user
+#      option runas nutmon
 #      option minsupplies 1
-#      option shutdowncmd /sbin/halt
+#      option shutdowncmd '/usr/sbin/nutshutdown'
 #      option notifycmd /path/to/cmd
 #      list defaultnotify SYSLOG
 #      option pollfreq 5
 #      option pollfreqalert 5
 #      option hostsync 15
 #      option deadtime 15
-#      option powerdownflags /var/run/killpower
 #      option onlinemsg "online message"
 #      option onbattmsg "on battery message"
 #      option lowbattmsg "low battery message"
@@ -51,4 +50,3 @@
 #      option powervalue 1
 #      option username upsuser
 #      option password upspassword
-
index bebd169db61756adaaceb6889005c0abdfdb4521..464d56303be09e87fd9484b79c7012a203f684db 100644 (file)
@@ -19,5 +19,6 @@
 #      option maxage 15
 #      option statepath /var/run/nut
 #      option maxconn 1024
+#      option runas nut
 # NB: certificates only apply to SSL-enabled version
 #       option certfile /usr/local/etc/upsd.pem
diff --git a/net/nut/files/nutshutdown b/net/nut/files/nutshutdown
new file mode 100755 (executable)
index 0000000..e4fd962
--- /dev/null
@@ -0,0 +1,41 @@
+#!/bin/sh
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+. /lib/functions.sh
+
+mount -o remount,ro /overlay /overlay
+mount -o remount,ro / /
+
+stop_instance() {
+       /etc/init.d/nut-server stop "$1"
+}
+
+shutdown_instance() {
+       local cfg="$1"
+       config_get driver "$cfg" driver "usbhid-ups"
+       /lib/nut/${driver} -a "$cfg" -k
+}
+
+[ -f /var/run/killpower ] && {
+       [ -f /etc/config/nut_server ] && {
+               config_load nut_server
+
+               # Can't FSD unless drivers are stopped
+               config_foreach stop_instance driver
+               # Driver will  wait 'offdelay' before shutting down
+               config_foreach shutdown_instance driver
+               # So this can happen
+               poweroff
+               # And just in case
+               sleep 120
+               # Uh-oh failed to poweroff UPS
+               reboot -f
+       } || {
+               poweroff
+       }
+} || {
+       poweroff
+}
index bbe45c26f68edaacf051b91a9e308891148046ef..fec430f9f83d40fb636a48691e35bc8a802df45f 100644 (file)
@@ -9,20 +9,18 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=ola
-PKG_VERSION:=0.10.6
-PKG_RELEASE:=3
-
-PKG_SOURCE_PROTO:=git
-PKG_SOURCE_URL:=https://github.com/OpenLightingProject/ola.git
-PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=6e57342c414a72cdd721e8df5bc7967e17459647
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
-PKG_MIRROR_HASH:=c1f36eaedcd9711e42fd362ff84d8e66eb40bc6af97de77129a5074d05fb9936
+PKG_VERSION:=0.10.7
+PKG_RELEASE:=2
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://codeload.github.com/OpenLightingProject/ola/tar.gz/$(PKG_VERSION)?
+PKG_HASH:=95b5e99775f700a9cdf6e2219eccfc8c037fa8841f87cb00344359c4b8c7bf26
+
 PKG_LICENSE:=LGPL-2.1+
 
 PKG_FIXUP:=libtool
-PKG_INSTALL:=1
 
+PKG_INSTALL:=1
 PKG_BUILD_PARALLEL:=1
 PKG_USE_MIPS16:=0
 
@@ -38,7 +36,7 @@ define Package/ola
   TITLE:=Open Lighting Architecture Daemon
   URL:=https://www.openlighting.org/
   MAINTAINER:=Christian Beier <dontmind@freeshell.org>
-  DEPENDS:=+protobuf +libusb-1.0 +libuuid +libstdcpp +libpthread +librt +zlib +libncurses +liblo +libmicrohttpd
+  DEPENDS:=+protobuf +libftdi1 +libusb-1.0 +libuuid +libstdcpp +libpthread +librt +zlib +libncurses +liblo +libmicrohttpd
 endef
 
 define Package/ola/description
@@ -61,7 +59,6 @@ HOST_CONFIGURE_ARGS += \
        --disable-osc \
        --disable-uart \
        --disable-libusb \
-       --disable-libftdi \
        --disable-http  \
        --disable-examples \
        --disable-unittests \
index fe1acdfc5a9e9370b9840b23348ab0961d68498e..a07ddeb3e856ff08725e3471c946d6f1e6157401 100644 (file)
@@ -2,7 +2,7 @@ diff --git a/Makefile.am b/Makefile.am
 index 22647be..7dcf0de 100644
 --- a/Makefile.am
 +++ b/Makefile.am
-@@ -32,7 +32,7 @@ AM_DISTCHECK_CONFIGURE_FLAGS = --enable-python-libs
+@@ -45,7 +45,7 @@ AM_DISTCHECK_CONFIGURE_FLAGS = --enable-python-libs
  COMMON_CXXFLAGS_ONLY_WARNINGS = \
      -I$(top_srcdir)/include \
      -I$(top_builddir)/include \
index 47f2b6059c1ddff3fec58d327d5441c2196ff24e..09063abaaadfefe9f9d846021c7fb3e8e6383bde 100644 (file)
@@ -8,20 +8,21 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=openssh
-PKG_VERSION:=7.7p1
+PKG_VERSION:=7.9p1
 PKG_RELEASE:=2
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/ \
                https://ftp.spline.de/pub/OpenBSD/OpenSSH/portable/ \
                https://anorien.csc.warwick.ac.uk/pub/OpenBSD/OpenSSH/portable/
-PKG_HASH:=d73be7e684e99efcd024be15a30bffcbe41b012b2f7b3c9084aed621775e6b8f
+PKG_HASH:=6b4b3ba2253d84ed3771c8050728d597c91cfce898713beb7b64a305b6f11aad
 
 PKG_LICENSE:=BSD ISC
 PKG_LICENSE_FILES:=LICENCE
 
 
 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)
+PKG_REMOVE_FILES:=
 
 include $(INCLUDE_DIR)/package.mk
 
diff --git a/net/openssh/patches/0001-fix-compilation-with-openssl-built-without-ECC.patch b/net/openssh/patches/0001-fix-compilation-with-openssl-built-without-ECC.patch
new file mode 100644 (file)
index 0000000..e430dfe
--- /dev/null
@@ -0,0 +1,70 @@
+From 91b777c7064d9d91a1433a42b0bb31592388d1b4 Mon Sep 17 00:00:00 2001
+From: Eneas U de Queiroz <cote2004-github@yahoo.com>
+Date: Tue, 9 Oct 2018 16:17:42 -0300
+Subject: [PATCH] fix compilation with openssl built without ECC
+
+ECDSA code in openssh-compat.h and libressl-api-compat.c needs to be
+guarded by OPENSSL_HAS_ECC
+
+Signed-off-by: Eneas U de Queiroz <cote2004-github@yahoo.com>
+
+diff --git a/openbsd-compat/libressl-api-compat.c b/openbsd-compat/libressl-api-compat.c
+index de3e64a6..ae00ff59 100644
+--- a/openbsd-compat/libressl-api-compat.c
++++ b/openbsd-compat/libressl-api-compat.c
+@@ -152,7 +152,9 @@
+ #include <openssl/dsa.h>
+ #include <openssl/rsa.h>
+ #include <openssl/evp.h>
++#ifdef OPENSSL_HAS_ECC
+ #include <openssl/ecdsa.h>
++#endif
+ #include <openssl/dh.h>
+ #ifndef HAVE_DSA_GET0_PQG
+@@ -417,6 +419,7 @@ DSA_SIG_set0(DSA_SIG *sig, BIGNUM *r, BIGNUM *s)
+ }
+ #endif /* HAVE_DSA_SIG_SET0 */
++#ifdef OPENSSL_HAS_ECC
+ #ifndef HAVE_ECDSA_SIG_GET0
+ void
+ ECDSA_SIG_get0(const ECDSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps)
+@@ -442,6 +445,7 @@ ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s)
+       return 1;
+ }
+ #endif /* HAVE_ECDSA_SIG_SET0 */
++#endif /* OPENSSL_HAS_ECC */
+ #ifndef HAVE_DH_GET0_PQG
+ void
+diff --git a/openbsd-compat/openssl-compat.h b/openbsd-compat/openssl-compat.h
+index 9e0264c0..6a525f28 100644
+--- a/openbsd-compat/openssl-compat.h
++++ b/openbsd-compat/openssl-compat.h
+@@ -24,7 +24,9 @@
+ #include <openssl/evp.h>
+ #include <openssl/rsa.h>
+ #include <openssl/dsa.h>
++#ifdef OPENSSL_HAS_ECC
+ #include <openssl/ecdsa.h>
++#endif
+ #include <openssl/dh.h>
+ int ssh_compatible_openssl(long, long);
+@@ -161,6 +163,7 @@ void DSA_SIG_get0(const DSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps);
+ int DSA_SIG_set0(DSA_SIG *sig, BIGNUM *r, BIGNUM *s);
+ #endif /* DSA_SIG_SET0 */
++#ifdef OPENSSL_HAS_ECC
+ #ifndef HAVE_ECDSA_SIG_GET0
+ void ECDSA_SIG_get0(const ECDSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps);
+ #endif /* HAVE_ECDSA_SIG_GET0 */
+@@ -168,6 +171,7 @@ void ECDSA_SIG_get0(const ECDSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps);
+ #ifndef HAVE_ECDSA_SIG_SET0
+ int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s);
+ #endif /* HAVE_ECDSA_SIG_SET0 */
++#endif /* OPENSSL_HAS_ECC */
+ #ifndef HAVE_DH_GET0_PQG
+ void DH_get0_pqg(const DH *dh, const BIGNUM **p, const BIGNUM **q,
diff --git a/net/openssh/patches/0002-Fix-OPENSSL_init_crypto-call-for-openssl-1.1.patch b/net/openssh/patches/0002-Fix-OPENSSL_init_crypto-call-for-openssl-1.1.patch
new file mode 100644 (file)
index 0000000..7c1e15d
--- /dev/null
@@ -0,0 +1,20 @@
+From edfc2e18ef069ba600c8f4632ce1e3dc94a0669a Mon Sep 17 00:00:00 2001
+From: Eneas U de Queiroz <cote2004-github@yahoo.com>
+Date: Fri, 19 Oct 2018 10:04:24 -0300
+Subject: [PATCH 2/2] Fix OPENSSL_init_crypto call for openssl < 1.1
+
+Signed-off-by: Eneas U de Queiroz <cote2004-github@yahoo.com>
+
+diff --git a/openbsd-compat/openssl-compat.c b/openbsd-compat/openssl-compat.c
+index 8b4a3627..590b66d1 100644
+--- a/openbsd-compat/openssl-compat.c
++++ b/openbsd-compat/openssl-compat.c
+@@ -76,7 +76,7 @@ ssh_OpenSSL_add_all_algorithms(void)
+       ENGINE_load_builtin_engines();
+       ENGINE_register_all_complete();
+-#if OPENSSL_VERSION_NUMBER < 0x10001000L
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+       OPENSSL_config(NULL);
+ #else
+       OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS |
diff --git a/net/openssh/patches/100-dscp-qos.patch b/net/openssh/patches/100-dscp-qos.patch
deleted file mode 100644 (file)
index adbb7e3..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
---- a/ssh_config
-+++ b/ssh_config
-@@ -44,3 +44,6 @@
- #   VisualHostKey no
- #   ProxyCommand ssh -q -W %h:%p gateway.example.com
- #   RekeyLimit 1G 1h
-+
-+# enable DSCP QoS values (per RFC-4594)
-+#IPQoS AF21 AF11
---- a/sshd_config
-+++ b/sshd_config
-@@ -106,6 +106,9 @@ AuthorizedKeysFile .ssh/authorized_keys
- # no default banner path
- #Banner none
-+# enable DSCP QoS values (per RFC-4594)
-+#IPQoS AF21 AF11
-+
- # override default of no subsystems
- Subsystem     sftp    /usr/libexec/sftp-server
index cc52c0a99a254c3439f169c4afc4a7264caa37b1..9ed24eec2bb2219195895ce0cdf948417f9bf23f 100644 (file)
@@ -9,12 +9,17 @@
 include $(TOPDIR)/rules.mk
 include $(INCLUDE_DIR)/kernel.mk
 
+# Checklist on version bump
+#
+#  - Check acinclude.m4 for range of supported kernel versions: "but version newer than .* is not supported"
+#  - Check and update kmod dependencies when necessary (runtime module load check in the least)
+#
 PKG_NAME:=openvswitch
-PKG_VERSION:=2.9.2
-PKG_RELEASE:=2
+PKG_VERSION:=2.10.0
+PKG_RELEASE:=4
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://www.openvswitch.org/releases/
-PKG_HASH:=90f084dc282fdb588a2cfff351fea359492f69600f1e4a1286e24e44901de113
+PKG_HASH:=64f7cdcfffc73b2e09980d04ee22731eadd6453698b92d7397c9e45c7c174050
 
 PKG_LICENSE:=Apache-2.0
 PKG_LICENSE_FILES:=LICENSE
@@ -32,67 +37,101 @@ include ../../lang/python/python-host.mk
 include ../../lang/python/python-package.mk
 
 
-CONFIGURE_ARGS+= \
-       --enable-ndebug \
-       --enable-shared \
-       --disable-libcapng \
+ovs_kmod_packages:=
+ovs_kmod_intree_kernel_patchver_min:=3.10
+ovs_kmod_intree_kernel_patchver_max:=4.15
+ovs_kmod_intree_not_supported:=$(strip $(call kernel_patchver_lt,$(ovs_kmod_intree_kernel_patchver_min))$(call kernel_patchver_gt,$(ovs_kmod_intree_kernel_patchver_max)))
+ovs_kmod_intree_dir:=$(PKG_BUILD_DIR)/datapath/linux
+ovs_kmod_upstream_dir:=$(LINUX_DIR)/net/openvswitch
+ovs_kmod_package_name=$(if $(filter openvswitch,$(1)),openvswitch,$(1))
+ovs_kmod_is_intree=$(filter %-intree,$(1))
+ovs_kmod_upstream_name=kmod-$(call ovs_kmod_package_name,$(patsubst %-intree,%,$(1)))
+ovs_kmod_package_provides=$(call ovs_kmod_upstream_name,$(1))
+define OvsKmodPackageTemplate
+  define KernelPackage/$(call ovs_kmod_package_name,$(1))
+     SECTION:=kernel
+     CATEGORY:=Kernel modules
+     SUBMENU:=Network Support
+     TITLE:=$(ovs_kmod_$(1)_title)
+     DEPENDS:=$(ovs_kmod_$(1)_depends) $(if $(call ovs_kmod_is_intree,$(1)),@DEVEL $(if $(ovs_kmod_intree_not_supported),@BROKEN))
+     PROVIDES:=$(call ovs_kmod_package_provides,$(1))
+     KCONFIG:=$(ovs_kmod_$(1)_kconfig)
+     FILES:=$(ovs_kmod_$(1)_files)
+     AUTOLOAD:=$(call AutoProbe,$(foreach m,$(ovs_kmod_$(1)_files),$(patsubst %.ko,%,$(basename $(m)))))
+  endef
 
-CONFIGURE_VARS += \
-       ovs_cv_flake8=no \
-       ovs_cv_python3=no \
-       ovs_cv_sphinx=no \
-       ovs_cv_python=$(PYTHON) \
-       ovs_cv_python_host=$(HOST_PYTHON_BIN) \
+  ovs_kmod_packages+=$(call ovs_kmod_package_name,$(1))
+endef
 
-TARGET_CFLAGS += -flto -std=gnu99
-MAKE_VARS += PYTHONPATH="$(HOST_PYTHONPATH)"
+ovs_kmod_openvswitch_title:=Open vSwitch kernel datapath (upstream)
+ovs_kmod_openvswitch_kconfig:=CONFIG_OPENVSWITCH
+ovs_kmod_openvswitch_depends:=\
+         +kmod-lib-crc32c +kmod-mpls \
+         +kmod-nf-nat +IPV6:kmod-nf-nat6 \
+         +kmod-nf-conntrack +IPV6:kmod-nf-conntrack6
+ovs_kmod_openvswitch_files:=$(ovs_kmod_upstream_dir)/openvswitch.ko
+$(eval $(call OvsKmodPackageTemplate,openvswitch))
+
+ovs_kmod_openvswitch-gre_title:=Open vSwitch GRE tunneling support (upstream)
+ovs_kmod_openvswitch-gre_kconfig:= CONFIG_OPENVSWITCH_GRE
+ovs_kmod_openvswitch-gre_depends:= +kmod-openvswitch +kmod-gre
+ovs_kmod_openvswitch-gre_files:= $(ovs_kmod_upstream_dir)/vport-gre.ko
+$(eval $(call OvsKmodPackageTemplate,openvswitch-gre))
+
+ovs_kmod_openvswitch-vxlan_title:=Open vSwitch VXLAN tunneling support (upstream)
+ovs_kmod_openvswitch-vxlan_kconfig:= CONFIG_OPENVSWITCH_VXLAN
+ovs_kmod_openvswitch-vxlan_depends:= +kmod-openvswitch +kmod-vxlan
+ovs_kmod_openvswitch-vxlan_files:= $(ovs_kmod_upstream_dir)/vport-vxlan.ko
+$(eval $(call OvsKmodPackageTemplate,openvswitch-vxlan))
+
+ovs_kmod_openvswitch-geneve_title:=Open vSwitch Geneve tunneling support (upstream)
+ovs_kmod_openvswitch-geneve_kconfig:= CONFIG_OPENVSWITCH_GENEVE
+ovs_kmod_openvswitch-geneve_depends:= +kmod-openvswitch +kmod-geneve
+ovs_kmod_openvswitch-geneve_files:= $(ovs_kmod_upstream_dir)/vport-geneve.ko
+$(eval $(call OvsKmodPackageTemplate,openvswitch-geneve))
+
+# NOTE depends
+#
+#  - kmod-gre: with linux-4.14, ovs-2.10, when ovs decides to not
+#    USE_UPSTREAM_TUNNEL, it requires kmod-gre to be enabled so that
+#    CONFIG_NET_IPGRE_DEMUX is enabled and ovs will have rpl_gre_init()
+#    compiled in.
+#
+#  - kmod-gre6: with linux-4.14, ovs-2.10, when ovs decides to not
+#    USE_UPSTREAM_TUNNEL, it requires xfrm6_tunnel_register() from
+#    net/ipv6/tunnel6.ko, which will be pulled in by kmod-ip6-tunnel, which
+#    will be pulled in by kmod-gre6.  NOTE that tunnel6.ko itself cannot be
+#    enabled and selected on its own
+#
+ovs_kmod_openvswitch-intree_title:=Open vSwitch kernel datapath (in tree)
+ovs_kmod_openvswitch-intree_depends:=$(ovs_kmod_openvswitch_depends) +kmod-gre +IPV6:kmod-gre6
+ovs_kmod_openvswitch-intree_files:= $(ovs_kmod_intree_dir)/openvswitch.ko
+$(eval $(call OvsKmodPackageTemplate,openvswitch-intree))
 
+ovs_kmod_openvswitch-gre-intree_title:=Open vSwitch GRE tunneling support (in tree)
+ovs_kmod_openvswitch-gre-intree_depends:= +kmod-openvswitch-intree +kmod-gre
+ovs_kmod_openvswitch-gre-intree_files:= $(ovs_kmod_intree_dir)/vport-gre.ko
+$(eval $(call OvsKmodPackageTemplate,openvswitch-gre-intree))
 
-define KernelPackage/openvswitch
-  SECTION:=kernel
-  CATEGORY:=Kernel modules
-  SUBMENU:=Network Support
-  TITLE:=Open vSwitch kernel datapath
-  KCONFIG:=CONFIG_OPENVSWITCH
-  DEPENDS:= \
-       +kmod-lib-crc32c +kmod-mpls \
-       +kmod-nf-nat +IPV6:kmod-nf-nat6
-  FILES:= $(LINUX_DIR)/net/openvswitch/openvswitch.ko
-  AUTOLOAD:=$(call AutoProbe,openvswitch)
-endef
+ovs_kmod_openvswitch-vxlan-intree_title:=Open vSwitch VXLAN tunneling support (in tree)
+ovs_kmod_openvswitch-vxlan-intree_depends:= +kmod-openvswitch-intree +kmod-vxlan
+ovs_kmod_openvswitch-vxlan-intree_files:= $(ovs_kmod_intree_dir)/vport-vxlan.ko
+$(eval $(call OvsKmodPackageTemplate,openvswitch-vxlan-intree))
 
-define KernelPackage/openvswitch-gre
-  SECTION:=kernel
-  CATEGORY:=Kernel modules
-  SUBMENU:=Network Support
-  TITLE:=Open vSwitch GRE tunneling support
-  KCONFIG:= CONFIG_OPENVSWITCH_GRE
-  DEPENDS:= +kmod-openvswitch +kmod-gre
-  FILES:= $(LINUX_DIR)/net/openvswitch/vport-gre.ko
-  AUTOLOAD:=$(call AutoProbe,vport-gre)
-endef
+ovs_kmod_openvswitch-geneve-intree_title:=Open vSwitch Geneve tunneling support (in tree)
+ovs_kmod_openvswitch-geneve-intree_depends:= +kmod-openvswitch-intree +kmod-geneve
+ovs_kmod_openvswitch-geneve-intree_files:= $(ovs_kmod_intree_dir)/vport-geneve.ko
+$(eval $(call OvsKmodPackageTemplate,openvswitch-geneve-intree))
 
-define KernelPackage/openvswitch-vxlan
-  SECTION:=kernel
-  CATEGORY:=Kernel modules
-  SUBMENU:=Network Support
-  TITLE:=Open vSwitch VXLAN tunneling support
-  KCONFIG:= CONFIG_OPENVSWITCH_VXLAN
-  DEPENDS:= +kmod-openvswitch +kmod-vxlan
-  FILES:= $(LINUX_DIR)/net/openvswitch/vport-vxlan.ko
-  AUTOLOAD:=$(call AutoProbe,vport-vxlan)
-endef
+ovs_kmod_openvswitch-stt-intree_title:=Open vSwitch STT tunneling support (in tree)
+ovs_kmod_openvswitch-stt-intree_depends:= +kmod-openvswitch-intree
+ovs_kmod_openvswitch-stt-intree_files:= $(ovs_kmod_intree_dir)/vport-stt.ko
+$(eval $(call OvsKmodPackageTemplate,openvswitch-stt-intree))
 
-define KernelPackage/openvswitch-geneve
-  SECTION:=kernel
-  CATEGORY:=Kernel modules
-  SUBMENU:=Network Support
-  TITLE:=Open vSwitch Geneve tunneling support
-  KCONFIG:= CONFIG_OPENVSWITCH_GENEVE
-  DEPENDS:= +kmod-openvswitch +kmod-geneve
-  FILES:= $(LINUX_DIR)/net/openvswitch/vport-geneve.ko
-  AUTOLOAD:=$(call AutoProbe,vport-geneve)
-endef
+ovs_kmod_openvswitch-lisp-intree_title:=Open vSwitch LISP tunneling support (in tree)
+ovs_kmod_openvswitch-lisp-intree_depends:= +kmod-openvswitch-intree
+ovs_kmod_openvswitch-lisp-intree_files:= $(ovs_kmod_intree_dir)/vport-lisp.ko
+$(eval $(call OvsKmodPackageTemplate,openvswitch-lisp-intree))
 
 
 ovs_packages:=
@@ -105,7 +144,7 @@ define OvsPackageTemplate
      URL:=https://www.openvswitch.org
      TITLE:=$(ovs_$(1)_title)
      HIDDEN:=$(ovs_$(1)_hidden)
-     DEPENDS:=$(ovs_$(1)_depends)
+     DEPENDS:=$(ovs_$(1)_depends) +libunbound
   endef
 
   define Package/$(call ovs_package_name,$(1))/install
@@ -173,6 +212,7 @@ ovs_common_depends:=+librt +openvswitch-libopenvswitch +openvswitch-libofproto +
 ovs_common_files:= \
        usr/share/openvswitch/scripts/ovs-lib \
        usr/share/openvswitch/scripts/ovs-ctl \
+       usr/share/openvswitch/scripts/ovs-kmod-ctl \
        usr/share/openvswitch/scripts/ovs-save \
        $(foreach b,ovs-appctl ovs-dpctl ovs-ofctl ovs-vsctl ovsdb-client ovsdb-tool,usr/bin/$(b))
 define ovs_common_install
@@ -184,6 +224,7 @@ define ovs_common_install
        $$(INSTALL_DIR) $$(1)/usr/share/openvswitch/scripts
        $$(INSTALL_BIN) ./files/ovs-ctl-wrapper $$(1)/usr/share/openvswitch/scripts/
        $$(LN) /usr/share/openvswitch/scripts/ovs-ctl-wrapper $$(1)/usr/bin/ovs-ctl
+       $$(LN) /usr/share/openvswitch/scripts/ovs-ctl-wrapper $$(1)/usr/bin/ovs-kmod-ctl
 endef
 define Package/openvswitch-common/conffiles
 /etc/openvswitch
@@ -242,11 +283,32 @@ endef
 $(eval $(call OvsPackageTemplate,python))
 
 
+CONFIGURE_ARGS+= \
+       --enable-ndebug \
+       --enable-shared \
+       --disable-libcapng \
+
+CONFIGURE_VARS += \
+       ovs_cv_flake8=no \
+       ovs_cv_python3=no \
+       ovs_cv_sphinx=no \
+       ovs_cv_python=$(PYTHON) \
+       ovs_cv_python_host=$(HOST_PYTHON_BIN) \
+       KARCH=$(LINUX_KARCH) \
+
+ovs_intree_kmod_configs:=CONFIG_PACKAGE_kmod-openvswitch-intree
+ovs_intree_kmod_enabled:=$(strip $(foreach c,$(ovs_intree_kmod_configs),$(c)))
+PKG_CONFIG_DEPENDS+=$(ovs_intree_kmod_configs)
+ifneq ($(ovs_intree_kmod_enabled),)
+  CONFIGURE_ARGS += --with-linux=$(LINUX_DIR)
+endif
+
+TARGET_CFLAGS += -flto -std=gnu99
+MAKE_VARS += PYTHONPATH="$(HOST_PYTHONPATH)"
+
+$(foreach p,$(ovs_kmod_packages),\
+  $(eval $(call KernelPackage,$(p)))\
+)
 $(foreach p,$(ovs_packages),\
   $(eval $(call BuildPackage,$(p)))\
 )
-
-$(eval $(call KernelPackage,openvswitch))
-$(eval $(call KernelPackage,openvswitch-gre))
-$(eval $(call KernelPackage,openvswitch-vxlan))
-$(eval $(call KernelPackage,openvswitch-geneve))
index f3b754e751b64b89009e6d0eb4a9ad9744e983dc..541056a498780bcccacaa1c4c9dfce1ce6ca26d6 100644 (file)
@@ -27,3 +27,36 @@ mainly a wrapper around `ovs-ctl` and `ovn-ctl` with simple knobs from
        /etc/init.d/openvswitch status
 
 Use `ovs-ctl` and `ovn-ctl` directly for more functionalities
+
+# Open vSwitch in-tree Linux datapath modules
+
+The Open vSwitch build system uses regexp and conditional-compilation
+heuristics to support building the shipped kernel module source code against a
+wide range of kernels, as of openvswitch-2.10, the list is supposed to include
+vanilla linux 3.10 to 4.15, plus a few distro kernels.
+
+It may NOT work
+
+ - Sometimes the code does not compile
+ - Sometimes the code compiles but insmod will fail
+ - Sometimes modules are loaded okay but actually does not function right
+
+For these reasons, the in-tree datapath modules are NOT visible/enabled by
+default.
+
+Building and using in-tree datapath modules requires some level of devel
+abilities to proceed.  You are expected to configure build options and build
+the code on your own
+
+E.g. pair openvswitch userspace with in-tree datapath module
+
+       CONFIG_DEVEL=y
+       CONFIG_PACKAGE_openvswitch=y
+       # CONFIG_PACKAGE_kmod-openvswitch is not set
+       CONFIG_PACKAGE_kmod-openvswitch-intree=y
+
+E.g. replace in-tree datapath module with upstream version
+
+       opkg remove --force-depends kmod-openvswitch-intree
+       opkg install kmod-openvswitch
+       ovs-ctl force-reload-kmod
index 3af1b1e405a39eb2767196603e0c95d29ffcb922..f504bb63a30ad75d99544ca37b2e8f747b34f54c 100755 (executable)
@@ -6,8 +6,8 @@
 START=15
 
 ovs_script_dir=/usr/share/openvswitch/scripts
-ovs_ctl="$ovs_script_dir/ovs-ctl"
-ovn_ctl="$ovs_script_dir/ovn-ctl"
+ovs_ctl="$ovs_script_dir/ovs-ctl"; [ -x "$ovs_ctl" ] || ovs_ctl=:
+ovn_ctl="$ovs_script_dir/ovn-ctl"; [ -x "$ovn_ctl" ] || ovn_ctl=:
 
 EXTRA_COMMANDS=status
 
index 20f3446125966bbbeb06e13b30f74d2cb3592da2..88ae72429cc4ad1fdad8a56d86281905d2e0df3b 100755 (executable)
@@ -3,6 +3,7 @@
 s=/usr/share/openvswitch/scripts
 case "$0" in
        *ovs-ctl) "$s/ovs-ctl" "$@" ;;
+       *ovs-kmod-ctl) "$s/ovs-kmod-ctl" "$@" ;;
        *ovn-ctl) "$s/ovn-ctl" "$@" ;;
        *) exit 1;;
 esac
index 9dfcf6a8c269941bc802ad991c2d3d7cd053ca63..9c2a154e973108bc3de3c2a1cf7541356b2e794d 100644 (file)
@@ -1,7 +1,7 @@
-From c27232c954cdbe0207252ad88fddad4fd6ac0fbc Mon Sep 17 00:00:00 2001
+From e4ac9741a99866976322c21605b312bc27633c92 Mon Sep 17 00:00:00 2001
 From: Helmut Schaa <helmut.schaa@googlemail.com>
 Date: Wed, 8 Jan 2014 13:48:33 +0100
-Subject: [PATCH 100/104] netdev-linux: Use unsigned int for ifi_flags
+Subject: [PATCH 100/107] netdev-linux: Use unsigned int for ifi_flags
 
 ifi_flags is unsigned, the local equivalents should do the same.
 
@@ -10,9 +10,11 @@ Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
  lib/netdev-linux.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
+diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c
+index e16ea58a0..5ada9a21f 100644
 --- a/lib/netdev-linux.c
 +++ b/lib/netdev-linux.c
-@@ -2810,7 +2810,7 @@ update_flags(struct netdev_linux *netdev
+@@ -3115,7 +3115,7 @@ update_flags(struct netdev_linux *netdev, enum netdev_flags off,
               enum netdev_flags on, enum netdev_flags *old_flagsp)
      OVS_REQUIRES(netdev->mutex)
  {
index a01758e20d323ca02852195ce00991547db15d87..45770b7c784d0ab5ff6b3c21509805de400935d0 100644 (file)
@@ -1,7 +1,7 @@
-From a6df8dd455c8be7c0c2ba79f35cf5390e892b39e Mon Sep 17 00:00:00 2001
+From 9f4775d9a2541e8128ea99f3b02925cc1ee05374 Mon Sep 17 00:00:00 2001
 From: Helmut Schaa <helmut.schaa@googlemail.com>
 Date: Wed, 8 Jan 2014 13:48:49 +0100
-Subject: [PATCH 101/104] netdev-linux: Let interface flag survive internal
+Subject: [PATCH 101/107] netdev-linux: Let interface flag survive internal
  port setup
 
 Due to a race condition when bringing up an internal port on Linux
@@ -17,9 +17,11 @@ Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
  lib/netdev-linux.c | 8 +++++++-
  1 file changed, 7 insertions(+), 1 deletion(-)
 
+diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c
+index 5ada9a21f..bb8275cfa 100644
 --- a/lib/netdev-linux.c
 +++ b/lib/netdev-linux.c
-@@ -2813,7 +2813,13 @@ update_flags(struct netdev_linux *netdev
+@@ -3118,7 +3118,13 @@ update_flags(struct netdev_linux *netdev, enum netdev_flags off,
      unsigned int old_flags, new_flags;
      int error = 0;
  
index 568fd7bd2d1d48276aa47e673dede8e7aab9aaf4..e403f266699b7dacaa8dbcc36d8092a92ba0b24b 100644 (file)
@@ -1,17 +1,19 @@
-From b3cc748d502f7f87aeb103b3f69573b0e640e2ba Mon Sep 17 00:00:00 2001
-From: Yousong Zhou <yszhou4tech@gmail.com>
-Date: Wed, 28 Feb 2018 13:42:44 +0800
-Subject: [PATCH 102/104] python: separate host/target python for cross-compile
+From e451d74788c73e8679e6a2268185a08901ac7f8c Mon Sep 17 00:00:00 2001
+From: Yousong Zhou <zhouyousong@yunionyun.com>
+Date: Tue, 21 Aug 2018 12:21:05 +0000
+Subject: [PATCH 102/107] python: separate host/target python for cross-compile
 
 At the moment, python-six is a requirement for openvswitch python
 library on target machine.
 
 Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
 ---
- Makefile.am       |  2 +-
- m4/openvswitch.m4 | 12 ++++--------
- 2 files changed, 5 insertions(+), 9 deletions(-)
+ Makefile.am       | 2 +-
+ m4/openvswitch.m4 | 2 ++
+ 2 files changed, 3 insertions(+), 1 deletion(-)
 
+diff --git a/Makefile.am b/Makefile.am
+index 788972804..cd90cc176 100644
 --- a/Makefile.am
 +++ b/Makefile.am
 @@ -60,7 +60,7 @@ endif
@@ -23,30 +25,17 @@ Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
  
  ALL_LOCAL =
  BUILT_SOURCES =
+diff --git a/m4/openvswitch.m4 b/m4/openvswitch.m4
+index 5743f83ce..acb6b140e 100644
 --- a/m4/openvswitch.m4
 +++ b/m4/openvswitch.m4
-@@ -351,20 +351,16 @@ else:
-    if test $ovs_cv_python = no; then
-      AC_MSG_ERROR([cannot find python 2.7 or higher.])
-    fi
--   AM_MISSING_PROG([PYTHON], [python])
-+   AC_SUBST([PYTHON])
-    PYTHON=$ovs_cv_python
-+   AM_MISSING_PROG([PYTHON_HOST], [python])
-+   PYTHON_HOST=$ovs_cv_python_host
+@@ -449,7 +449,9 @@ AC_DEFUN([OVS_CHECK_PYTHON],
+       fi])
+     AC_SUBST([PYTHON])
+     PYTHON=$ovs_cv_python
++    PYTHON_HOST=$ovs_cv_python_host
+     AC_SUBST([HAVE_PYTHON])
++    AM_MISSING_PROG([PYTHON_HOST], [python])
+     HAVE_PYTHON=yes
+     AM_CONDITIONAL([HAVE_PYTHON], [test "$HAVE_PYTHON" = yes])])
  
-    # HAVE_PYTHON is always true.  (Python has not always been a build
-    # requirement, so this variable is now obsolete.)
-    AC_SUBST([HAVE_PYTHON])
-    HAVE_PYTHON=yes
--   AM_CONDITIONAL([HAVE_PYTHON], [test "$HAVE_PYTHON" = yes])
--
--   AC_MSG_CHECKING([whether $PYTHON has six library])
--   if ! $PYTHON -c 'import six ; six.moves.range' >&AS_MESSAGE_LOG_FD 2>&1; then
--     AC_MSG_ERROR([Missing Python six library or version too old.])
--   fi
--   AC_MSG_RESULT([yes])])
-+   AM_CONDITIONAL([HAVE_PYTHON], [test "$HAVE_PYTHON" = yes])])
- dnl Checks for Python 3.x, x >= 4.
- AC_DEFUN([OVS_CHECK_PYTHON3],
index 258b3155cca5ecbed262a7f8d157022340d398f4..5910a6b0f770391567e0ac20c0c4ad98acf6f510 100644 (file)
@@ -1,7 +1,7 @@
-From 05a6fa94778f9d6c54ca676de80708d03d6c365a Mon Sep 17 00:00:00 2001
+From 6b9732c8851c5466f2a363d88b5acae320801efe Mon Sep 17 00:00:00 2001
 From: Yousong Zhou <yszhou4tech@gmail.com>
 Date: Wed, 14 Mar 2018 16:40:01 +0800
-Subject: [PATCH 103/104] ovs-ctl: fix setting hostname
+Subject: [PATCH 103/107] ovs-ctl: fix setting hostname
 
 The command "hostname" is not available in OpenWrt by default.
 
@@ -13,9 +13,11 @@ Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
  utilities/ovs-ctl.in | 4 +---
  1 file changed, 1 insertion(+), 3 deletions(-)
 
+diff --git a/utilities/ovs-ctl.in b/utilities/ovs-ctl.in
+index 43c8f32b7..6203ecff5 100755
 --- a/utilities/ovs-ctl.in
 +++ b/utilities/ovs-ctl.in
-@@ -64,9 +64,7 @@ insert_mod_if_required () {
+@@ -36,9 +36,7 @@ insert_mod_if_required () {
  }
  
  set_hostname () {
index ab2ecf541063bad5b530a4fc790ce9aab71b2a10..86c329f556e1c0b782ab3f7096711ef7802365fe 100644 (file)
@@ -1,7 +1,7 @@
-From 43b855e201bd25a015ba6444cabce12b8cc181ec Mon Sep 17 00:00:00 2001
+From 940441e2982cb35765830060e8203e5dd1a0f967 Mon Sep 17 00:00:00 2001
 From: Yousong Zhou <yszhou4tech@gmail.com>
 Date: Wed, 14 Mar 2018 16:44:13 +0800
-Subject: [PATCH 104/104] ovs-lib: fix install_dir()
+Subject: [PATCH 104/107] ovs-lib: fix install_dir()
 
 The command "install" is not available in OpenWrt by default
 
@@ -10,9 +10,11 @@ Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
  utilities/ovs-lib.in | 5 ++++-
  1 file changed, 4 insertions(+), 1 deletion(-)
 
+diff --git a/utilities/ovs-lib.in b/utilities/ovs-lib.in
+index 090a14434..f2a30e065 100644
 --- a/utilities/ovs-lib.in
 +++ b/utilities/ovs-lib.in
-@@ -157,7 +157,10 @@ install_dir () {
+@@ -159,7 +159,10 @@ install_dir () {
      [ "${OVS_USER##*:}" != "" ] && INSTALL_GROUP="${OVS_USER##*:}"
  
      if test ! -d "$DIR"; then
diff --git a/net/openvswitch/patches/0105-build-disable-building-tests.patch b/net/openvswitch/patches/0105-build-disable-building-tests.patch
new file mode 100644 (file)
index 0000000..424b85a
--- /dev/null
@@ -0,0 +1,22 @@
+From d0cad5ac122aca722dc2013c1f53fda44c477cf2 Mon Sep 17 00:00:00 2001
+From: Yousong Zhou <zhouyousong@yunionyun.com>
+Date: Tue, 21 Aug 2018 13:02:21 +0000
+Subject: [PATCH 105/107] build: disable building tests
+
+Signed-off-by: Yousong Zhou <zhouyousong@yunionyun.com>
+---
+ Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index cd90cc176..2e9e50f3a 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -477,7 +477,6 @@ include m4/automake.mk
+ include lib/automake.mk
+ include ofproto/automake.mk
+ include utilities/automake.mk
+-include tests/automake.mk
+ include include/automake.mk
+ include third-party/automake.mk
+ include debian/automake.mk
diff --git a/net/openvswitch/patches/0105-removed-calls-to-API-deprecated-in-openssl-1.1.patch b/net/openvswitch/patches/0105-removed-calls-to-API-deprecated-in-openssl-1.1.patch
deleted file mode 100644 (file)
index 7125eba..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-From bca4ff53aef16d38aeb1569edaaca6ac4feac6e8 Mon Sep 17 00:00:00 2001
-From: Eneas U de Queiroz <cote2004-github@yahoo.com>
-Date: Tue, 5 Jun 2018 10:36:51 -0300
-Subject: [PATCH] Removed calls to AP deprecated in openssl 1.1
-
-In openssl 1.1, there is no need to initialize the library.  It is
-automatically done when first used.  This allows to compile openvswitch
-with openssl 1.1.0 with deprecated API disabled.
-
-Signed-off-by: Eneas U de Queiroz <cote2004-github@yahoo.com>
-Signed-off-by: Ben Pfaff <blp@ovn.org>
----
- lib/stream-ssl.c | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/lib/stream-ssl.c b/lib/stream-ssl.c
-index ebb6f3a6c8..c7443470f5 100644
---- a/lib/stream-ssl.c
-+++ b/lib/stream-ssl.c
-@@ -947,12 +947,14 @@ do_ssl_init(void)
- {
-     SSL_METHOD *method;
-+#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined (LIBRESSL_VERSION_NUMBER)
- #ifdef _WIN32
-     /* The following call is needed if we "#include <openssl/applink.c>". */
-     CRYPTO_malloc_init();
- #endif
-     SSL_library_init();
-     SSL_load_error_strings();
-+#endif
-     if (!RAND_status()) {
-         /* We occasionally see OpenSSL fail to seed its random number generator
diff --git a/net/openvswitch/patches/0106-include-pre-generated-dhparams-c.patch b/net/openvswitch/patches/0106-include-pre-generated-dhparams-c.patch
deleted file mode 100644 (file)
index 9a121ef..0000000
+++ /dev/null
@@ -1,305 +0,0 @@
-From a513cb5fed8c4f63d60b6da12ae9f63a258a9e44 Mon Sep 17 00:00:00 2001
-From: Eneas U de Queiroz <cote2004-github@yahoo.com>
-Date: Wed, 6 Jun 2018 08:20:35 -0300
-Subject: [PATCH] dhparams: Add pregenerated .c file to the repository.
-
-The version of dhparams.c generated by any given version of OpenSSL or
-LibreSSL might work only with that version of the library.  This can be
-inconvenient for cross-compiling if the "openssl" program on the build
-machine has a different version from the library on the host where OVS will
-run, since it could generate code that won't compile.
-
-This commit fixes the problem by generating dhparams.c that works on the
-currently important versions of OpenSSL and LibreSSL.
-
-Submitted-at: https://github.com/openvswitch/ovs/pull/235
-Signed-off-by: Eneas U de Queiroz <cote2004-github@yahoo.com>
-Signed-off-by: Ben Pfaff <blp@ovn.org>
----
- build-aux/automake.mk         |   1 +
- build-aux/generate-dhparams-c |  31 +++++++
- lib/automake.mk               |  17 ++--
- lib/dhparams.c                | 192 ++++++++++++++++++++++++++++++++++++++++++
- 5 files changed, 233 insertions(+), 9 deletions(-)
- create mode 100755 build-aux/generate-dhparams-c
- create mode 100644 lib/dhparams.c
-
-diff --git a/build-aux/automake.mk b/build-aux/automake.mk
-index a1f2f856f..3a3b31ce1 100644
---- a/build-aux/automake.mk
-+++ b/build-aux/automake.mk
-@@ -4,6 +4,7 @@ EXTRA_DIST += \
-       build-aux/cksum-schema-check \
-       build-aux/dist-docs \
-       build-aux/dpdkstrip.py \
-+      build-aux/generate-dhparams-c \
-       build-aux/sodepends.py \
-       build-aux/soexpand.py \
-       build-aux/text2c \
-diff --git a/build-aux/generate-dhparams-c b/build-aux/generate-dhparams-c
-new file mode 100755
-index 000000000..a75e1d5a7
---- /dev/null
-+++ b/build-aux/generate-dhparams-c
-@@ -0,0 +1,31 @@
-+#! /bin/sh -e
-+
-+cat <<'EOF'
-+/* Generated automatically; do not modify!     -*- buffer-read-only: t -*-
-+ *
-+ * If you do need to regenerate this file, run "make generate-dhparams-c". */
-+
-+#include <config.h>
-+#include "lib/dhparams.h"
-+#include "openvswitch/util.h"
-+
-+static int
-+my_DH_set0_pqg(DH *dh, BIGNUM *p, const BIGNUM **q OVS_UNUSED, BIGNUM *g)
-+{
-+    ovs_assert(q == NULL);
-+#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined (LIBRESSL_VERSION_NUMBER)
-+    dh->p = p;
-+    dh->g = g;
-+    return 1;
-+#else
-+    return DH_set0_pqg(dh, p, NULL, g);
-+#endif
-+}
-+EOF
-+(openssl dhparam -C -in lib/dh1024.pem -noout &&
-+openssl dhparam -C -in lib/dh2048.pem -noout &&
-+openssl dhparam -C -in lib/dh4096.pem -noout) | sed '
-+    s/\(get_dh[0-9]*\)()/\1(void)/
-+    s/\(DH_set0_pqg\)/my_\1/
-+    s/[       ]*$//
-+'
-diff --git a/lib/automake.mk b/lib/automake.mk
-index fb781e847..3bec3fd56 100644
---- a/lib/automake.mk
-+++ b/lib/automake.mk
-@@ -450,15 +450,16 @@ lib_libopenvswitch_la_SOURCES += \
-       lib/route-table-bsd.c
- endif
-+.PHONY: generate-dhparams-c
- if HAVE_OPENSSL
--lib_libopenvswitch_la_SOURCES += lib/stream-ssl.c
--nodist_lib_libopenvswitch_la_SOURCES += lib/dhparams.c
--lib/dhparams.c: lib/dh1024.pem lib/dh2048.pem lib/dh4096.pem
--      $(AM_V_GEN)(echo '#include "lib/dhparams.h"' &&                 \
--       openssl dhparam -C -in $(srcdir)/lib/dh1024.pem -noout &&      \
--       openssl dhparam -C -in $(srcdir)/lib/dh2048.pem -noout &&      \
--       openssl dhparam -C -in $(srcdir)/lib/dh4096.pem -noout)        \
--      | sed 's/\(get_dh[0-9]*\)()/\1(void)/' > lib/dhparams.c.tmp &&  \
-+lib_libopenvswitch_la_SOURCES += lib/stream-ssl.c lib/dhparams.c
-+
-+# Manually regenerates lib/dhparams.c.  Not normally necessary since
-+# lib/dhparams.c is part of the repository and doesn't normally need
-+# updates.
-+generate-dhparams-c:
-+      $(AM_V_GEN)cd $(srcdir) && \
-+      build-aux/generate-dhparams-c > lib/dhparams.c.tmp && \
-       mv lib/dhparams.c.tmp lib/dhparams.c
- else
- lib_libopenvswitch_la_SOURCES += lib/stream-nossl.c
-diff --git a/lib/dhparams.c b/lib/dhparams.c
-new file mode 100644
-index 000000000..c9c338bf1
---- /dev/null
-+++ b/lib/dhparams.c
-@@ -0,0 +1,192 @@
-+/* Generated automatically; do not modify!     -*- buffer-read-only: t -*-
-+ *
-+ * If you do need to regenerate this file, run "make generate-dhparams-c". */
-+
-+#include <config.h>
-+#include "lib/dhparams.h"
-+#include "openvswitch/util.h"
-+
-+static int
-+my_DH_set0_pqg(DH *dh, BIGNUM *p, const BIGNUM **q OVS_UNUSED, BIGNUM *g)
-+{
-+    ovs_assert(q == NULL);
-+#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined (LIBRESSL_VERSION_NUMBER)
-+    dh->p = p;
-+    dh->g = g;
-+    return 1;
-+#else
-+    return DH_set0_pqg(dh, p, NULL, g);
-+#endif
-+}
-+#ifndef HEADER_DH_H
-+# include <openssl/dh.h>
-+#endif
-+
-+DH *get_dh1024(void)
-+{
-+    static unsigned char dhp_1024[] = {
-+      0xF4, 0x88, 0xFD, 0x58, 0x4E, 0x49, 0xDB, 0xCD, 0x20, 0xB4,
-+      0x9D, 0xE4, 0x91, 0x07, 0x36, 0x6B, 0x33, 0x6C, 0x38, 0x0D,
-+      0x45, 0x1D, 0x0F, 0x7C, 0x88, 0xB3, 0x1C, 0x7C, 0x5B, 0x2D,
-+      0x8E, 0xF6, 0xF3, 0xC9, 0x23, 0xC0, 0x43, 0xF0, 0xA5, 0x5B,
-+      0x18, 0x8D, 0x8E, 0xBB, 0x55, 0x8C, 0xB8, 0x5D, 0x38, 0xD3,
-+      0x34, 0xFD, 0x7C, 0x17, 0x57, 0x43, 0xA3, 0x1D, 0x18, 0x6C,
-+      0xDE, 0x33, 0x21, 0x2C, 0xB5, 0x2A, 0xFF, 0x3C, 0xE1, 0xB1,
-+      0x29, 0x40, 0x18, 0x11, 0x8D, 0x7C, 0x84, 0xA7, 0x0A, 0x72,
-+      0xD6, 0x86, 0xC4, 0x03, 0x19, 0xC8, 0x07, 0x29, 0x7A, 0xCA,
-+      0x95, 0x0C, 0xD9, 0x96, 0x9F, 0xAB, 0xD0, 0x0A, 0x50, 0x9B,
-+      0x02, 0x46, 0xD3, 0x08, 0x3D, 0x66, 0xA4, 0x5D, 0x41, 0x9F,
-+      0x9C, 0x7C, 0xBD, 0x89, 0x4B, 0x22, 0x19, 0x26, 0xBA, 0xAB,
-+      0xA2, 0x5E, 0xC3, 0x55, 0xE9, 0x2F, 0x78, 0xC7
-+    };
-+    static unsigned char dhg_1024[] = {
-+      0x02
-+    };
-+    DH *dh = DH_new();
-+    BIGNUM *dhp_bn, *dhg_bn;
-+
-+    if (dh == NULL)
-+        return NULL;
-+    dhp_bn = BN_bin2bn(dhp_1024, sizeof (dhp_1024), NULL);
-+    dhg_bn = BN_bin2bn(dhg_1024, sizeof (dhg_1024), NULL);
-+    if (dhp_bn == NULL || dhg_bn == NULL
-+            || !my_DH_set0_pqg(dh, dhp_bn, NULL, dhg_bn)) {
-+        DH_free(dh);
-+        BN_free(dhp_bn);
-+        BN_free(dhg_bn);
-+        return NULL;
-+    }
-+    return dh;
-+}
-+#ifndef HEADER_DH_H
-+# include <openssl/dh.h>
-+#endif
-+
-+DH *get_dh2048(void)
-+{
-+    static unsigned char dhp_2048[] = {
-+      0xF6, 0x42, 0x57, 0xB7, 0x08, 0x7F, 0x08, 0x17, 0x72, 0xA2,
-+      0xBA, 0xD6, 0xA9, 0x42, 0xF3, 0x05, 0xE8, 0xF9, 0x53, 0x11,
-+      0x39, 0x4F, 0xB6, 0xF1, 0x6E, 0xB9, 0x4B, 0x38, 0x20, 0xDA,
-+      0x01, 0xA7, 0x56, 0xA3, 0x14, 0xE9, 0x8F, 0x40, 0x55, 0xF3,
-+      0xD0, 0x07, 0xC6, 0xCB, 0x43, 0xA9, 0x94, 0xAD, 0xF7, 0x4C,
-+      0x64, 0x86, 0x49, 0xF8, 0x0C, 0x83, 0xBD, 0x65, 0xE9, 0x17,
-+      0xD4, 0xA1, 0xD3, 0x50, 0xF8, 0xF5, 0x59, 0x5F, 0xDC, 0x76,
-+      0x52, 0x4F, 0x3D, 0x3D, 0x8D, 0xDB, 0xCE, 0x99, 0xE1, 0x57,
-+      0x92, 0x59, 0xCD, 0xFD, 0xB8, 0xAE, 0x74, 0x4F, 0xC5, 0xFC,
-+      0x76, 0xBC, 0x83, 0xC5, 0x47, 0x30, 0x61, 0xCE, 0x7C, 0xC9,
-+      0x66, 0xFF, 0x15, 0xF9, 0xBB, 0xFD, 0x91, 0x5E, 0xC7, 0x01,
-+      0xAA, 0xD3, 0x5B, 0x9E, 0x8D, 0xA0, 0xA5, 0x72, 0x3A, 0xD4,
-+      0x1A, 0xF0, 0xBF, 0x46, 0x00, 0x58, 0x2B, 0xE5, 0xF4, 0x88,
-+      0xFD, 0x58, 0x4E, 0x49, 0xDB, 0xCD, 0x20, 0xB4, 0x9D, 0xE4,
-+      0x91, 0x07, 0x36, 0x6B, 0x33, 0x6C, 0x38, 0x0D, 0x45, 0x1D,
-+      0x0F, 0x7C, 0x88, 0xB3, 0x1C, 0x7C, 0x5B, 0x2D, 0x8E, 0xF6,
-+      0xF3, 0xC9, 0x23, 0xC0, 0x43, 0xF0, 0xA5, 0x5B, 0x18, 0x8D,
-+      0x8E, 0xBB, 0x55, 0x8C, 0xB8, 0x5D, 0x38, 0xD3, 0x34, 0xFD,
-+      0x7C, 0x17, 0x57, 0x43, 0xA3, 0x1D, 0x18, 0x6C, 0xDE, 0x33,
-+      0x21, 0x2C, 0xB5, 0x2A, 0xFF, 0x3C, 0xE1, 0xB1, 0x29, 0x40,
-+      0x18, 0x11, 0x8D, 0x7C, 0x84, 0xA7, 0x0A, 0x72, 0xD6, 0x86,
-+      0xC4, 0x03, 0x19, 0xC8, 0x07, 0x29, 0x7A, 0xCA, 0x95, 0x0C,
-+      0xD9, 0x96, 0x9F, 0xAB, 0xD0, 0x0A, 0x50, 0x9B, 0x02, 0x46,
-+      0xD3, 0x08, 0x3D, 0x66, 0xA4, 0x5D, 0x41, 0x9F, 0x9C, 0x7C,
-+      0xBD, 0x89, 0x4B, 0x22, 0x19, 0x26, 0xBA, 0xAB, 0xA2, 0x5E,
-+      0xC3, 0x55, 0xE9, 0x32, 0x0B, 0x3B
-+    };
-+    static unsigned char dhg_2048[] = {
-+      0x02
-+    };
-+    DH *dh = DH_new();
-+    BIGNUM *dhp_bn, *dhg_bn;
-+
-+    if (dh == NULL)
-+        return NULL;
-+    dhp_bn = BN_bin2bn(dhp_2048, sizeof (dhp_2048), NULL);
-+    dhg_bn = BN_bin2bn(dhg_2048, sizeof (dhg_2048), NULL);
-+    if (dhp_bn == NULL || dhg_bn == NULL
-+            || !my_DH_set0_pqg(dh, dhp_bn, NULL, dhg_bn)) {
-+        DH_free(dh);
-+        BN_free(dhp_bn);
-+        BN_free(dhg_bn);
-+        return NULL;
-+    }
-+    return dh;
-+}
-+#ifndef HEADER_DH_H
-+# include <openssl/dh.h>
-+#endif
-+
-+DH *get_dh4096(void)
-+{
-+    static unsigned char dhp_4096[] = {
-+      0xFA, 0x14, 0x72, 0x52, 0xC1, 0x4D, 0xE1, 0x5A, 0x49, 0xD4,
-+      0xEF, 0x09, 0x2D, 0xC0, 0xA8, 0xFD, 0x55, 0xAB, 0xD7, 0xD9,
-+      0x37, 0x04, 0x28, 0x09, 0xE2, 0xE9, 0x3E, 0x77, 0xE2, 0xA1,
-+      0x7A, 0x18, 0xDD, 0x46, 0xA3, 0x43, 0x37, 0x23, 0x90, 0x97,
-+      0xF3, 0x0E, 0xC9, 0x03, 0x50, 0x7D, 0x65, 0xCF, 0x78, 0x62,
-+      0xA6, 0x3A, 0x62, 0x22, 0x83, 0xA1, 0x2F, 0xFE, 0x79, 0xBA,
-+      0x35, 0xFF, 0x59, 0xD8, 0x1D, 0x61, 0xDD, 0x1E, 0x21, 0x13,
-+      0x17, 0xFE, 0xCD, 0x38, 0x87, 0x9E, 0xF5, 0x4F, 0x79, 0x10,
-+      0x61, 0x8D, 0xD4, 0x22, 0xF3, 0x5A, 0xED, 0x5D, 0xEA, 0x21,
-+      0xE9, 0x33, 0x6B, 0x48, 0x12, 0x0A, 0x20, 0x77, 0xD4, 0x25,
-+      0x60, 0x61, 0xDE, 0xF6, 0xB4, 0x4F, 0x1C, 0x63, 0x40, 0x8B,
-+      0x3A, 0x21, 0x93, 0x8B, 0x79, 0x53, 0x51, 0x2C, 0xCA, 0xB3,
-+      0x7B, 0x29, 0x56, 0xA8, 0xC7, 0xF8, 0xF4, 0x7B, 0x08, 0x5E,
-+      0xA6, 0xDC, 0xA2, 0x45, 0x12, 0x56, 0xDD, 0x41, 0x92, 0xF2,
-+      0xDD, 0x5B, 0x8F, 0x23, 0xF0, 0xF3, 0xEF, 0xE4, 0x3B, 0x0A,
-+      0x44, 0xDD, 0xED, 0x96, 0x84, 0xF1, 0xA8, 0x32, 0x46, 0xA3,
-+      0xDB, 0x4A, 0xBE, 0x3D, 0x45, 0xBA, 0x4E, 0xF8, 0x03, 0xE5,
-+      0xDD, 0x6B, 0x59, 0x0D, 0x84, 0x1E, 0xCA, 0x16, 0x5A, 0x8C,
-+      0xC8, 0xDF, 0x7C, 0x54, 0x44, 0xC4, 0x27, 0xA7, 0x3B, 0x2A,
-+      0x97, 0xCE, 0xA3, 0x7D, 0x26, 0x9C, 0xAD, 0xF4, 0xC2, 0xAC,
-+      0x37, 0x4B, 0xC3, 0xAD, 0x68, 0x84, 0x7F, 0x99, 0xA6, 0x17,
-+      0xEF, 0x6B, 0x46, 0x3A, 0x7A, 0x36, 0x7A, 0x11, 0x43, 0x92,
-+      0xAD, 0xE9, 0x9C, 0xFB, 0x44, 0x6C, 0x3D, 0x82, 0x49, 0xCC,
-+      0x5C, 0x6A, 0x52, 0x42, 0xF8, 0x42, 0xFB, 0x44, 0xF9, 0x39,
-+      0x73, 0xFB, 0x60, 0x79, 0x3B, 0xC2, 0x9E, 0x0B, 0xDC, 0xD4,
-+      0xA6, 0x67, 0xF7, 0x66, 0x3F, 0xFC, 0x42, 0x3B, 0x1B, 0xDB,
-+      0x4F, 0x66, 0xDC, 0xA5, 0x8F, 0x66, 0xF9, 0xEA, 0xC1, 0xED,
-+      0x31, 0xFB, 0x48, 0xA1, 0x82, 0x7D, 0xF8, 0xE0, 0xCC, 0xB1,
-+      0xC7, 0x03, 0xE4, 0xF8, 0xB3, 0xFE, 0xB7, 0xA3, 0x13, 0x73,
-+      0xA6, 0x7B, 0xC1, 0x0E, 0x39, 0xC7, 0x94, 0x48, 0x26, 0x00,
-+      0x85, 0x79, 0xFC, 0x6F, 0x7A, 0xAF, 0xC5, 0x52, 0x35, 0x75,
-+      0xD7, 0x75, 0xA4, 0x40, 0xFA, 0x14, 0x74, 0x61, 0x16, 0xF2,
-+      0xEB, 0x67, 0x11, 0x6F, 0x04, 0x43, 0x3D, 0x11, 0x14, 0x4C,
-+      0xA7, 0x94, 0x2A, 0x39, 0xA1, 0xC9, 0x90, 0xCF, 0x83, 0xC6,
-+      0xFF, 0x02, 0x8F, 0xA3, 0x2A, 0xAC, 0x26, 0xDF, 0x0B, 0x8B,
-+      0xBE, 0x64, 0x4A, 0xF1, 0xA1, 0xDC, 0xEE, 0xBA, 0xC8, 0x03,
-+      0x82, 0xF6, 0x62, 0x2C, 0x5D, 0xB6, 0xBB, 0x13, 0x19, 0x6E,
-+      0x86, 0xC5, 0x5B, 0x2B, 0x5E, 0x3A, 0xF3, 0xB3, 0x28, 0x6B,
-+      0x70, 0x71, 0x3A, 0x8E, 0xFF, 0x5C, 0x15, 0xE6, 0x02, 0xA4,
-+      0xCE, 0xED, 0x59, 0x56, 0xCC, 0x15, 0x51, 0x07, 0x79, 0x1A,
-+      0x0F, 0x25, 0x26, 0x27, 0x30, 0xA9, 0x15, 0xB2, 0xC8, 0xD4,
-+      0x5C, 0xCC, 0x30, 0xE8, 0x1B, 0xD8, 0xD5, 0x0F, 0x19, 0xA8,
-+      0x80, 0xA4, 0xC7, 0x01, 0xAA, 0x8B, 0xBA, 0x53, 0xBB, 0x47,
-+      0xC2, 0x1F, 0x6B, 0x54, 0xB0, 0x17, 0x60, 0xED, 0x79, 0x21,
-+      0x95, 0xB6, 0x05, 0x84, 0x37, 0xC8, 0x03, 0xA4, 0xDD, 0xD1,
-+      0x06, 0x69, 0x8F, 0x4C, 0x39, 0xE0, 0xC8, 0x5D, 0x83, 0x1D,
-+      0xBE, 0x6A, 0x9A, 0x99, 0xF3, 0x9F, 0x0B, 0x45, 0x29, 0xD4,
-+      0xCB, 0x29, 0x66, 0xEE, 0x1E, 0x7E, 0x3D, 0xD7, 0x13, 0x4E,
-+      0xDB, 0x90, 0x90, 0x58, 0xCB, 0x5E, 0x9B, 0xCD, 0x2E, 0x2B,
-+      0x0F, 0xA9, 0x4E, 0x78, 0xAC, 0x05, 0x11, 0x7F, 0xE3, 0x9E,
-+      0x27, 0xD4, 0x99, 0xE1, 0xB9, 0xBD, 0x78, 0xE1, 0x84, 0x41,
-+      0xA0, 0xDF
-+    };
-+    static unsigned char dhg_4096[] = {
-+      0x02
-+    };
-+    DH *dh = DH_new();
-+    BIGNUM *dhp_bn, *dhg_bn;
-+
-+    if (dh == NULL)
-+        return NULL;
-+    dhp_bn = BN_bin2bn(dhp_4096, sizeof (dhp_4096), NULL);
-+    dhg_bn = BN_bin2bn(dhg_4096, sizeof (dhg_4096), NULL);
-+    if (dhp_bn == NULL || dhg_bn == NULL
-+            || !my_DH_set0_pqg(dh, dhp_bn, NULL, dhg_bn)) {
-+        DH_free(dh);
-+        BN_free(dhp_bn);
-+        BN_free(dhg_bn);
-+        return NULL;
-+    }
-+    return dh;
-+}
--- 
-2.16.4
-
diff --git a/net/openvswitch/patches/0106-ovs-save-compatible-with-busybox-ip-command.patch b/net/openvswitch/patches/0106-ovs-save-compatible-with-busybox-ip-command.patch
new file mode 100644 (file)
index 0000000..412cad3
--- /dev/null
@@ -0,0 +1,26 @@
+From 2a59f2b60e8a22dc93d48c511b5c4255b429ff66 Mon Sep 17 00:00:00 2001
+From: Yousong Zhou <zhouyousong@yunionyun.com>
+Date: Wed, 5 Sep 2018 12:32:54 +0000
+Subject: [PATCH 106/107] ovs-save: compatible with busybox ip command
+
+Busybox ip command will have exit code 1 for `ip -V` or `ip help` etc.,
+use `ip rule list` to cover both iproute2 and busybox ip command
+
+Signed-off-by: Yousong Zhou <zhouyousong@yunionyun.com>
+---
+ utilities/ovs-save | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/utilities/ovs-save b/utilities/ovs-save
+index ea8fb6a45..72d460df4 100755
+--- a/utilities/ovs-save
++++ b/utilities/ovs-save
+@@ -38,7 +38,7 @@ EOF
+ }
+ save_interfaces () {
+-    if (ip -V) > /dev/null 2>&1; then :; else
++    if (ip rule list) > /dev/null 2>&1; then :; else
+         echo "$0: ip not found in $PATH" >&2
+         exit 1
+     fi
diff --git a/net/openvswitch/patches/0107-datapath-use-KARCH-when-building-linux-datapath-modu.patch b/net/openvswitch/patches/0107-datapath-use-KARCH-when-building-linux-datapath-modu.patch
new file mode 100644 (file)
index 0000000..ddfc397
--- /dev/null
@@ -0,0 +1,28 @@
+From 1e859f407b94a0f549fc41fceec11ca12653878b Mon Sep 17 00:00:00 2001
+From: Yousong Zhou <zhouyousong@yunionyun.com>
+Date: Thu, 6 Sep 2018 11:48:20 +0000
+Subject: [PATCH 107/107] datapath: use KARCH when building linux datapath
+ modules
+
+Signed-off-by: Yousong Zhou <zhouyousong@yunionyun.com>
+---
+ datapath/linux/Makefile.main.in | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/datapath/linux/Makefile.main.in b/datapath/linux/Makefile.main.in
+index 7d18253be..039485d16 100644
+--- a/datapath/linux/Makefile.main.in
++++ b/datapath/linux/Makefile.main.in
+@@ -68,10 +68,10 @@ ifeq (,$(wildcard $(CONFIG_FILE)))
+ endif
+ default:
+-      $(MAKE) -C $(KSRC) M=$(builddir) modules
++      $(MAKE) -C $(KSRC) $(if @KARCH@,ARCH=@KARCH@) M=$(builddir) modules
+ modules_install:
+-      $(MAKE) -C $(KSRC) M=$(builddir) modules_install
++      $(MAKE) -C $(KSRC) $(if @KARCH@,ARCH=@KARCH@) M=$(builddir) modules_install
+       depmod `sed -n 's/#define UTS_RELEASE "\([^"]*\)"/\1/p' $(KSRC)/include/generated/utsrelease.h`
+ endif
index 340000067f5a088ed78af8f4a0ac7b6de8f63a12..bfb2eda1a80969bc7fc932e6a1e6d6d3f17d3ef6 100644 (file)
@@ -8,14 +8,14 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=radsecproxy
-PKG_VERSION:=1.7.1
+PKG_VERSION:=1.7.2
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://github.com/radsecproxy/radsecproxy/releases/download/$(PKG_VERSION)/
-PKG_HASH:=49fd644684c6ea502d896d31e29f1acf2ae9b61b02b231a8ffd0cec11857dd07
+PKG_HASH:=2cf23e618ab9275221350acf5a97bce4ff18aee472045f8a3b4c7673491079d2
 
-PKG_LICENSE:=GPL-2.0+
+PKG_LICENSE:=BSD-3-CLAUSE
 PKG_LICENSE_FILES:=LICENSE
 
 PKG_FIXUP:=autoreconf
diff --git a/net/radsecproxy/patches/100-fix-debug-tid.patch b/net/radsecproxy/patches/100-fix-debug-tid.patch
deleted file mode 100644 (file)
index c170e3f..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/debug.c
-+++ b/debug.c
-@@ -153,7 +153,7 @@ void debug_logit(uint8_t level, const ch
-     if (debug_tid) {
-         tidbuf = malloc((3*sizeof(pthread_t)+5)+strlen(format));
--        sprintf(tidbuf, "(%ld) %s", pthread_self(), format);
-+        sprintf(tidbuf, "(%ld) %s", (long int)pthread_self(), format);
-         format = tidbuf;
-     } else
-         tidbuf = NULL;
index 95fd470d0dd39774a8c3dff0585aea78dc29562a..9b32dd63731d7e6cb4e50ffb1a5844f12dbba315 100644 (file)
@@ -8,19 +8,19 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=rsyslog
-PKG_VERSION:=8.18.0
+PKG_VERSION:=8.38.0
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=http://www.rsyslog.com/files/download/rsyslog/
-PKG_HASH:=94346237ecfa22c9f78cebc3f18d59056f5d9846eb906c75beaa7e486f02c695
+PKG_SOURCE_URL:=https://www.rsyslog.com/files/download/rsyslog/
+PKG_HASH:=4d328ed3bcae784e15401c6c20ada2a9be380798ff6bf0da3fe2095915bba22c
 
-PKG_MAINTAINER:=Dov Murik <dmurik@us.ibm.com>
+PKG_MAINTAINER:=
 PKG_LICENSE:=GPL-3.0
 PKG_LICENSE_FILES:=COPYING
 
+PKG_BUILD_PARALLEL:=1
 PKG_INSTALL:=1
-PKG_FIXUP:=autoreconf
 
 include $(INCLUDE_DIR)/package.mk
 
@@ -28,7 +28,7 @@ define Package/rsyslog
   SECTION:=net
   CATEGORY:=Network
   TITLE:=Enhanced system logging and kernel message trapping daemons
-  URL:=http://www.rsyslog.com/
+  URL:=https://www.rsyslog.com/
   DEPENDS:=+libestr +libfastjson +libuuid +zlib +USE_UCLIBC:libpthread +USE_UCLIBC:librt
 endef
 
@@ -38,10 +38,9 @@ endef
 
 CONFIGURE_ARGS+= \
        --disable-libgcrypt \
-       --disable-liblogging-stdlog
-
-TARGET_CFLAGS += \
-       -std=c99
+       --disable-fmhttp \
+       --disable-default-tests \
+       --disable-libsystemd
 
 define Package/rsyslog/install
        $(INSTALL_DIR) $(1)/usr/sbin
diff --git a/net/safe-search/Makefile b/net/safe-search/Makefile
new file mode 100644 (file)
index 0000000..4676c21
--- /dev/null
@@ -0,0 +1,73 @@
+#
+# Copyright (c) 2018 Gregory L. Dietsche <Gregory.Dietsche@cuw.edu>
+# This is free software, licensed under the MIT License
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=safe-search
+PKG_VERSION:=1.0.0
+PKG_RELEASE:=1
+PKG_LICENSE:=MIT
+PKG_MAINTAINER:=Gregory L. Dietsche <Gregory.Dietsche@cuw.edu>
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/safe-search
+       SECTION:=net
+       CATEGORY:=Network
+       TITLE:=Safe Search
+       PKGARCH:=all
+endef
+
+define Package/safe-search/description
+This package prevents adult content from appearing in search results by
+configuring dnsmasq to force all devices on your network to use Google and
+Bing's Safe Search IP addresses. This is designed to be approperiate for most
+businesses and families. The default filtering rules do not interfere with
+normal web browsing.
+endef
+
+define Package/safe-search/conffiles
+/etc/config/safe-search
+endef
+
+define Build/Compile
+endef
+
+define Package/safe-search/install
+       $(INSTALL_DIR) $(1)/etc/uci-defaults
+       $(CP) ./files/safe-search.defaults $(1)/etc/uci-defaults/safe-search
+
+       $(INSTALL_DIR) $(1)/etc/config
+       $(INSTALL_CONF) ./files/safe-search.conf $(1)/etc/config/safe-search
+
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(INSTALL_BIN) ./files/safe-search-update $(1)/usr/sbin/safe-search-update
+
+       $(INSTALL_DIR) $(1)/etc/safe-search/enabled
+       $(INSTALL_DIR) $(1)/etc/safe-search/available
+       $(INSTALL_DATA) ./files/hosts/* $(1)/etc/safe-search/available/
+endef
+
+define Package/safe-search/prerm
+#!/bin/sh
+if [ -z "$${IPGK_INSTROOT}" ]; then
+       uci del_list dhcp.@dnsmasq[0].addnhosts=/etc/safe-search/enabled
+       uci commit dhcp
+       /etc/init.d/dnsmasq reload
+fi
+exit 0
+endef
+
+define Package/safe-search/postrm
+#!/bin/sh
+if [ -z "$${IPGK_INSTROOT}" ]; then
+       rm -rf /etc/safe-search/enabled
+       rmdir /etc/safe-search/available
+       rmdir /etc/safe-search/
+fi
+exit 0
+endef
+
+$(eval $(call BuildPackage,safe-search))
diff --git a/net/safe-search/Readme.md b/net/safe-search/Readme.md
new file mode 100644 (file)
index 0000000..b6f0395
--- /dev/null
@@ -0,0 +1,19 @@
+# Package: net/safe-search
+
+This package prevents adult content from appearing in search results by
+configuring dnsmasq to force all devices on your network to use Google and
+Bing's Safe Search IP addresses. This is designed to be approperiate for most
+businesses and families. The default filtering rules do not interfere with
+normal web browsing.
+
+Currently supported:
+- Google Safe Search - enabled by default
+    - https://support.google.com/websearch/answer/186669
+- Bing Safe Search - enabled by default
+    -  https://help.bing.microsoft.com/#apex/18/en-US/10003/0
+- youtube Safe Search
+    - https://support.google.com/a/answer/6214622
+    - https://support.google.com/a/answer/6212415
+    - https://www.youtube.com/check_content_restrictions
+    - Not enabled by default because it is designed for children.
+    - Enable by editing /etc/config/safe-search and then run safe-search-update
diff --git a/net/safe-search/files/hosts/bing.default b/net/safe-search/files/hosts/bing.default
new file mode 100644 (file)
index 0000000..ff80383
--- /dev/null
@@ -0,0 +1,14 @@
+#
+# Copyright (c) 2018 Gregory L. Dietsche <Gregory.Dietsche@cuw.edu>
+# This is free software, licensed under the MIT License
+#
+
+#
+# IMPORTANT: if this file is not working, make sure that dnsmasq is able to READ it!
+#
+
+#204.79.197.220 strict.bing.com
+#::FFFF:CC4F:C5DC strict.bing.com
+
+204.79.197.220 bing.com www.bing.com
+::FFFF:CC4F:C5DC bing.com www.bing.com
diff --git a/net/safe-search/files/hosts/google.default b/net/safe-search/files/hosts/google.default
new file mode 100644 (file)
index 0000000..f8aa8c3
--- /dev/null
@@ -0,0 +1,785 @@
+#
+# Copyright (c) 2018 Gregory L. Dietsche <Gregory.Dietsche@cuw.edu>
+# This is free software, licensed under the MIT License
+#
+# IMPORTANT: if this file is not working, make sure that dnsmasq is able to READ it!
+#
+# Google Safe Search Host List
+# Generated on Wed Oct 10 10:18:34 CDT 2018
+# From: https://www.google.com/supported_domains
+
+#2001:4860:4802:32::78 forcesafesearch.google.com
+#216.239.38.120 forcesafesearch.google.com
+
+2001:4860:4802:32::78 google.com
+2001:4860:4802:32::78 google.ad
+2001:4860:4802:32::78 google.ae
+2001:4860:4802:32::78 google.com.af
+2001:4860:4802:32::78 google.com.ag
+2001:4860:4802:32::78 google.com.ai
+2001:4860:4802:32::78 google.al
+2001:4860:4802:32::78 google.am
+2001:4860:4802:32::78 google.co.ao
+2001:4860:4802:32::78 google.com.ar
+2001:4860:4802:32::78 google.as
+2001:4860:4802:32::78 google.at
+2001:4860:4802:32::78 google.com.au
+2001:4860:4802:32::78 google.az
+2001:4860:4802:32::78 google.ba
+2001:4860:4802:32::78 google.com.bd
+2001:4860:4802:32::78 google.be
+2001:4860:4802:32::78 google.bf
+2001:4860:4802:32::78 google.bg
+2001:4860:4802:32::78 google.com.bh
+2001:4860:4802:32::78 google.bi
+2001:4860:4802:32::78 google.bj
+2001:4860:4802:32::78 google.com.bn
+2001:4860:4802:32::78 google.com.bo
+2001:4860:4802:32::78 google.com.br
+2001:4860:4802:32::78 google.bs
+2001:4860:4802:32::78 google.bt
+2001:4860:4802:32::78 google.co.bw
+2001:4860:4802:32::78 google.by
+2001:4860:4802:32::78 google.com.bz
+2001:4860:4802:32::78 google.ca
+2001:4860:4802:32::78 google.cd
+2001:4860:4802:32::78 google.cf
+2001:4860:4802:32::78 google.cg
+2001:4860:4802:32::78 google.ch
+2001:4860:4802:32::78 google.ci
+2001:4860:4802:32::78 google.co.ck
+2001:4860:4802:32::78 google.cl
+2001:4860:4802:32::78 google.cm
+2001:4860:4802:32::78 google.cn
+2001:4860:4802:32::78 google.com.co
+2001:4860:4802:32::78 google.co.cr
+2001:4860:4802:32::78 google.com.cu
+2001:4860:4802:32::78 google.cv
+2001:4860:4802:32::78 google.com.cy
+2001:4860:4802:32::78 google.cz
+2001:4860:4802:32::78 google.de
+2001:4860:4802:32::78 google.dj
+2001:4860:4802:32::78 google.dk
+2001:4860:4802:32::78 google.dm
+2001:4860:4802:32::78 google.com.do
+2001:4860:4802:32::78 google.dz
+2001:4860:4802:32::78 google.com.ec
+2001:4860:4802:32::78 google.ee
+2001:4860:4802:32::78 google.com.eg
+2001:4860:4802:32::78 google.es
+2001:4860:4802:32::78 google.com.et
+2001:4860:4802:32::78 google.fi
+2001:4860:4802:32::78 google.com.fj
+2001:4860:4802:32::78 google.fm
+2001:4860:4802:32::78 google.fr
+2001:4860:4802:32::78 google.ga
+2001:4860:4802:32::78 google.ge
+2001:4860:4802:32::78 google.gg
+2001:4860:4802:32::78 google.com.gh
+2001:4860:4802:32::78 google.com.gi
+2001:4860:4802:32::78 google.gl
+2001:4860:4802:32::78 google.gm
+2001:4860:4802:32::78 google.gp
+2001:4860:4802:32::78 google.gr
+2001:4860:4802:32::78 google.com.gt
+2001:4860:4802:32::78 google.gy
+2001:4860:4802:32::78 google.com.hk
+2001:4860:4802:32::78 google.hn
+2001:4860:4802:32::78 google.hr
+2001:4860:4802:32::78 google.ht
+2001:4860:4802:32::78 google.hu
+2001:4860:4802:32::78 google.co.id
+2001:4860:4802:32::78 google.ie
+2001:4860:4802:32::78 google.co.il
+2001:4860:4802:32::78 google.im
+2001:4860:4802:32::78 google.co.in
+2001:4860:4802:32::78 google.iq
+2001:4860:4802:32::78 google.is
+2001:4860:4802:32::78 google.it
+2001:4860:4802:32::78 google.je
+2001:4860:4802:32::78 google.com.jm
+2001:4860:4802:32::78 google.jo
+2001:4860:4802:32::78 google.co.jp
+2001:4860:4802:32::78 google.co.ke
+2001:4860:4802:32::78 google.com.kh
+2001:4860:4802:32::78 google.ki
+2001:4860:4802:32::78 google.kg
+2001:4860:4802:32::78 google.co.kr
+2001:4860:4802:32::78 google.com.kw
+2001:4860:4802:32::78 google.kz
+2001:4860:4802:32::78 google.la
+2001:4860:4802:32::78 google.com.lb
+2001:4860:4802:32::78 google.li
+2001:4860:4802:32::78 google.lk
+2001:4860:4802:32::78 google.co.ls
+2001:4860:4802:32::78 google.lt
+2001:4860:4802:32::78 google.lu
+2001:4860:4802:32::78 google.lv
+2001:4860:4802:32::78 google.com.ly
+2001:4860:4802:32::78 google.co.ma
+2001:4860:4802:32::78 google.md
+2001:4860:4802:32::78 google.me
+2001:4860:4802:32::78 google.mg
+2001:4860:4802:32::78 google.mk
+2001:4860:4802:32::78 google.ml
+2001:4860:4802:32::78 google.com.mm
+2001:4860:4802:32::78 google.mn
+2001:4860:4802:32::78 google.ms
+2001:4860:4802:32::78 google.com.mt
+2001:4860:4802:32::78 google.mu
+2001:4860:4802:32::78 google.mv
+2001:4860:4802:32::78 google.mw
+2001:4860:4802:32::78 google.com.mx
+2001:4860:4802:32::78 google.com.my
+2001:4860:4802:32::78 google.co.mz
+2001:4860:4802:32::78 google.com.na
+2001:4860:4802:32::78 google.com.nf
+2001:4860:4802:32::78 google.com.ng
+2001:4860:4802:32::78 google.com.ni
+2001:4860:4802:32::78 google.ne
+2001:4860:4802:32::78 google.nl
+2001:4860:4802:32::78 google.no
+2001:4860:4802:32::78 google.com.np
+2001:4860:4802:32::78 google.nr
+2001:4860:4802:32::78 google.nu
+2001:4860:4802:32::78 google.co.nz
+2001:4860:4802:32::78 google.com.om
+2001:4860:4802:32::78 google.com.pa
+2001:4860:4802:32::78 google.com.pe
+2001:4860:4802:32::78 google.com.pg
+2001:4860:4802:32::78 google.com.ph
+2001:4860:4802:32::78 google.com.pk
+2001:4860:4802:32::78 google.pl
+2001:4860:4802:32::78 google.pn
+2001:4860:4802:32::78 google.com.pr
+2001:4860:4802:32::78 google.ps
+2001:4860:4802:32::78 google.pt
+2001:4860:4802:32::78 google.com.py
+2001:4860:4802:32::78 google.com.qa
+2001:4860:4802:32::78 google.ro
+2001:4860:4802:32::78 google.ru
+2001:4860:4802:32::78 google.rw
+2001:4860:4802:32::78 google.com.sa
+2001:4860:4802:32::78 google.com.sb
+2001:4860:4802:32::78 google.sc
+2001:4860:4802:32::78 google.se
+2001:4860:4802:32::78 google.com.sg
+2001:4860:4802:32::78 google.sh
+2001:4860:4802:32::78 google.si
+2001:4860:4802:32::78 google.sk
+2001:4860:4802:32::78 google.com.sl
+2001:4860:4802:32::78 google.sn
+2001:4860:4802:32::78 google.so
+2001:4860:4802:32::78 google.sm
+2001:4860:4802:32::78 google.sr
+2001:4860:4802:32::78 google.st
+2001:4860:4802:32::78 google.com.sv
+2001:4860:4802:32::78 google.td
+2001:4860:4802:32::78 google.tg
+2001:4860:4802:32::78 google.co.th
+2001:4860:4802:32::78 google.com.tj
+2001:4860:4802:32::78 google.tk
+2001:4860:4802:32::78 google.tl
+2001:4860:4802:32::78 google.tm
+2001:4860:4802:32::78 google.tn
+2001:4860:4802:32::78 google.to
+2001:4860:4802:32::78 google.com.tr
+2001:4860:4802:32::78 google.tt
+2001:4860:4802:32::78 google.com.tw
+2001:4860:4802:32::78 google.co.tz
+2001:4860:4802:32::78 google.com.ua
+2001:4860:4802:32::78 google.co.ug
+2001:4860:4802:32::78 google.co.uk
+2001:4860:4802:32::78 google.com.uy
+2001:4860:4802:32::78 google.co.uz
+2001:4860:4802:32::78 google.com.vc
+2001:4860:4802:32::78 google.co.ve
+2001:4860:4802:32::78 google.vg
+2001:4860:4802:32::78 google.co.vi
+2001:4860:4802:32::78 google.com.vn
+2001:4860:4802:32::78 google.vu
+2001:4860:4802:32::78 google.ws
+2001:4860:4802:32::78 google.rs
+2001:4860:4802:32::78 google.co.za
+2001:4860:4802:32::78 google.co.zm
+2001:4860:4802:32::78 google.co.zw
+2001:4860:4802:32::78 google.cat
+2001:4860:4802:32::78 www.google.com
+2001:4860:4802:32::78 www.google.ad
+2001:4860:4802:32::78 www.google.ae
+2001:4860:4802:32::78 www.google.com.af
+2001:4860:4802:32::78 www.google.com.ag
+2001:4860:4802:32::78 www.google.com.ai
+2001:4860:4802:32::78 www.google.al
+2001:4860:4802:32::78 www.google.am
+2001:4860:4802:32::78 www.google.co.ao
+2001:4860:4802:32::78 www.google.com.ar
+2001:4860:4802:32::78 www.google.as
+2001:4860:4802:32::78 www.google.at
+2001:4860:4802:32::78 www.google.com.au
+2001:4860:4802:32::78 www.google.az
+2001:4860:4802:32::78 www.google.ba
+2001:4860:4802:32::78 www.google.com.bd
+2001:4860:4802:32::78 www.google.be
+2001:4860:4802:32::78 www.google.bf
+2001:4860:4802:32::78 www.google.bg
+2001:4860:4802:32::78 www.google.com.bh
+2001:4860:4802:32::78 www.google.bi
+2001:4860:4802:32::78 www.google.bj
+2001:4860:4802:32::78 www.google.com.bn
+2001:4860:4802:32::78 www.google.com.bo
+2001:4860:4802:32::78 www.google.com.br
+2001:4860:4802:32::78 www.google.bs
+2001:4860:4802:32::78 www.google.bt
+2001:4860:4802:32::78 www.google.co.bw
+2001:4860:4802:32::78 www.google.by
+2001:4860:4802:32::78 www.google.com.bz
+2001:4860:4802:32::78 www.google.ca
+2001:4860:4802:32::78 www.google.cd
+2001:4860:4802:32::78 www.google.cf
+2001:4860:4802:32::78 www.google.cg
+2001:4860:4802:32::78 www.google.ch
+2001:4860:4802:32::78 www.google.ci
+2001:4860:4802:32::78 www.google.co.ck
+2001:4860:4802:32::78 www.google.cl
+2001:4860:4802:32::78 www.google.cm
+2001:4860:4802:32::78 www.google.cn
+2001:4860:4802:32::78 www.google.com.co
+2001:4860:4802:32::78 www.google.co.cr
+2001:4860:4802:32::78 www.google.com.cu
+2001:4860:4802:32::78 www.google.cv
+2001:4860:4802:32::78 www.google.com.cy
+2001:4860:4802:32::78 www.google.cz
+2001:4860:4802:32::78 www.google.de
+2001:4860:4802:32::78 www.google.dj
+2001:4860:4802:32::78 www.google.dk
+2001:4860:4802:32::78 www.google.dm
+2001:4860:4802:32::78 www.google.com.do
+2001:4860:4802:32::78 www.google.dz
+2001:4860:4802:32::78 www.google.com.ec
+2001:4860:4802:32::78 www.google.ee
+2001:4860:4802:32::78 www.google.com.eg
+2001:4860:4802:32::78 www.google.es
+2001:4860:4802:32::78 www.google.com.et
+2001:4860:4802:32::78 www.google.fi
+2001:4860:4802:32::78 www.google.com.fj
+2001:4860:4802:32::78 www.google.fm
+2001:4860:4802:32::78 www.google.fr
+2001:4860:4802:32::78 www.google.ga
+2001:4860:4802:32::78 www.google.ge
+2001:4860:4802:32::78 www.google.gg
+2001:4860:4802:32::78 www.google.com.gh
+2001:4860:4802:32::78 www.google.com.gi
+2001:4860:4802:32::78 www.google.gl
+2001:4860:4802:32::78 www.google.gm
+2001:4860:4802:32::78 www.google.gp
+2001:4860:4802:32::78 www.google.gr
+2001:4860:4802:32::78 www.google.com.gt
+2001:4860:4802:32::78 www.google.gy
+2001:4860:4802:32::78 www.google.com.hk
+2001:4860:4802:32::78 www.google.hn
+2001:4860:4802:32::78 www.google.hr
+2001:4860:4802:32::78 www.google.ht
+2001:4860:4802:32::78 www.google.hu
+2001:4860:4802:32::78 www.google.co.id
+2001:4860:4802:32::78 www.google.ie
+2001:4860:4802:32::78 www.google.co.il
+2001:4860:4802:32::78 www.google.im
+2001:4860:4802:32::78 www.google.co.in
+2001:4860:4802:32::78 www.google.iq
+2001:4860:4802:32::78 www.google.is
+2001:4860:4802:32::78 www.google.it
+2001:4860:4802:32::78 www.google.je
+2001:4860:4802:32::78 www.google.com.jm
+2001:4860:4802:32::78 www.google.jo
+2001:4860:4802:32::78 www.google.co.jp
+2001:4860:4802:32::78 www.google.co.ke
+2001:4860:4802:32::78 www.google.com.kh
+2001:4860:4802:32::78 www.google.ki
+2001:4860:4802:32::78 www.google.kg
+2001:4860:4802:32::78 www.google.co.kr
+2001:4860:4802:32::78 www.google.com.kw
+2001:4860:4802:32::78 www.google.kz
+2001:4860:4802:32::78 www.google.la
+2001:4860:4802:32::78 www.google.com.lb
+2001:4860:4802:32::78 www.google.li
+2001:4860:4802:32::78 www.google.lk
+2001:4860:4802:32::78 www.google.co.ls
+2001:4860:4802:32::78 www.google.lt
+2001:4860:4802:32::78 www.google.lu
+2001:4860:4802:32::78 www.google.lv
+2001:4860:4802:32::78 www.google.com.ly
+2001:4860:4802:32::78 www.google.co.ma
+2001:4860:4802:32::78 www.google.md
+2001:4860:4802:32::78 www.google.me
+2001:4860:4802:32::78 www.google.mg
+2001:4860:4802:32::78 www.google.mk
+2001:4860:4802:32::78 www.google.ml
+2001:4860:4802:32::78 www.google.com.mm
+2001:4860:4802:32::78 www.google.mn
+2001:4860:4802:32::78 www.google.ms
+2001:4860:4802:32::78 www.google.com.mt
+2001:4860:4802:32::78 www.google.mu
+2001:4860:4802:32::78 www.google.mv
+2001:4860:4802:32::78 www.google.mw
+2001:4860:4802:32::78 www.google.com.mx
+2001:4860:4802:32::78 www.google.com.my
+2001:4860:4802:32::78 www.google.co.mz
+2001:4860:4802:32::78 www.google.com.na
+2001:4860:4802:32::78 www.google.com.nf
+2001:4860:4802:32::78 www.google.com.ng
+2001:4860:4802:32::78 www.google.com.ni
+2001:4860:4802:32::78 www.google.ne
+2001:4860:4802:32::78 www.google.nl
+2001:4860:4802:32::78 www.google.no
+2001:4860:4802:32::78 www.google.com.np
+2001:4860:4802:32::78 www.google.nr
+2001:4860:4802:32::78 www.google.nu
+2001:4860:4802:32::78 www.google.co.nz
+2001:4860:4802:32::78 www.google.com.om
+2001:4860:4802:32::78 www.google.com.pa
+2001:4860:4802:32::78 www.google.com.pe
+2001:4860:4802:32::78 www.google.com.pg
+2001:4860:4802:32::78 www.google.com.ph
+2001:4860:4802:32::78 www.google.com.pk
+2001:4860:4802:32::78 www.google.pl
+2001:4860:4802:32::78 www.google.pn
+2001:4860:4802:32::78 www.google.com.pr
+2001:4860:4802:32::78 www.google.ps
+2001:4860:4802:32::78 www.google.pt
+2001:4860:4802:32::78 www.google.com.py
+2001:4860:4802:32::78 www.google.com.qa
+2001:4860:4802:32::78 www.google.ro
+2001:4860:4802:32::78 www.google.ru
+2001:4860:4802:32::78 www.google.rw
+2001:4860:4802:32::78 www.google.com.sa
+2001:4860:4802:32::78 www.google.com.sb
+2001:4860:4802:32::78 www.google.sc
+2001:4860:4802:32::78 www.google.se
+2001:4860:4802:32::78 www.google.com.sg
+2001:4860:4802:32::78 www.google.sh
+2001:4860:4802:32::78 www.google.si
+2001:4860:4802:32::78 www.google.sk
+2001:4860:4802:32::78 www.google.com.sl
+2001:4860:4802:32::78 www.google.sn
+2001:4860:4802:32::78 www.google.so
+2001:4860:4802:32::78 www.google.sm
+2001:4860:4802:32::78 www.google.sr
+2001:4860:4802:32::78 www.google.st
+2001:4860:4802:32::78 www.google.com.sv
+2001:4860:4802:32::78 www.google.td
+2001:4860:4802:32::78 www.google.tg
+2001:4860:4802:32::78 www.google.co.th
+2001:4860:4802:32::78 www.google.com.tj
+2001:4860:4802:32::78 www.google.tk
+2001:4860:4802:32::78 www.google.tl
+2001:4860:4802:32::78 www.google.tm
+2001:4860:4802:32::78 www.google.tn
+2001:4860:4802:32::78 www.google.to
+2001:4860:4802:32::78 www.google.com.tr
+2001:4860:4802:32::78 www.google.tt
+2001:4860:4802:32::78 www.google.com.tw
+2001:4860:4802:32::78 www.google.co.tz
+2001:4860:4802:32::78 www.google.com.ua
+2001:4860:4802:32::78 www.google.co.ug
+2001:4860:4802:32::78 www.google.co.uk
+2001:4860:4802:32::78 www.google.com.uy
+2001:4860:4802:32::78 www.google.co.uz
+2001:4860:4802:32::78 www.google.com.vc
+2001:4860:4802:32::78 www.google.co.ve
+2001:4860:4802:32::78 www.google.vg
+2001:4860:4802:32::78 www.google.co.vi
+2001:4860:4802:32::78 www.google.com.vn
+2001:4860:4802:32::78 www.google.vu
+2001:4860:4802:32::78 www.google.ws
+2001:4860:4802:32::78 www.google.rs
+2001:4860:4802:32::78 www.google.co.za
+2001:4860:4802:32::78 www.google.co.zm
+2001:4860:4802:32::78 www.google.co.zw
+2001:4860:4802:32::78 www.google.cat
+216.239.38.120 google.com
+216.239.38.120 google.ad
+216.239.38.120 google.ae
+216.239.38.120 google.com.af
+216.239.38.120 google.com.ag
+216.239.38.120 google.com.ai
+216.239.38.120 google.al
+216.239.38.120 google.am
+216.239.38.120 google.co.ao
+216.239.38.120 google.com.ar
+216.239.38.120 google.as
+216.239.38.120 google.at
+216.239.38.120 google.com.au
+216.239.38.120 google.az
+216.239.38.120 google.ba
+216.239.38.120 google.com.bd
+216.239.38.120 google.be
+216.239.38.120 google.bf
+216.239.38.120 google.bg
+216.239.38.120 google.com.bh
+216.239.38.120 google.bi
+216.239.38.120 google.bj
+216.239.38.120 google.com.bn
+216.239.38.120 google.com.bo
+216.239.38.120 google.com.br
+216.239.38.120 google.bs
+216.239.38.120 google.bt
+216.239.38.120 google.co.bw
+216.239.38.120 google.by
+216.239.38.120 google.com.bz
+216.239.38.120 google.ca
+216.239.38.120 google.cd
+216.239.38.120 google.cf
+216.239.38.120 google.cg
+216.239.38.120 google.ch
+216.239.38.120 google.ci
+216.239.38.120 google.co.ck
+216.239.38.120 google.cl
+216.239.38.120 google.cm
+216.239.38.120 google.cn
+216.239.38.120 google.com.co
+216.239.38.120 google.co.cr
+216.239.38.120 google.com.cu
+216.239.38.120 google.cv
+216.239.38.120 google.com.cy
+216.239.38.120 google.cz
+216.239.38.120 google.de
+216.239.38.120 google.dj
+216.239.38.120 google.dk
+216.239.38.120 google.dm
+216.239.38.120 google.com.do
+216.239.38.120 google.dz
+216.239.38.120 google.com.ec
+216.239.38.120 google.ee
+216.239.38.120 google.com.eg
+216.239.38.120 google.es
+216.239.38.120 google.com.et
+216.239.38.120 google.fi
+216.239.38.120 google.com.fj
+216.239.38.120 google.fm
+216.239.38.120 google.fr
+216.239.38.120 google.ga
+216.239.38.120 google.ge
+216.239.38.120 google.gg
+216.239.38.120 google.com.gh
+216.239.38.120 google.com.gi
+216.239.38.120 google.gl
+216.239.38.120 google.gm
+216.239.38.120 google.gp
+216.239.38.120 google.gr
+216.239.38.120 google.com.gt
+216.239.38.120 google.gy
+216.239.38.120 google.com.hk
+216.239.38.120 google.hn
+216.239.38.120 google.hr
+216.239.38.120 google.ht
+216.239.38.120 google.hu
+216.239.38.120 google.co.id
+216.239.38.120 google.ie
+216.239.38.120 google.co.il
+216.239.38.120 google.im
+216.239.38.120 google.co.in
+216.239.38.120 google.iq
+216.239.38.120 google.is
+216.239.38.120 google.it
+216.239.38.120 google.je
+216.239.38.120 google.com.jm
+216.239.38.120 google.jo
+216.239.38.120 google.co.jp
+216.239.38.120 google.co.ke
+216.239.38.120 google.com.kh
+216.239.38.120 google.ki
+216.239.38.120 google.kg
+216.239.38.120 google.co.kr
+216.239.38.120 google.com.kw
+216.239.38.120 google.kz
+216.239.38.120 google.la
+216.239.38.120 google.com.lb
+216.239.38.120 google.li
+216.239.38.120 google.lk
+216.239.38.120 google.co.ls
+216.239.38.120 google.lt
+216.239.38.120 google.lu
+216.239.38.120 google.lv
+216.239.38.120 google.com.ly
+216.239.38.120 google.co.ma
+216.239.38.120 google.md
+216.239.38.120 google.me
+216.239.38.120 google.mg
+216.239.38.120 google.mk
+216.239.38.120 google.ml
+216.239.38.120 google.com.mm
+216.239.38.120 google.mn
+216.239.38.120 google.ms
+216.239.38.120 google.com.mt
+216.239.38.120 google.mu
+216.239.38.120 google.mv
+216.239.38.120 google.mw
+216.239.38.120 google.com.mx
+216.239.38.120 google.com.my
+216.239.38.120 google.co.mz
+216.239.38.120 google.com.na
+216.239.38.120 google.com.nf
+216.239.38.120 google.com.ng
+216.239.38.120 google.com.ni
+216.239.38.120 google.ne
+216.239.38.120 google.nl
+216.239.38.120 google.no
+216.239.38.120 google.com.np
+216.239.38.120 google.nr
+216.239.38.120 google.nu
+216.239.38.120 google.co.nz
+216.239.38.120 google.com.om
+216.239.38.120 google.com.pa
+216.239.38.120 google.com.pe
+216.239.38.120 google.com.pg
+216.239.38.120 google.com.ph
+216.239.38.120 google.com.pk
+216.239.38.120 google.pl
+216.239.38.120 google.pn
+216.239.38.120 google.com.pr
+216.239.38.120 google.ps
+216.239.38.120 google.pt
+216.239.38.120 google.com.py
+216.239.38.120 google.com.qa
+216.239.38.120 google.ro
+216.239.38.120 google.ru
+216.239.38.120 google.rw
+216.239.38.120 google.com.sa
+216.239.38.120 google.com.sb
+216.239.38.120 google.sc
+216.239.38.120 google.se
+216.239.38.120 google.com.sg
+216.239.38.120 google.sh
+216.239.38.120 google.si
+216.239.38.120 google.sk
+216.239.38.120 google.com.sl
+216.239.38.120 google.sn
+216.239.38.120 google.so
+216.239.38.120 google.sm
+216.239.38.120 google.sr
+216.239.38.120 google.st
+216.239.38.120 google.com.sv
+216.239.38.120 google.td
+216.239.38.120 google.tg
+216.239.38.120 google.co.th
+216.239.38.120 google.com.tj
+216.239.38.120 google.tk
+216.239.38.120 google.tl
+216.239.38.120 google.tm
+216.239.38.120 google.tn
+216.239.38.120 google.to
+216.239.38.120 google.com.tr
+216.239.38.120 google.tt
+216.239.38.120 google.com.tw
+216.239.38.120 google.co.tz
+216.239.38.120 google.com.ua
+216.239.38.120 google.co.ug
+216.239.38.120 google.co.uk
+216.239.38.120 google.com.uy
+216.239.38.120 google.co.uz
+216.239.38.120 google.com.vc
+216.239.38.120 google.co.ve
+216.239.38.120 google.vg
+216.239.38.120 google.co.vi
+216.239.38.120 google.com.vn
+216.239.38.120 google.vu
+216.239.38.120 google.ws
+216.239.38.120 google.rs
+216.239.38.120 google.co.za
+216.239.38.120 google.co.zm
+216.239.38.120 google.co.zw
+216.239.38.120 google.cat
+216.239.38.120 www.google.com
+216.239.38.120 www.google.ad
+216.239.38.120 www.google.ae
+216.239.38.120 www.google.com.af
+216.239.38.120 www.google.com.ag
+216.239.38.120 www.google.com.ai
+216.239.38.120 www.google.al
+216.239.38.120 www.google.am
+216.239.38.120 www.google.co.ao
+216.239.38.120 www.google.com.ar
+216.239.38.120 www.google.as
+216.239.38.120 www.google.at
+216.239.38.120 www.google.com.au
+216.239.38.120 www.google.az
+216.239.38.120 www.google.ba
+216.239.38.120 www.google.com.bd
+216.239.38.120 www.google.be
+216.239.38.120 www.google.bf
+216.239.38.120 www.google.bg
+216.239.38.120 www.google.com.bh
+216.239.38.120 www.google.bi
+216.239.38.120 www.google.bj
+216.239.38.120 www.google.com.bn
+216.239.38.120 www.google.com.bo
+216.239.38.120 www.google.com.br
+216.239.38.120 www.google.bs
+216.239.38.120 www.google.bt
+216.239.38.120 www.google.co.bw
+216.239.38.120 www.google.by
+216.239.38.120 www.google.com.bz
+216.239.38.120 www.google.ca
+216.239.38.120 www.google.cd
+216.239.38.120 www.google.cf
+216.239.38.120 www.google.cg
+216.239.38.120 www.google.ch
+216.239.38.120 www.google.ci
+216.239.38.120 www.google.co.ck
+216.239.38.120 www.google.cl
+216.239.38.120 www.google.cm
+216.239.38.120 www.google.cn
+216.239.38.120 www.google.com.co
+216.239.38.120 www.google.co.cr
+216.239.38.120 www.google.com.cu
+216.239.38.120 www.google.cv
+216.239.38.120 www.google.com.cy
+216.239.38.120 www.google.cz
+216.239.38.120 www.google.de
+216.239.38.120 www.google.dj
+216.239.38.120 www.google.dk
+216.239.38.120 www.google.dm
+216.239.38.120 www.google.com.do
+216.239.38.120 www.google.dz
+216.239.38.120 www.google.com.ec
+216.239.38.120 www.google.ee
+216.239.38.120 www.google.com.eg
+216.239.38.120 www.google.es
+216.239.38.120 www.google.com.et
+216.239.38.120 www.google.fi
+216.239.38.120 www.google.com.fj
+216.239.38.120 www.google.fm
+216.239.38.120 www.google.fr
+216.239.38.120 www.google.ga
+216.239.38.120 www.google.ge
+216.239.38.120 www.google.gg
+216.239.38.120 www.google.com.gh
+216.239.38.120 www.google.com.gi
+216.239.38.120 www.google.gl
+216.239.38.120 www.google.gm
+216.239.38.120 www.google.gp
+216.239.38.120 www.google.gr
+216.239.38.120 www.google.com.gt
+216.239.38.120 www.google.gy
+216.239.38.120 www.google.com.hk
+216.239.38.120 www.google.hn
+216.239.38.120 www.google.hr
+216.239.38.120 www.google.ht
+216.239.38.120 www.google.hu
+216.239.38.120 www.google.co.id
+216.239.38.120 www.google.ie
+216.239.38.120 www.google.co.il
+216.239.38.120 www.google.im
+216.239.38.120 www.google.co.in
+216.239.38.120 www.google.iq
+216.239.38.120 www.google.is
+216.239.38.120 www.google.it
+216.239.38.120 www.google.je
+216.239.38.120 www.google.com.jm
+216.239.38.120 www.google.jo
+216.239.38.120 www.google.co.jp
+216.239.38.120 www.google.co.ke
+216.239.38.120 www.google.com.kh
+216.239.38.120 www.google.ki
+216.239.38.120 www.google.kg
+216.239.38.120 www.google.co.kr
+216.239.38.120 www.google.com.kw
+216.239.38.120 www.google.kz
+216.239.38.120 www.google.la
+216.239.38.120 www.google.com.lb
+216.239.38.120 www.google.li
+216.239.38.120 www.google.lk
+216.239.38.120 www.google.co.ls
+216.239.38.120 www.google.lt
+216.239.38.120 www.google.lu
+216.239.38.120 www.google.lv
+216.239.38.120 www.google.com.ly
+216.239.38.120 www.google.co.ma
+216.239.38.120 www.google.md
+216.239.38.120 www.google.me
+216.239.38.120 www.google.mg
+216.239.38.120 www.google.mk
+216.239.38.120 www.google.ml
+216.239.38.120 www.google.com.mm
+216.239.38.120 www.google.mn
+216.239.38.120 www.google.ms
+216.239.38.120 www.google.com.mt
+216.239.38.120 www.google.mu
+216.239.38.120 www.google.mv
+216.239.38.120 www.google.mw
+216.239.38.120 www.google.com.mx
+216.239.38.120 www.google.com.my
+216.239.38.120 www.google.co.mz
+216.239.38.120 www.google.com.na
+216.239.38.120 www.google.com.nf
+216.239.38.120 www.google.com.ng
+216.239.38.120 www.google.com.ni
+216.239.38.120 www.google.ne
+216.239.38.120 www.google.nl
+216.239.38.120 www.google.no
+216.239.38.120 www.google.com.np
+216.239.38.120 www.google.nr
+216.239.38.120 www.google.nu
+216.239.38.120 www.google.co.nz
+216.239.38.120 www.google.com.om
+216.239.38.120 www.google.com.pa
+216.239.38.120 www.google.com.pe
+216.239.38.120 www.google.com.pg
+216.239.38.120 www.google.com.ph
+216.239.38.120 www.google.com.pk
+216.239.38.120 www.google.pl
+216.239.38.120 www.google.pn
+216.239.38.120 www.google.com.pr
+216.239.38.120 www.google.ps
+216.239.38.120 www.google.pt
+216.239.38.120 www.google.com.py
+216.239.38.120 www.google.com.qa
+216.239.38.120 www.google.ro
+216.239.38.120 www.google.ru
+216.239.38.120 www.google.rw
+216.239.38.120 www.google.com.sa
+216.239.38.120 www.google.com.sb
+216.239.38.120 www.google.sc
+216.239.38.120 www.google.se
+216.239.38.120 www.google.com.sg
+216.239.38.120 www.google.sh
+216.239.38.120 www.google.si
+216.239.38.120 www.google.sk
+216.239.38.120 www.google.com.sl
+216.239.38.120 www.google.sn
+216.239.38.120 www.google.so
+216.239.38.120 www.google.sm
+216.239.38.120 www.google.sr
+216.239.38.120 www.google.st
+216.239.38.120 www.google.com.sv
+216.239.38.120 www.google.td
+216.239.38.120 www.google.tg
+216.239.38.120 www.google.co.th
+216.239.38.120 www.google.com.tj
+216.239.38.120 www.google.tk
+216.239.38.120 www.google.tl
+216.239.38.120 www.google.tm
+216.239.38.120 www.google.tn
+216.239.38.120 www.google.to
+216.239.38.120 www.google.com.tr
+216.239.38.120 www.google.tt
+216.239.38.120 www.google.com.tw
+216.239.38.120 www.google.co.tz
+216.239.38.120 www.google.com.ua
+216.239.38.120 www.google.co.ug
+216.239.38.120 www.google.co.uk
+216.239.38.120 www.google.com.uy
+216.239.38.120 www.google.co.uz
+216.239.38.120 www.google.com.vc
+216.239.38.120 www.google.co.ve
+216.239.38.120 www.google.vg
+216.239.38.120 www.google.co.vi
+216.239.38.120 www.google.com.vn
+216.239.38.120 www.google.vu
+216.239.38.120 www.google.ws
+216.239.38.120 www.google.rs
+216.239.38.120 www.google.co.za
+216.239.38.120 www.google.co.zm
+216.239.38.120 www.google.co.zw
+216.239.38.120 www.google.cat
diff --git a/net/safe-search/files/hosts/youtube.restrict b/net/safe-search/files/hosts/youtube.restrict
new file mode 100644 (file)
index 0000000..f471cef
--- /dev/null
@@ -0,0 +1,25 @@
+#
+# Copyright (c) 2018 Gregory L. Dietsche <Gregory.Dietsche@cuw.edu>
+# This is free software, licensed under the MIT License
+#
+
+#
+# IMPORTANT: if this file is not working, make sure that dnsmasq is able to READ it!
+#
+
+#216.239.38.120 restrict.youtube.com
+#2001:4860:4802:32::78 restrict.youtube.com
+
+#IPv6
+2001:4860:4802:32::78 www.youtube.com
+2001:4860:4802:32::78 m.youtube.com
+2001:4860:4802:32::78 youtubei.googleapis.com
+2001:4860:4802:32::78 youtube.googleapis.com
+2001:4860:4802:32::78 www.youtube-nocookie.com
+
+#IPv4
+216.239.38.120 www.youtube.com
+216.239.38.120 m.youtube.com
+216.239.38.120 youtubei.googleapis.com
+216.239.38.120 youtube.googleapis.com
+216.239.38.120 www.youtube-nocookie.com
diff --git a/net/safe-search/files/hosts/youtube.restrictmoderate b/net/safe-search/files/hosts/youtube.restrictmoderate
new file mode 100644 (file)
index 0000000..585d8be
--- /dev/null
@@ -0,0 +1,25 @@
+#
+# Copyright (c) 2018 Gregory L. Dietsche <Gregory.Dietsche@cuw.edu>
+# This is free software, licensed under the MIT License
+#
+
+#
+# IMPORTANT: if this file is not working, make sure that dnsmasq is able to READ it!
+#
+
+#216.239.38.119 restrictmoderate.youtube.com
+#2001:4860:4802:32::77 restrictmoderate.youtube.com
+
+#IPv6
+2001:4860:4802:32::77 www.youtube.com
+2001:4860:4802:32::77 m.youtube.com
+2001:4860:4802:32::77 youtubei.googleapis.com
+2001:4860:4802:32::77 youtube.googleapis.com
+2001:4860:4802:32::77 www.youtube-nocookie.com
+
+#IPv4
+216.239.38.119 www.youtube.com
+216.239.38.119 m.youtube.com
+216.239.38.119 youtubei.googleapis.com
+216.239.38.119 youtube.googleapis.com
+216.239.38.119 www.youtube-nocookie.com
diff --git a/net/safe-search/files/safe-search-update b/net/safe-search/files/safe-search-update
new file mode 100644 (file)
index 0000000..7b085bb
--- /dev/null
@@ -0,0 +1,23 @@
+#!/bin/sh
+#
+# Copyright (c) 2018 Gregory L. Dietsche <Gregory.Dietsche@cuw.edu>
+# This is free software, licensed under the MIT License
+#
+. /lib/functions.sh
+
+update() {
+  config_get_bool enabled $1 enabled 0
+  config_get mode $1 mode default
+  if [ ! -f /etc/safe-search/available/$1.$mode ]; then
+    echo Error: /etc/safe-search/available/$1.$mode does not exist. Please check your configuration in /etc/config/safe-search
+  else
+    if [ "$enabled" -eq 1 ]; then
+      ln -s /etc/safe-search/available/$1.$mode /etc/safe-search/enabled/
+    fi
+  fi
+}
+
+rm -f /etc/safe-search/enabled/*
+config_load 'safe-search'
+config_foreach update safe-search
+/etc/init.d/dnsmasq reload
diff --git a/net/safe-search/files/safe-search.conf b/net/safe-search/files/safe-search.conf
new file mode 100644 (file)
index 0000000..2051c5f
--- /dev/null
@@ -0,0 +1,17 @@
+#
+# Copyright (c) 2018 Gregory L. Dietsche <Gregory.Dietsche@cuw.edu>
+# This is free software, licensed under the MIT License
+#
+# run safe-search-update after making configuration changes.
+#
+
+config safe-search 'bing'
+       option enabled 1
+
+config safe-search 'google'
+       option enabled 1
+
+# Valid modes for youtube are restrict and restrictmoderate
+config safe-search 'youtube'
+       option enabled 0
+       option mode 'restrict'
diff --git a/net/safe-search/files/safe-search.defaults b/net/safe-search/files/safe-search.defaults
new file mode 100644 (file)
index 0000000..a2158aa
--- /dev/null
@@ -0,0 +1,12 @@
+#!/bin/sh
+#
+# Copyright (c) 2018 Gregory L. Dietsche <Gregory.Dietsche@cuw.edu>
+# This is free software, licensed under the MIT License
+#
+uci add_list dhcp.@dnsmasq[0].addnhosts=/etc/safe-search/enabled
+uci commit dhcp
+
+#/etc/init.d/dnsmasq reload #safe-search-update does this for us.
+/usr/sbin/safe-search-update
+
+exit 0
index 404f62a4b723ef00df3be0f16b329019eafea832..c59c7b291e8c899f919b582e0173c08688a8d4e1 100644 (file)
@@ -30,17 +30,18 @@ config SAMBA4_SERVER_AD_DC
 config SAMBA4_SERVER_AVAHI
        bool "Avahi support"
        depends on PACKAGE_samba4-server
+       select SAMBA4_SERVER_VFS
        select PACKAGE_libavahi-client
        help
-               Announce Samba resources via DNS/DNS-SD using the Avahi daemon
-       default n
+               Announce Samba resources via DNS/DNS-SD using the Avahi daemon, for Linux/Mac clients.
+       default y
 
 config SAMBA4_SERVER_VFS
        bool "Common VFS modules"
        depends on PACKAGE_samba4-server
        help
                installs:
-                       modules: (vfs_btrfs) vfs_fruit vfs_shadow_copy2 vfs_recycle vfs_fake_perms vfs_readonly vfs_cap vfs_offline vfs_crossrename
+                       modules: (vfs_btrfs) vfs_fruit vfs_shadow_copy2 vfs_recycle vfs_fake_perms vfs_readonly vfs_cap vfs_offline vfs_crossrename vfs_catia vfs_streams_xattr
 
                Commonly used VFS modules, vfs_btrfs requires kmod-fs-btrfs to be selected separately
         default y
@@ -60,7 +61,7 @@ config SAMBA4_SERVER_VFSX
        depends on PACKAGE_samba4-server
        help
                installs:
-                       modules: vfs_virusfilter vfs_shell_snap vfs_commit vfs_worm vfs_xattr_tdb vfs_streams_xattr vfs_aio_fork vfs_aio_pthread (vfs_linux_xfs_sgid) vfs_netatalk vfs_dirsort vfs_fileid vfs_catia
+                       modules: vfs_virusfilter vfs_shell_snap vfs_commit vfs_worm vfs_xattr_tdb vfs_aio_fork vfs_aio_pthread (vfs_linux_xfs_sgid) vfs_netatalk vfs_dirsort vfs_fileid
 
                Additional VFS modules that aren't commonly used, vfs_linux_xfs_sgid requires kmod-fs-xfs to be selected separately
        default n
index c029bff4cc7484dd7bab55cf49268c56068001b6..f6e8b43d02d52297068f3a7199b6416aaf4ce8bb 100644 (file)
@@ -2,8 +2,8 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=samba
-PKG_VERSION:=4.8.4
-PKG_RELEASE:=1
+PKG_VERSION:=4.9.1
+PKG_RELEASE:=4
 
 PKG_MAINTAINER:=Andy Walsh <andy.walsh44+github@gmail.com>
 PKG_LICENSE:=GPL-3.0-only
@@ -11,7 +11,7 @@ PKG_LICENSE_FILES:=COPYING
 
 PKG_SOURCE_URL:=https://download.samba.org/pub/samba/stable/
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_HASH:=f5044d149e01894a08b1d114b8b69aed78171a7bb19608bd1fd771453b9a5406
+PKG_HASH:=33118cbe83a87be085eba1aae6e597878b02d6ac9b2da67454ed33cf3e9853f2
 
 # Buildroot bug? Can't add target deps via '+SAMBA4_SERVER_AD_DC:python-crypto' (as work-around we select via config.in)
 PKG_BUILD_DEPENDS:=SAMBA4_SERVER_AD_DC:python-crypto nfs-kernel-server/host
@@ -51,12 +51,12 @@ define Package/samba4-libs
   $(call Package/samba4/Default)
   TITLE+= libs
   DEPENDS:= +zlib +libtirpc +krb5-libs +libpopt \
-       +PACKAGE_libcap:libcap +PACKAGE_jansson:jansson +PACKAGE_libpthread:libpthread +PACKAGE_libnettle:libnettle \
-       +PACKAGE_libarchive:libarchive +PACKAGE_libgcrypt:libgcrypt +PACKAGE_libpam:libpam +PACKAGE_dbus:dbus +PACKAGE_libavahi-client:libavahi-client \
+       +PACKAGE_libcap:libcap +PACKAGE_libpthread:libpthread +PACKAGE_libnettle:libnettle \
+       +PACKAGE_libgcrypt:libgcrypt +PACKAGE_libpam:libpam +PACKAGE_dbus:dbus +PACKAGE_libavahi-client:libavahi-client \
        +SAMBA4_SERVER_VFS:attr \
        +SAMBA4_SERVER_ACL:acl +SAMBA4_SERVER_ACL:attr \
        +SAMBA4_SERVER_AVAHI:libavahi-client \
-       +SAMBA4_SERVER_AD_DC:python-base +SAMBA4_SERVER_AD_DC:libopenssl +SAMBA4_SERVER_AD_DC:libgnutls +SAMBA4_SERVER_AD_DC:libopenldap
+       +SAMBA4_SERVER_AD_DC:python-base +SAMBA4_SERVER_AD_DC:libopenssl +SAMBA4_SERVER_AD_DC:libgnutls +SAMBA4_SERVER_AD_DC:libopenldap +SAMBA4_SERVER_AD_DC:jansson +SAMBA4_SERVER_AD_DC:libarchive
 endef
 
 define Package/samba4-server
@@ -158,7 +158,11 @@ CONFIGURE_ARGS += \
 
 # Optional AES-NI support - https://lists.samba.org/archive/samba-technical/2017-September/122738.html
 # Support for Nettle wasn't comitted
-CONFIGURE_ARGS += --accel-aes=none
+ifdef CONFIG_TARGET_x86_64
+       CONFIGURE_ARGS += --accel-aes=intelaesni
+else
+       CONFIGURE_ARGS += --accel-aes=none
+endif
 
 CONFIGURE_ARGS += \
                --with-lockdir=/var/lock \
@@ -192,7 +196,7 @@ ifeq ($(CONFIG_SAMBA4_SERVER_AD_DC),y)
        CONFIGURE_ARGS += --enable-gnutls --with-dnsupdate --with-ads --with-ldap
        TARGET_CFLAGS := -I$(STAGING_DIR)/usr/include/python2.7 $(TARGET_CFLAGS)
 else
-       CONFIGURE_ARGS += --without-ad-dc --disable-python --nopyc --nopyo --disable-gnutls --without-dnsupdate --without-ads --without-ldap
+       CONFIGURE_ARGS += --without-ad-dc --without-json-audit --without-libarchive --disable-python --nopyc --nopyo --disable-gnutls --without-dnsupdate --without-ads --without-ldap
        CONFIGURE_VARS += \
                python_LDFLAGS="" \
                python_LIBDIR=""
@@ -209,13 +213,13 @@ SAMBA4_PDB_MODULES :=pdb_smbpasswd,pdb_tdbsam,
 SAMBA4_AUTH_MODULES :=auth_builtin,auth_sam,auth_unix,auth_script,
 SAMBA4_VFS_MODULES :=vfs_default,
 ifeq ($(CONFIG_SAMBA4_SERVER_VFS),y)
-       SAMBA4_VFS_MODULES :=$(SAMBA4_VFS_MODULES)vfs_fruit,vfs_shadow_copy2,vfs_recycle,vfs_fake_perms,vfs_readonly,vfs_cap,vfs_offline,vfs_crossrename,vfs_catia,vfs_streams_xattr,
+       SAMBA4_VFS_MODULES :=$(SAMBA4_VFS_MODULES)vfs_fruit,vfs_shadow_copy2,vfs_recycle,vfs_fake_perms,vfs_readonly,vfs_cap,vfs_offline,vfs_crossrename,vfs_catia,vfs_streams_xattr,vfs_xattr_tdb,
 ifeq ($(CONFIG_PACKAGE_kmod-fs-btrfs),y)
        SAMBA4_VFS_MODULES :=$(SAMBA4_VFS_MODULES)vfs_btrfs,
 endif
 endif
 ifeq ($(CONFIG_SAMBA4_SERVER_VFSX),y)
-       SAMBA4_VFS_MODULES :=$(SAMBA4_VFS_MODULES)vfs_virusfilter,vfs_shell_snap,vfs_commit,vfs_worm,vfs_xattr_tdb,vfs_aio_fork,vfs_aio_pthread,vfs_netatalk,vfs_dirsort,vfs_fileid,
+       SAMBA4_VFS_MODULES :=$(SAMBA4_VFS_MODULES)vfs_virusfilter,vfs_shell_snap,vfs_commit,vfs_worm,vfs_aio_fork,vfs_aio_pthread,vfs_netatalk,vfs_dirsort,vfs_fileid,
 ifeq ($(CONFIG_PACKAGE_kmod-fs-xfs),y)
        SAMBA4_VFS_MODULES :=$(SAMBA4_VFS_MODULES)vfs_linux_xfs_sgid,
 endif
@@ -231,6 +235,7 @@ endif
 ifeq ($(CONFIG_SAMBA4_SERVER_AD_DC),y)
        SAMBA4_PDB_MODULES :=$(SAMBA4_PDB_MODULES)pdb_samba_dsdb,
        SAMBA4_AUTH_MODULES :=$(SAMBA4_AUTH_MODULES)auth_samba4,
+       SAMBA4_VFS_MODULES :=$(SAMBA4_VFS_MODULES)vfs_audit,vfs_extd_audit,vfs_full_audit,
 endif
 ifeq ($(CONFIG_SAMBA4_SERVER_WINBIND),y)
        SAMBA4_IDMAP_MODULES :=$(SAMBA4_IDMAP_MODULES)idmap_passdb,idmap_nss,idmap_tdb,idmap_tdb2,idmap_script,nss_info_template,
@@ -271,10 +276,9 @@ BUILD_TARGETS_ADMIN :=net,smbcontrol,profiles,rpcclient,smbcacls,smbcquotas
 BUILD_TARGETS_UTILS :=smbstatus,smbtree,smbget,mvxattr,nmblookup
 
 # lib bundling
-# NOTE: Compile some unique libs into related bins, so we end-up with a unified samba4-libs base, mainly to allow package separation (server, client, admin, utils)
-CONFIGURE_ARGS += --builtin-libraries=smbclient,netapi,samba-passdb,ads,auth,cli-spoolss,libcli-lsa3,gpext,talloc,tevent,texpect,tdb,ldb,tdr,cmocka,replace
-#CONFIGURE_ARGS += --nonshared-binary=$(BUILD_TARGETS_SERVER)
 # NOTE: bundle + make private, we want to avoid version configuration (build, link) conflicts
+CONFIGURE_ARGS += --builtin-libraries=talloc,tevent,texpect,tdb,ldb,tdr,cmocka,replace
+#CONFIGURE_ARGS += --nonshared-binary=$(BUILD_TARGETS_SERVER)
 ifeq ($(CONFIG_SAMBA4_SERVER_AD_DC),y)
 CONFIGURE_ARGS += --bundled-libraries=talloc,tevent,texpect,tdb,ldb,tdr,cmocka,replace,pytalloc-util,pyldb-util,NONE
 else
@@ -356,8 +360,8 @@ define Package/samba4-server/install
        $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/smbd $(1)/usr/sbin/
 ifeq ($(CONFIG_SAMBA4_SERVER_AD_DC),y)
        $(CP) $(PKG_INSTALL_DIR)/usr/lib/python2.7 $(1)/usr/lib/
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/{samba-tool,ntlm_auth} $(1)/usr/bin
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/{samba,samba_gpoupdate,samba_dnsupdate,samba_kcc,samba_spnupdate,samba_upgradedns} $(1)/usr/sbin/
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/{samba-tool,ntlm_auth,smbtar} $(1)/usr/bin/
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/{samba,samba-gpupdate,samba_dnsupdate,samba_kcc,samba_spnupdate,samba_upgradedns} $(1)/usr/sbin/
 endif
 ifeq ($(CONFIG_SAMBA4_SERVER_NETBIOS),y)
        $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/nmbd $(1)/usr/sbin/
index 1d62dcab7814adcc5c6da3ba18083193587e6b39..332bb27914ecc4f7337e7d329edcf47e874f0570 100644 (file)
@@ -1,5 +1,4 @@
 config samba
-       option 'name'                   'OpenWrt-SMB'
        option 'workgroup'              'WORKGROUP'
        option 'description'    'Samba on OpenWrt'
        option 'charset'                'UTF-8'
index 9487875be6321d02b534b4203977ee6fadba0c5c..09714f0167fd0860c16ca6fc66527780b7c0065c 100644 (file)
@@ -1,6 +1,6 @@
 #!/bin/sh /etc/rc.common
 
-START=99
+START=98
 USE_PROCD=1
 
 smb_header() {
@@ -19,20 +19,21 @@ smb_header() {
                done
        )
 
-       local name workgroup description charset
-       local hostname="$(uci_get system.@system[0].hostname)"
-
-       config_get name                 $1 name         "${hostname:-OpenWrt}"
-       config_get workgroup            $1 workgroup    "${hostname:-WORKGROUP}"
-       config_get description          $1 description  "Samba on ${hostname:-OpenWrt}"
-       config_get charset              $1 charset      "UTF-8"
+       local workgroup description charset
+       # we dont use netbios anymore as default and wsd/avahi is dns based
+       local hostname="$(cat /proc/sys/kernel/hostname)"
 
+       config_get workgroup            $1 workgroup    "WORKGROUP"
+       config_get description          $1 description  "Samba on OpenWrt"
+       config_get charset                      $1 charset              "UTF-8"
+       
+       config_get_bool MACOS                   $1 macos                        0
        config_get_bool DISABLE_NETBIOS $1 disable_netbios      0
        config_get_bool DISABLE_AD_DC   $1 disable_ad_dc        0
        config_get_bool DISABLE_WINBIND $1 disable_winbind      0
 
        mkdir -p /var/etc
-       sed -e "s#|NAME|#$name#g" \
+       sed -e "s#|NAME|#$hostname#g" \
            -e "s#|WORKGROUP|#$workgroup#g" \
            -e "s#|DESCRIPTION|#$description#g" \
            -e "s#|INTERFACES|#$interfaces#g" \
@@ -65,43 +66,44 @@ smb_add_share() {
        local name
        local path
        local users
-       local public
-       local writable
-       local printable
        local create_mask
-
+       local dir_mask
        local browseable
        local read_only
        local guest_ok
        local guest_only
        local inherit_owner
        local vfs_objects
+       local timemachine
+       local timemachine_maxsize
+       local force_root
 
        config_get name $1 name
        config_get path $1 path
        config_get users $1 users
-       config_get public $1 public
-       config_get writable $1 writable
-       config_get printable $1 printable
        config_get create_mask $1 create_mask
        config_get dir_mask $1 dir_mask
-
-
        config_get browseable $1 browseable
        config_get read_only $1 read_only
        config_get guest_ok $1 guest_ok
        config_get guest_only $1 guest_only
        config_get inherit_owner $1 inherit_owner
        config_get vfs_objects $1 vfs_objects
-
+       config_get_bool timemachine     $1 timemachine  0
+       config_get timemachine_maxsize $1 timemachine_maxsize
+       config_get_bool force_root      $1 force_root   0
 
        [ -z "$name" -o -z "$path" ] && return
 
        echo -e "\n[$name]\n\tpath = $path" >> /var/etc/smb.conf
-       [ -n "$users" ] && echo -e "\tvalid users = $users" >> /var/etc/smb.conf
-       [ -n "$public" ] && echo -e "\tpublic = $public" >> /var/etc/smb.conf
-       [ -n "$writable" ] && echo -e "\twritable = $writable" >> /var/etc/smb.conf
-       [ -n "$printable" ] && echo -e "\tprintable = $printable" >> /var/etc/smb.conf
+       
+       if [ "$force_root" -eq 1 ]; then
+               echo -e "\tforce user = root" >> /var/etc/smb.conf
+               echo -e "\tforce group = root" >> /var/etc/smb.conf
+       else
+               [ -n "$users" ] && echo -e "\tvalid users = $users" >> /var/etc/smb.conf
+       fi
+
        [ -n "$create_mask" ] && echo -e "\tcreate mask = $create_mask" >> /var/etc/smb.conf
        [ -n "$dir_mask" ] && echo -e "\tdirectory mask = $dir_mask" >> /var/etc/smb.conf
 
@@ -110,6 +112,19 @@ smb_add_share() {
        [ -n "$guest_ok" ] && echo -e "\tguest ok = $guest_ok" >> /var/etc/smb.conf
        [ -n "$guest_only" ] && echo -e "\tguest only = $guest_only" >> /var/etc/smb.conf
        [ -n "$inherit_owner" ] && echo -e "\tinherit owner = $inherit_owner" >> /var/etc/smb.conf
+       
+       if [ "$MACOS" -eq 1 ]; then
+               vfs_objects="catia fruit streams_xattr $vfs_objects"
+               echo -e "\tfruit:encoding = native" >> /var/etc/smb.conf
+               echo -e "\tfruit:metadata = stream" >> /var/etc/smb.conf
+               echo -e "\tfruit:veto_appledouble = no" >> /var/etc/smb.conf
+               # avoid mixed shares order for aapl
+               if [ "$timemachine" -eq 1 ]; then
+                       echo -e "\tfruit:time machine = yes" >> /var/etc/smb.conf
+                       [ -n "$timemachine_maxsize" ] && echo -e "\tfruit:time machine max size = ${timemachine_maxsize}G" >> /var/etc/smb.conf
+               fi
+       fi
+       
        [ -n "$vfs_objects" ] && echo -e "\tvfs objects = $vfs_objects" >> /var/etc/smb.conf
 }
 
@@ -129,18 +144,11 @@ init_config() {
        config_foreach smb_add_share sambashare
 }
 
-reload_service() {
-       init_config
-
-       killall -HUP samba
-       killall -HUP smbd
-       killall -HUP nmbd
-       killall -HUP winbindd
-}
-
 service_triggers() {
-       procd_add_reload_trigger samba4
-
+       PROCD_RELOAD_DELAY=2000
+       
+       procd_add_reload_trigger "dhcp" "system" "samba4"
+       
        local i
        for i in $samba_iface; do
                procd_add_reload_interface_trigger $i
@@ -150,7 +158,7 @@ service_triggers() {
 start_service() {
        init_config
 
-       # start main AC-DC daemon, will spawn (smbd,nmbd,winbindd) as needed/configured.
+       # start main AD-DC daemon, will spawn (smbd,nmbd,winbindd) as needed/configured.
        if [ "$DISABLE_AD_DC" -ne 1 ] && [ -x /usr/sbin/samba ]; then
                procd_open_instance
                procd_set_param command /usr/sbin/samba -F
index 77f4e9675edf3d7297a83a510a2c5a4688ab65dd..9c18184b3f439774629ada98722ab1b174fee18c 100644 (file)
        ## disable loading of all printcap printers by default (iprint, cups, lpstat)
        load printers = No
        printcap name = /dev/null
+
+       ## Enabling this parameter will disable Samba's support for the SPOOLSS set of MS-RPC's.
+       disable spoolss = yes
+       
+       ## This parameters controls how printer status information is interpreted on your system.
+       ## (BSD, AIX, LPRNG, PLP, SYSV, HPUX, QNX, SOFTQ)
+       printing = bsd
        
        ## Disable that nmbd is acting as a WINS server for unknow netbios names
        #dns proxy = No
@@ -62,7 +69,7 @@
        ## Allows the server name that is advertised through MDNS to be set to the hostname rather than the Samba NETBIOS name.
        ## This allows an administrator to make Samba registered MDNS records match the case of the hostname rather than being in all capitals.
        ## (netbios, mdns)
-       #mdns name = mdns
+       mdns name = mdns
        
        ## Clients that only support netbios won't be able to see your samba server when netbios support is disabled.
        #disable netbios = Yes
diff --git a/net/samba4/patches/103-samba-4.8.5-unbundle-libbsd.patch b/net/samba4/patches/103-samba-4.8.5-unbundle-libbsd.patch
new file mode 100644 (file)
index 0000000..1fc2f76
--- /dev/null
@@ -0,0 +1,78 @@
+--- a/lib/crypto/wscript_configure     2018-07-26
++++ b/lib/crypto/wscript_configure     2018-08-27
+@@ -2,11 +2,11 @@
+ import Options
+ import Utils
+-if not conf.CHECK_FUNCS_IN('MD5Init', 'bsd', headers='bsd/md5.h',
+-    checklibc=True):
+-    conf.CHECK_FUNCS_IN('MD5Init', 'md5', headers='sys/md5.h',
+-                        checklibc=True)
+-    conf.CHECK_FUNCS_IN('MD5Init', 'md', headers='sys/md5.h',
++# if not conf.CHECK_FUNCS_IN('MD5Init', 'bsd', headers='bsd/md5.h',
++    # checklibc=True):
++conf.CHECK_FUNCS_IN('MD5Init', 'md5', headers='sys/md5.h',
++                                      checklibc=True)
++conf.CHECK_FUNCS_IN('MD5Init', 'md', headers='sys/md5.h',
+                         checklibc=True)
+ conf.CHECK_FUNCS_IN('CC_MD5_Init', '', headers='CommonCrypto/CommonDigest.h',
+     checklibc=True)
+--- a/lib/replace/wscript
++++ b/lib/replace/wscript
+@@ -302,22 +302,13 @@ def configure(conf):
+     conf.CHECK_FUNCS('prctl dirname basename')
+-    strlcpy_in_bsd = False
+-
+-    # libbsd on some platforms provides strlcpy and strlcat
+-    if not conf.CHECK_FUNCS('strlcpy strlcat'):
+-        if conf.CHECK_FUNCS_IN('strlcpy strlcat', 'bsd', headers='bsd/string.h',
+-                               checklibc=True):
+-            strlcpy_in_bsd = True
+-    if not conf.CHECK_FUNCS('getpeereid'):
+-        conf.CHECK_FUNCS_IN('getpeereid', 'bsd', headers='sys/types.h bsd/unistd.h')
+-    if not conf.CHECK_FUNCS_IN('setproctitle', 'setproctitle', headers='setproctitle.h'):
+-        conf.CHECK_FUNCS_IN('setproctitle', 'bsd', headers='sys/types.h bsd/unistd.h')
+-    if not conf.CHECK_FUNCS('setproctitle_init'):
+-        conf.CHECK_FUNCS_IN('setproctitle_init', 'bsd', headers='sys/types.h bsd/unistd.h')
+-
+-    if not conf.CHECK_FUNCS('closefrom'):
+-        conf.CHECK_FUNCS_IN('closefrom', 'bsd', headers='bsd/unistd.h')
++    # Not checking for libbsd
++    conf.CHECK_FUNCS('strlcpy strlcat')
++    conf.CHECK_FUNCS('getpeereid')
++    conf.CHECK_FUNCS_IN('setproctitle', 'setproctitle', headers='setproctitle.h')
++    conf.CHECK_FUNCS('setproctitle_init')
++
++    conf.CHECK_FUNCS('closefrom')
+     conf.CHECK_CODE('''
+                 struct ucred cred;
+@@ -667,9 +658,6 @@ removeea setea
+     # look for a method of finding the list of network interfaces
+     for method in ['HAVE_IFACE_GETIFADDRS', 'HAVE_IFACE_AIX', 'HAVE_IFACE_IFCONF', 'HAVE_IFACE_IFREQ']:
+-        bsd_for_strlcpy = ''
+-        if strlcpy_in_bsd:
+-            bsd_for_strlcpy = ' bsd'
+         if conf.CHECK_CODE('''
+                            #define %s 1
+                            #define NO_CONFIG_H 1
+@@ -682,7 +670,7 @@ removeea setea
+                            #include "test/getifaddrs.c"
+                            ''' % method,
+                            method,
+-                           lib='nsl socket' + bsd_for_strlcpy,
++                           lib='nsl socket',
+                            addmain=False,
+                            execute=True):
+             break
+@@ -730,7 +718,6 @@ def build(bld):
+                 break
+     extra_libs = ''
+-    if bld.CONFIG_SET('HAVE_LIBBSD'): extra_libs += ' bsd'
+     bld.SAMBA_SUBSYSTEM('LIBREPLACE_HOSTCC',
+         REPLACE_HOSTCC_SOURCE,
index f20b9eb5aeaf8011a3f1251d05fba8f62447a397..9aae22c36a96309415fff371504853120d6058c1 100644 (file)
@@ -16,6 +16,7 @@ Checking value of NSIG: "65"
 Checking value of _NSIG: "65"
 Checking value of SIGRTMAX: "64"
 Checking value of SIGRTMIN: "35"
+Checking for a 64-bit host to support lmdb: NO
 Checking whether the WRFILE -keytab is supported: OK
 Checking errno of iconv for illegal multibyte sequence: OK
 Checking for kernel change notify support: OK
index babfa411725f848ea5cda5aa0fdb3753c17bb081..57f38119ff865fc858d5e1dace394b84e06ee0fe 100644 (file)
@@ -16,6 +16,7 @@ Checking value of NSIG: "65"
 Checking value of _NSIG: "65"
 Checking value of SIGRTMAX: "64"
 Checking value of SIGRTMIN: "35"
+Checking for a 64-bit host to support lmdb: NO
 Checking whether the WRFILE -keytab is supported: OK
 Checking errno of iconv for illegal multibyte sequence: OK
 Checking for kernel change notify support: OK
index 10e7fe397ff40bfe1f32e79822c8c9711bf101f1..79ba994be2b01d4745466d69fe692a4b02c3a6c6 100644 (file)
@@ -16,6 +16,7 @@ Checking value of NSIG: "65"
 Checking value of _NSIG: "65"
 Checking value of SIGRTMAX: "64"
 Checking value of SIGRTMIN: "35"
+Checking for a 64-bit host to support lmdb: NO
 Checking whether the WRFILE -keytab is supported: OK
 Checking errno of iconv for illegal multibyte sequence: OK
 Checking for kernel change notify support: OK
index 10e7fe397ff40bfe1f32e79822c8c9711bf101f1..79ba994be2b01d4745466d69fe692a4b02c3a6c6 100644 (file)
@@ -16,6 +16,7 @@ Checking value of NSIG: "65"
 Checking value of _NSIG: "65"
 Checking value of SIGRTMAX: "64"
 Checking value of SIGRTMIN: "35"
+Checking for a 64-bit host to support lmdb: NO
 Checking whether the WRFILE -keytab is supported: OK
 Checking errno of iconv for illegal multibyte sequence: OK
 Checking for kernel change notify support: OK
index 10e7fe397ff40bfe1f32e79822c8c9711bf101f1..79ba994be2b01d4745466d69fe692a4b02c3a6c6 100644 (file)
@@ -16,6 +16,7 @@ Checking value of NSIG: "65"
 Checking value of _NSIG: "65"
 Checking value of SIGRTMAX: "64"
 Checking value of SIGRTMIN: "35"
+Checking for a 64-bit host to support lmdb: NO
 Checking whether the WRFILE -keytab is supported: OK
 Checking errno of iconv for illegal multibyte sequence: OK
 Checking for kernel change notify support: OK
index 6f6f410c219a97b84b5199b90f058a1716bbf2b4..9c1a2c67ef489c92d82613a0a873ee0ab46ec054 100644 (file)
@@ -16,6 +16,7 @@ Checking value of NSIG: "128"
 Checking value of _NSIG: "128"
 Checking value of SIGRTMAX: "127"
 Checking value of SIGRTMIN: "35"
+Checking for a 64-bit host to support lmdb: NO
 Checking whether the WRFILE -keytab is supported: OK
 Checking errno of iconv for illegal multibyte sequence: OK
 Checking for kernel change notify support: OK
index 313c5d9f2d2a019c2649e74e324da561bc286a2a..a270f0860c06999f54abd481fc8fe25d0235ac07 100644 (file)
@@ -16,6 +16,7 @@ Checking value of NSIG: "128"
 Checking value of _NSIG: "128"
 Checking value of SIGRTMAX: "127"
 Checking value of SIGRTMIN: "35"
+Checking for a 64-bit host to support lmdb: NO
 Checking whether the WRFILE -keytab is supported: OK
 Checking errno of iconv for illegal multibyte sequence: OK
 Checking for kernel change notify support: OK
index 313c5d9f2d2a019c2649e74e324da561bc286a2a..a270f0860c06999f54abd481fc8fe25d0235ac07 100644 (file)
@@ -16,6 +16,7 @@ Checking value of NSIG: "128"
 Checking value of _NSIG: "128"
 Checking value of SIGRTMAX: "127"
 Checking value of SIGRTMIN: "35"
+Checking for a 64-bit host to support lmdb: NO
 Checking whether the WRFILE -keytab is supported: OK
 Checking errno of iconv for illegal multibyte sequence: OK
 Checking for kernel change notify support: OK
index 6f6f410c219a97b84b5199b90f058a1716bbf2b4..9c1a2c67ef489c92d82613a0a873ee0ab46ec054 100644 (file)
@@ -16,6 +16,7 @@ Checking value of NSIG: "128"
 Checking value of _NSIG: "128"
 Checking value of SIGRTMAX: "127"
 Checking value of SIGRTMIN: "35"
+Checking for a 64-bit host to support lmdb: NO
 Checking whether the WRFILE -keytab is supported: OK
 Checking errno of iconv for illegal multibyte sequence: OK
 Checking for kernel change notify support: OK
index 819f1854db426d35ac778065c6f53ecd5740facb..4912acbde984869ae01095b9292e62a0329fff86 100644 (file)
@@ -16,6 +16,7 @@ Checking value of NSIG: "65"
 Checking value of _NSIG: "65"
 Checking value of SIGRTMAX: "64"
 Checking value of SIGRTMIN: "35"
+Checking for a 64-bit host to support lmdb: NO
 Checking whether the WRFILE -keytab is supported: OK
 Checking errno of iconv for illegal multibyte sequence: OK
 Checking for kernel change notify support: OK
index f20b9eb5aeaf8011a3f1251d05fba8f62447a397..9aae22c36a96309415fff371504853120d6058c1 100644 (file)
@@ -16,6 +16,7 @@ Checking value of NSIG: "65"
 Checking value of _NSIG: "65"
 Checking value of SIGRTMAX: "64"
 Checking value of SIGRTMIN: "35"
+Checking for a 64-bit host to support lmdb: NO
 Checking whether the WRFILE -keytab is supported: OK
 Checking errno of iconv for illegal multibyte sequence: OK
 Checking for kernel change notify support: OK
index ada71208bf0a9d00f272b47d65e423ce15e80c15..d28009248f59dccdc784fa600ddc722a72aeb69f 100644 (file)
@@ -5,7 +5,7 @@
         socks5                                     ss              plain
        --------> tcp:local_address:local_port ----> ss server -------> dest
 
-`ss-redir`.  The REDIRECT and TPROXY part are to be provided by `ss-rules` script.  REDIRECT only works for tcp traffic (see also darkk/redsocks).  TPROXY is used to proxy udp messages, but it's only available in the PREROUTING chain and as such cannot proxy local out traffic.
+`ss-redir`.  The REDIRECT and TPROXY part are to be provided by `ss-rules` script.  REDIRECT is for tcp traffic (`SO_ORIGINAL_DST` only supports TCP).  TPROXY is for udp messages, but it's only available in the PREROUTING chain and as such cannot proxy local out traffic.
 
          plain             plain                                 ss              plain
        ---------> REDIRECT ------> tcp:local_address:local_port ----> ss server -----> original dest
index 8a28c792f234d3367c4ce409110a3a134d5cdbf0..be57601071994202428f126834a9e15735b953b2 100644 (file)
@@ -1,6 +1,4 @@
 #
-# Copyright (C) 2006-2015 OpenWrt.org
-#
 # This is free software, licensed under the GNU General Public License v2.
 # See /LICENSE for more information.
 #
@@ -9,7 +7,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=socat
 PKG_VERSION:=1.7.3.2
-PKG_RELEASE:=2
+PKG_RELEASE:=3
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
 PKG_SOURCE_URL:=http://www.dest-unreach.org/socat/download
@@ -63,11 +61,23 @@ ifneq ($(CONFIG_SOCAT_SSL),y)
   CONFIGURE_ARGS+= --disable-openssl
 endif
 
+# PowerPC has different TERMIOS bits
+ifneq ($(findstring powerpc,$(CONFIG_ARCH)),)
+  CONFIGURE_VARS += \
+         sc_cv_sys_crdly_shift=12 \
+         sc_cv_sys_tabdly_shift=10 \
+         sc_cv_sys_csize_shift=8
+else
+  CONFIGURE_VARS += \
+         sc_cv_sys_crdly_shift=9 \
+         sc_cv_sys_tabdly_shift=11 \
+         sc_cv_sys_csize_shift=4
+endif
+
 CONFIGURE_VARS += \
        sc_cv_termios_ispeed="no" \
-       sc_cv_sys_crdly_shift=9 \
-       sc_cv_sys_tabdly_shift=11 \
-       sc_cv_sys_csize_shift=4 \
+       ac_cv_header_bsd_libutil_h=no \
+       ac_cv_lib_bsd_openpty=no \
        BUILD_DATE=$(SOURCE_DATE_EPOCH)
 
 define Package/socat/install
diff --git a/net/spoofer/Makefile b/net/spoofer/Makefile
new file mode 100644 (file)
index 0000000..bce8ce4
--- /dev/null
@@ -0,0 +1,73 @@
+#
+# Copyright (C) 2018 The Regents of the University of California
+#
+# This is free software, licensed under the GNU General Public License v3.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=spoofer
+PKG_VERSION:=1.4.0
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://www.caida.org/projects/spoofer/downloads
+PKG_HASH:=cab261f00fdc4a7d9f98b199205764947d5c2081aa8192e4e17020cf0e2fe434
+
+PKG_LICENSE:=GPL-3.0
+PKG_LICENSE_FILES:=LICENSE
+
+PKG_USE_MIPS16:=0
+HOST_BUILD_DEPENDS:=protobuf/host
+
+include $(INCLUDE_DIR)/host-build.mk
+include $(INCLUDE_DIR)/package.mk
+
+$(eval $(call HostBuild))
+
+define Package/spoofer
+  SECTION:=net
+  CATEGORY:=Network
+  TITLE:=Measure your ISP's resistance to spoofed IP packets
+  URL:=https://spoofer.caida.org/
+  MAINTAINER:=Ken Keys <spoofer-info@caida.org>
+  DEPENDS:=+protobuf-lite +libpcap +libpthread +libopenssl
+endef
+
+define Package/spoofer/description
+The spoofer client is part of a system to measure the Internet's
+resistance to packets with a spoofed (forged) source IP address.
+
+This package comes bundled with a small certificate file that allows
+secure communication with the spoofer server without depending on
+the large ca-certificates package.  But if the server's private
+certificate ever changes, it will be necessary to either install the
+ca-certificates package or install an updated version of this package
+that has a newer bundled certificate.
+
+endef
+
+CONFIGURE_ARGS += \
+       --enable-prober \
+       --disable-manager
+
+CONFIGURE_VARS += \
+       PROTOC=$(STAGING_DIR_HOSTPKG)/bin/protoc
+
+EXTRA_CXXFLAGS += -std=gnu++14
+
+SPOOFER_SRC=$(PKG_BUILD_DIR)
+
+define Package/spoofer/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/prober/spoofer-prober $(1)/usr/bin
+       $(INSTALL_BIN) $(SPOOFER_SRC)/openwrt-files/spoofer $(1)/usr/bin
+       $(INSTALL_DIR) $(1)/etc/init.d
+       $(INSTALL_BIN) $(SPOOFER_SRC)/openwrt-files/initscript $(1)/etc/init.d/spoofer
+       $(INSTALL_DIR) $(1)/usr/share/spoofer
+       $(INSTALL_DATA) $(SPOOFER_SRC)/gd_bundle.crt $(1)/usr/share/spoofer
+       $(INSTALL_DATA) $(SPOOFER_SRC)/openwrt-files/spoofer-lib.sh $(1)/usr/share/spoofer
+endef
+
+$(eval $(call BuildPackage,spoofer))
index fc7719aeb8c6eaf1f792cfdcafc06876ca458d90..560c8c4ba51f8f24cd00b44d67b1b94f8ce75560 100644 (file)
@@ -8,13 +8,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=sqm-scripts
-PKG_SOURCE_VERSION:=a94318a2ecd709403fb8c0d622063d9ce1859615
-PKG_VERSION:=1.2.3
+PKG_SOURCE_VERSION:=d0ac824ec0c5d0fc3593ce90d83a007da505856e
+PKG_VERSION:=1.2.4
 PKG_RELEASE:=1
 PKG_LICENSE:=GPLv2
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_RELEASE).tar.xz
-PKG_MIRROR_HASH:=0cabeaf9c9d7ff260d8ed7b4ed518c67ff4640d82a8583e2fb4d695befb79c54
+PKG_MIRROR_HASH:=2882aeae9f8b7827655bae8b0ecae60c405795a2a51aec8d3f2ae5fccecd76b9
 PKG_SOURCE_URL:=https://github.com/tohojo/sqm-scripts.git
 PKG_SOURCE_PROTO:=git
 PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_RELEASE)
@@ -51,7 +51,7 @@ define Package/luci-app-sqm
   TITLE:=SQM Scripts - LuCI interface
   MAINTAINER:=Toke Høiland-Jørgensen <toke@toke.dk>
   PKGARCH:=all
-  DEPENDS:= lua luci-base +sqm-scripts
+  DEPENDS:= +lua +luci-base +sqm-scripts
   SUBMENU:=3. Applications
 endef
 
index d0a0db569d120a93c484ad1692d3444683d87e6d..bcc072f18ea2ddf71864e5b5bf67563db8c699f2 100644 (file)
@@ -45,9 +45,33 @@ if PACKAGE_squid
 
        comment "Optional packages"
 
-       config SQUID_use-gnutls
-               bool "Use GnuTLS instead of OpenSSL"
-               default n
+       choice
+               prompt "Choose SSL Library"
+               default SQUID_use-openssl
+
+               config SQUID_use-openssl
+               bool "Use OpenSSL (default)"
+
+               config SQUID_use-gnutls
+               bool "Use GnuTLS (experimental, see help)"
+               help
+                       Use GnuTLS in place of OpenSSL for the core features of receiving
+                       TLS connections from clients and making TLS connections to servers.
+                       The GnuTLS support is still very much experimental and should be
+                       tested before use.
+
+                       SSL-Bump and certificate generation features are not yet supported
+                       by GnuTLS builds. Nor are many other less commonly used Squid
+                       TLS/SSL features.
+
+                       squid.conf directives and configuration options which have undergone
+                       name changes from 'ssl' to 'tls' prefix in Squid-4 have GnuTLS
+                       support, unless explicitly stated otherwise.
+
+                       Advanced configuration with specific selection of ciphers and
+                       similar settings should still work, but needs the GnuTLS Priority
+                       Strings instead of the OpenSSL options when using GnuTLS.
+       endchoice
 
        config SQUID_with-libcap
                bool "Use libcap - Linux capabilities library"
index fcecb114ab6d93aff8ec16f13bd14f5b3b525452..ff6b0a0d1cb36d9e4f40591baa13d0bb7064a78d 100644 (file)
@@ -8,7 +8,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=squid
-PKG_VERSION:=4.0.24
+PKG_VERSION:=4.3
 PKG_RELEASE:=1
 
 PKG_LICENSE:=GPL-2.0
@@ -18,10 +18,11 @@ PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=http://www3.us.squid-cache.org/Versions/v4/ \
        http://www2.pl.squid-cache.org/Versions/v4/ \
        http://www.squid-cache.org/Versions/v4/
-PKG_HASH:=091da0d763307dcc0f5c784ab07ea0c5a093f6dfac60f17ff26e2a6d50f76a07
+PKG_HASH:=322612ef0544828f6c673a25124b32364fb41ef5e2847e21c89480b5546a4c7c
 
 PKG_BUILD_PARALLEL:=1
 PKG_INSTALL:=1
+PKG_FIXUP:=autoreconf
 
 include $(INCLUDE_DIR)/package.mk
 
@@ -36,7 +37,7 @@ define Package/squid
   $(call Package/squid/Default)
   MENU:=1
   DEPENDS:=+libpthread +librt +libltdl +libstdcpp +libatomic +USE_GLIBC:libbsd
-  DEPENDS+= +SQUID_use-gnutls:libgnutls +!SQUID_use-gnutls:libopenssl
+  DEPENDS+= +SQUID_use-gnutls:libgnutls +SQUID_use-openssl:libopenssl
   DEPENDS+= +SQUID_with-libcap:libcap
   DEPENDS+= +SQUID_with-nettle:libnettle
   DEPENDS+= +SQUID_with-expat:libexpat
@@ -66,6 +67,8 @@ define Package/squid-mod-cachemgr
 endef
 
 CONFIGURE_ARGS += \
+       BUILDCXX=$(HOSTCXX) \
+       BUILDCXXFLAGS=$(if $(HOST_CXXFLAGS),$(HOST_CXXFLAGS),-O2) \
        --config-cache \
        --datadir=/usr/share/squid \
        --libexecdir=/usr/lib/squid \
index 7bccc9fc1d4281723c10558649b2fdea2102af54..60c4fe9a4a1a65f099e11265619594f91b19e3b7 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=strongswan
-PKG_VERSION:=5.6.3
-PKG_RELEASE:=2
+PKG_VERSION:=5.7.1
+PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
-PKG_HASH:=c3c7dc8201f40625bba92ffd32eb602a8909210d8b3fac4d214c737ce079bf24
 PKG_SOURCE_URL:=http://download.strongswan.org/ http://download2.strongswan.org/
+PKG_HASH:=006f9c9126e2a2f4e7a874b5e1bd2abec1bbbb193c8b3b3a4c6ccd8c2d454bec
 PKG_LICENSE:=GPL-2.0+
 PKG_MAINTAINER:=Stijn Tintel <stijn@linux-ipv6.be>
 
index 753bd8e8d68421423d25a17b9d6c86c6f721dc65..8db92215e6a4642ccc882856ef5b610475b78297 100644 (file)
 +#undef encrypt
 --- a/src/libcharon/plugins/kernel_netlink/kernel_netlink_ipsec.c
 +++ b/src/libcharon/plugins/kernel_netlink/kernel_netlink_ipsec.c
-@@ -19,6 +19,7 @@
+@@ -40,6 +40,7 @@
   */
  
  #define _GNU_SOURCE
 +#include <musl.h>
  #include <sys/types.h>
  #include <sys/socket.h>
- #include <stdint.h>
+ #include <sys/ioctl.h>
 --- a/src/libcharon/plugins/kernel_netlink/kernel_netlink_net.c
 +++ b/src/libcharon/plugins/kernel_netlink/kernel_netlink_net.c
 @@ -37,6 +37,8 @@
index 8e54050defc21debdfd42d8bfc9450d020cb3a35..a61da3a48f49d2e66499f006d9130619291d0489 100644 (file)
@@ -9,7 +9,7 @@
 +# This files/scripts are executed by the openwrt hotplug functionality on
 +# ipsec events.
 +
-+exec /sbin/hotplug-call ipsec "$1"
++/sbin/hotplug-call ipsec "$1"
 +
  #      PLUTO_VERSION
  #              indicates  what  version of this interface is being
index eb8d83c4a3b7aaa0f5a99162c0bbf3ea7871d346..1dab1140c13c9bae53200f6e5ffd1820d6fd5a28 100644 (file)
@@ -1,6 +1,6 @@
 --- a/configure.ac
 +++ b/configure.ac
-@@ -135,6 +135,7 @@ ARG_DISBL_SET([fips-prf],       [disable
+@@ -136,6 +136,7 @@ ARG_DISBL_SET([fips-prf],       [disable
  ARG_ENABL_SET([gcm],            [enables the GCM AEAD wrapper crypto plugin.])
  ARG_ENABL_SET([gcrypt],         [enables the libgcrypt plugin.])
  ARG_DISBL_SET([gmp],            [disable GNU MP (libgmp) based crypto implementation plugin.])
@@ -8,7 +8,7 @@
  ARG_DISBL_SET([curve25519],     [disable Curve25519 Diffie-Hellman plugin.])
  ARG_DISBL_SET([hmac],           [disable HMAC crypto implementation plugin.])
  ARG_ENABL_SET([md4],            [enable MD4 software implementation plugin.])
-@@ -1379,6 +1380,7 @@ ADD_PLUGIN([gcrypt],               [s ch
+@@ -1410,6 +1411,7 @@ ADD_PLUGIN([botan],                [s ch
  ADD_PLUGIN([af-alg],               [s charon scepclient pki scripts medsrv attest nm cmd aikgen])
  ADD_PLUGIN([fips-prf],             [s charon nm cmd])
  ADD_PLUGIN([gmp],                  [s charon scepclient pki scripts manager medsrv attest nm cmd aikgen fuzz])
@@ -16,7 +16,7 @@
  ADD_PLUGIN([curve25519],           [s charon pki scripts nm cmd])
  ADD_PLUGIN([agent],                [s charon nm cmd])
  ADD_PLUGIN([keychain],             [s charon cmd])
-@@ -1516,6 +1518,7 @@ AM_CONDITIONAL(USE_SHA3, test x$sha3 = x
+@@ -1550,6 +1552,7 @@ AM_CONDITIONAL(USE_SHA3, test x$sha3 = x
  AM_CONDITIONAL(USE_MGF1, test x$mgf1 = xtrue)
  AM_CONDITIONAL(USE_FIPS_PRF, test x$fips_prf = xtrue)
  AM_CONDITIONAL(USE_GMP, test x$gmp = xtrue)
@@ -24,7 +24,7 @@
  AM_CONDITIONAL(USE_CURVE25519, test x$curve25519 = xtrue)
  AM_CONDITIONAL(USE_RDRAND, test x$rdrand = xtrue)
  AM_CONDITIONAL(USE_AESNI, test x$aesni = xtrue)
-@@ -1783,6 +1786,7 @@ AC_CONFIG_FILES([
+@@ -1824,6 +1827,7 @@ AC_CONFIG_FILES([
        src/libstrongswan/plugins/mgf1/Makefile
        src/libstrongswan/plugins/fips_prf/Makefile
        src/libstrongswan/plugins/gmp/Makefile
@@ -34,7 +34,7 @@
        src/libstrongswan/plugins/aesni/Makefile
 --- a/src/libstrongswan/Makefile.am
 +++ b/src/libstrongswan/Makefile.am
-@@ -323,6 +323,13 @@ if MONOLITHIC
+@@ -341,6 +341,13 @@ if MONOLITHIC
  endif
  endif
  
index 3cc8dae6ea0c308611a881a19bc4d7a5205d7043..cc21d48d17354930b1e89596a72bc5efe54acba2 100644 (file)
@@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=stubby
 PKG_VERSION:=0.2.3
-PKG_RELEASE:=1
+PKG_RELEASE:=3
 
 PKG_LICENSE:=BSD-3-Clause
 PKG_LICENSE_FILES:=COPYING
@@ -29,12 +29,6 @@ define Package/stubby/Default
        URL:=https://dnsprivacy.org/wiki/display/DP/DNS+Privacy+Daemon+-+Stubby
 endef
 
-define Package/stubby/description
-       This package contains the Stubby daemon (which utilizes the getdns library).
-
-       See https://github.com/openwrt/packages/blob/master/net/stubby/files/README.md for more details.
-endef
-
 define Package/stubby
        $(call Package/stubby/Default)
        SECTION:=net
@@ -42,7 +36,17 @@ define Package/stubby
        SUBMENU:=IP Addresses and Names
        TITLE+= - (daemon that uses getdns)
        USERID:=stubby=410:stubby=410
-       DEPENDS:= +libyaml +getdns
+       DEPENDS:= +libyaml +getdns +ca-certificates
+endef
+
+define Package/stubby/description
+       This package contains the Stubby daemon (which utilizes the getdns library).
+
+       See https://github.com/openwrt/packages/blob/master/net/stubby/files/README.md for more details.
+endef
+
+define Package/stubby/conffiles
+/etc/stubby/stubby.yml
 endef
 
 define Package/stubby/install
@@ -53,11 +57,14 @@ define Package/stubby/install
        $(INSTALL_DIR) $(1)/etc/stubby
        $(INSTALL_DATA) $(PKG_INSTALL_DIR)/etc/stubby/stubby.yml $(1)/etc/stubby/stubby.yml.default
        $(INSTALL_DATA) ./files/stubby.yml $(1)/etc/stubby/stubby.yml
+       $(INSTALL_DIR) $(1)/etc/config
+       $(INSTALL_DATA) ./files/stubby.conf $(1)/etc/config/stubby
 endef
 
 
 define Package/stubby/conffiles
        /etc/stubby/stubby.yml
+       /etc/config/stubby
 endef
 
 $(eval $(call BuildPackage,stubby))
index 14b7bbf92a040a6bb169d8578527816173347cb3..cb40b5ea5739867cc3bc494cb76e5ceb9f30d3a5 100644 (file)
 # Stubby for OpenWRT
 
 ## Stubby Description
-[Stubby](https://dnsprivacy.org/wiki/display/DP/DNS+Privacy+Daemon+-+Stubby) is an application that acts as a local DNS Privacy stub resolver (using DNS-over-TLS). Stubby encrypts DNS queries sent from a client machine (desktop or laptop) to a DNS Privacy resolver increasing end user privacy.
+
+[Stubby](https://dnsprivacy.org/wiki/display/DP/DNS+Privacy+Daemon+-+Stubby) is
+an application that acts as a local DNS Privacy stub resolver (using
+DNS-over-TLS). Stubby encrypts DNS queries sent from a client machine to a DNS
+Privacy resolver increasing end user privacy.
+
+Stubby is useful on an OpenWRT device, because it can sit between the usual DNS
+resolver (dnsmasq by default) and the upstream DNS resolver and be used to
+ensure that DNS traffic is encrypted between the OpenWRT device and the
+resolver.
 
 Stubby is developed by the [getdns](http://getdnsapi.net/) project.
 
-For more background and FAQ see our [About Stubby](https://dnsprivacy.org/wiki/display/DP/About+Stubby) page. Stubby is in the early stages of development but is suitable for technical/advanced users. A more generally user-friendly version is on the way!
+For more background and FAQ see the [About
+Stubby](https://dnsprivacy.org/wiki/display/DP/About+Stubby) page.
+
+
+## Installation
+
+Installation of this package can be achieved at the command line using `opkg
+install stubby`, or via the LUCI Web Interface. Installing the stubby package
+will also install the required dependency packages, including the
+`ca-certificates` package.
+
+## Configuration
+
+The default configuration of the package has been chosen to ensure that stubby
+should work after installation.
+
+By default, configuration of stubby is integrated with the OpenWRT UCI system
+using the file `/etc/config/stubby`. The configuration options available are
+also documented in that file. If for some reason you wish to configure stubby
+using the `/etc/stubby/stubby.yml` file, then you simply need to set `option
+manual '1'` in `/etc/config/stubby` and all other settings in
+`/etc/config/stubby` will be ignored.
+
+### Stubby port and addresses
+
+The default configuration ensures that stubby listens on port 5453 on the
+loopback interfaces for IPv4 and IPv6. As such, by default, stubby will respond
+only to lookups from the OpenWRT device itself.
+
+By setting the listening ports to non-standard values, this allows users to keep
+the main name server daemon in place (dnsmasq/unbound/etc.) and have that name
+server forward to stubby.
+
+### Upstream resolvers
+
+The default package configuration uses the CloudFlare resolvers, configured for
+both IPv4 and IPv6. 
+
+CloudFlare have not published SPKI pinsets, and even though they are available,
+they have made no commitment to maintaining them. Using the currently known SPKI
+pinsets for CloudFlare brings the risk that in the future they may be changed by
+CloudFlare, and DNS would stop working. The default configuration has those SPKI
+entries commented out for this reason.
+
+[CloudFlare's privacy
+statement](https://developers.cloudflare.com/1.1.1.1/commitment-to-privacy/)
+details how they treat data from DNS requests.
+
+More resolvers are available in the [upstream stubby example
+configuration](https://github.com/getdnsapi/stubby/blob/develop/stubby.yml.example)
+and the [DNS Privacy
+list](https://dnsprivacy.org/wiki/display/DP/DNS+Privacy+Test+Servers).
+
+## Integration of stubby with dnsmasq
+
+The recommended way to use stubby on an OpenWRT device is to integrate it with a
+caching resolver. The default caching resolver in OpenWRT is dnsmasq.
+
+### Set dnsmasq to send DNS requests to stubby
+
+Since dnsmasq responds to LAN DNS requests on port 53 of the OpenWRT device by
+default, all that is required is to have dnsmasq forward those requests to
+stubby which is listening on port 5453 of the OpenWRT device. To achieve this,
+we need to set the `server` option in the dnsmasq configuration in the
+`/etc/config/dhcp` file to `'127.0.0.1#5453'`. We also need to tell dnsmasq not
+to use resolvers found in `/etc/resolv.conf` by setting the dnsmasq option
+`noresolv` to `1` in the same file. This can be achieved by editing the
+`/etc/config/dhcp` file directly or executing the following commands at the
+command line:
+
+    uci add_list dhcp.@dnsmasq[-1].server='127.0.0.1#5453'
+    uci dhcp.@dnsmasq[-1].noresolv=1
+    uci commit
+
+The same outcome can be achieved in the LUCI web interface as follows:
+
+1. Select the Network->DHCP and DNS menu entry.
+2. In the "General Settings" tab, enter the address `127.0.0.1#5453` as the only
+   entry in the "DNS Forwardings" dialogue.
+3. In the "Resolv and Host files" tab tick the "Ignore resolve file" checkbox.
+
+### Disable sending DNS requests to ISP provided DNS servers
+
+The configuration changes in the previous section ensure that DNS queries are
+sent over TLS encrypted connections *once dnsmasq and stubby are started*. When
+the OpenWRT device is first brought up, there is a possibility that DNS queries
+can go to ISP provided DNS servers ahead of dnsmasq and stubby being active. In
+order to mitigate this leakage, it's necessary to ensure that upstream resolvers
+aren't available, and the only DNS resolver used by the system is
+dnsmasq+stubby. 
+
+This requires setting the option `peerdns` to `0` and the option `dns` to the
+loopback address for both the `wan` and `wan6` interfaces in the
+`/etc/config/network` file. This can be achieved by editing the
+`/etc/config/network` file directly, or by executing the following commands:
+
+    uci set network.wan.peerdns='0'
+    uci set network.wan.dns='127.0.0.1'
+    uci set network.wan6.peerdns='0'
+    uci set network.wan6.dns='0::1'
+    uci commit
+
+The same outcome can also be achieved using the LUCI web interface as follows:
+
+1. Select the Network->Interfaces menu entry.
+2. Click on Edit for the WAN interfaces.
+3. Choose the Advanced Settings tab.
+4. Unselect the "Use DNS servers advertised by peer" checkbox
+5. Enter `127.0.0.1` in the "Use custom DNS servers" dialogue box.
+6. Repeat the above steps for the WAN6 interface, but use the address `0::1`
+   instead of `127.0.0.1`.
+   
+### Enabling DNSSEC
+
+The configuration described above ensures that DNS queries are executed over TLS
+encrypted links. However, the responses themselves are not validated; DNSSEC
+provides the ability to validate returned DNS responses, and mitigate against
+DNS poisoning risks.
+
+With the combination of stubby+dnsmasq there are two possible ways to enable
+DNSSEC:
+
+1. Configure stubby to perform DNSSEC validation, and configure dnsmasq to proxy
+   the DNSSEC data to clients.
+2. Configure stubby not to perform DNSSEC validation and configure dnsmasq to
+   require DNSSEC validation.
+
+Either option achieves the same outcome, and there appears to be little reason
+for choosing one over the other other than that the second option is easier to
+configure in the LUCI web interface. Both options are detailed below, and both
+require that the `dnsmasq` package on the OpenWRT device is replaced with the
+`dnsmasq-full` package. That can be achieved by running the following command:
+
+    opkg install dnsmasq-full --download-only && opkg remove dnsmasq && opkg install dnsmasq-full --cache . && rm *.ipk
+
+#### DNSSEC by stubby
+
+Configuring stubby to perform DNSSEC validation requires setting the stubby
+configuration option `dnssec_return_status` to `'1'` in `/etc/config/stubby`,
+which can be done by editing the file directly or by executing the commands:
+
+    uci set stubby.global.dnssec_return_status=1
+    uci commit
+    
+With stubby performing DNSSEC validation, dnsmasq needs to be configured to
+proxy the DNSSEC data to clients. This requires setting the option `proxydnssec`
+to 1 in the dnsmasq configuration in `/etc/config/dhcp`. That can be achieved by
+the following commands:
+
+    uci set dhcp.@dnsmasq[-1].proxydnssec=1
+    uci commit
+
+#### DNSSEC by dnsmasq
+
+Configuring dnsmasq to perform DNSSEC validation requires setting the dnsmasq
+option `dnssec` to `1` in the `/etc/config/dhcp` file. In addition, it is
+advisable to also set the dnsmasq option `dnsseccheckunsigned` to `1`. this can
+be achieved by editing the file `/etc/config/dhcp` or by executing the following
+commands:
+
+    uci set dhcp.@dnsmasq[-1].dnssec=1
+    uci set dhcp.@dnsmasq[-1].dnsseccheckunsigned=1
+    uci commit
+
+The same options can be set in the LUCI web interface as follows:
+
+1. Select the "Network->DHCP and DNS" menu entry.
+2. Select the "Advanced Settings" tab.
+3. Ensure both the "DNSSEC" and "DNSSEC check unsigned" check boxes are ticked.
+
+#### Validating DNSSEC operation
+
+Having configured DNSSEC validation using one of the two approaches above, it's
+important to check it's actually working. The following command can be used:
+
+    dig dnssectest.sidn.nl +dnssec +multi @192.168.1.1
+    
+This command should return output like the following:
+
+    ; <<>> DiG 9.11.4-P1-RedHat-9.11.4-5.P1.fc28 <<>> dnssectest.sidn.nl +dnssec +multi @192.168.1.1
+    ;; global options: +cmd
+    ;; Got answer:
+    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26579
+    ;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
+
+    ;; OPT PSEUDOSECTION:
+    ; EDNS: version: 0, flags: do; udp: 512
+    ;; QUESTION SECTION:
+    ;dnssectest.sidn.nl.       IN A
+
+    ;; ANSWER SECTION:
+    dnssectest.sidn.nl.        14399 IN A 213.136.9.12
+    dnssectest.sidn.nl.        14399 IN RRSIG A 8 3 14400 (
+                               20181104071058 20181005071058 42033 sidn.nl.
+                               YAQl3tef36M9EQUOmCneHKCCkxox3csLpfUOql5i/6ND
+                               zPrQFsNr3g32HPoxOsi+hD2BE5+bEsnARayDSVLyx0qU
+                               6Hpi2rzQ0zGNZZkCJhCsdp3wnM1BWlMgPrCD0iIsJDok
+                               +DH5zu+yYufVUdSLQrMqA3MZDFUIqDUqSZuYDF4= )
+
+    ;; Query time: 77 msec
+    ;; SERVER: 192.168.1.1#53(192.168.1.1)
+    ;; WHEN: Sat Oct 06 20:36:25 BST 2018
+    ;; MSG SIZE  rcvd: 230
+
+The key thing to note is the `flags: qr rd ra ad` part - the `ad` flag signifies
+that DNSSEC validation is working. If that flag is absent DNSSEC validation is
+not working.
+
+## Appendix: stubby configuration options
+
+This section details the options available for use in the `/etc/config/stubby`
+file. The `global` configuration section specifies the configuration parameters
+for the stubby daemon. One or more `resolver` sections are used to configure
+upstream resolvers for the stubby daemon to use.
+
+### `global` section options
+
+#### `option manual`
+
+Specify whether to use this file to configure the stubby service. If this is set
+to `'1'` stubby will be configured using the file `/etc/stubby/stubby.yml`. If this
+is set to `'0'`, configuration options will be taken from this file, and the service
+will be managed through UCI.
+
+#### `option trigger`
+
+This specifies an interface to trigger stubby start up on; stubby startup will
+be triggered by a procd signal associated with this interface being ready. If
+this interface is restarted, stubby will also be restarted. 
+
+This option can also be set to `'timed'`, in which case a time, specified by the
+option `triggerdelay`, will be waited before starting stubby.
+
+
+#### `option triggerdelay`
+
+If the `trigger` option specifies an interface, this option sets the time that
+is waited after the procd signal is received before starting stubby. 
+
+If `trigger` is set to `'timed'` then this is the delay before starting stubby.
+This option is specified in seconds and defaults to the value `'2'`.
+
+#### `list dns_transport`
+
+The `dns_transport` list specifies the allowed transports. Allowed values are:
+`GETDNS_TRANSPORT_UDP`, `GETDNS_TRANSPORT_TCP` and `GETDNS_TRANSPORT_TLS`. The
+transports are tried in the order listed.
+
+#### `option tls_authentication`
+
+This option specifies whether TLS authentication is mandatory. A value of `'1'`
+mandates TLS authentication, and is the default.
+
+If this is set to `'0'`, and `GETDNS_TRANSPORT_TCP` or `GETDNS_TRANSPORT_UDP`
+appears in the `dns_transport` list, stubby is allowed to fall back to non-TLS
+authenticated lookups. You probably don't want this though.
+
+#### `option tls_query_padding_blocksize`
+
+This option specifies the block size to pad DNS queries to. You shouldn't need
+to set this to anything but `'128'` (the default), as recommended by
+https://tools.ietf.org/html/draft-ietf-dprive-padding-policy-03
+
+#### `option tls_connection_retries`
+
+This option specifies the number of connection failures stubby permits before
+Stubby backs-off from using an individual upstream resolver. You shouldn't need
+to change this from the default value of `'2'`.
+
+#### `option tls_backoff_time`
+
+This option specifies the maximum time in seconds Stubby will back-off from
+using an individual upstream after failures. You shouldn't need to change this
+from the default value of `'3600'`.
+
+#### `option timeout`
+
+This option specifies the timeout on getting a response to an individual
+request. This is specified in milliseconds. You shouldn't need to change this
+from the default value of ` '5000'`.
+
+#### `option dnssec_return_status`
+
+This option specifies whether stubby should require DNSSEC validation. Specify
+to `'1'` to turn on validation, and `'0'` to turn it off. By default it is off.
+
+#### `option appdata_dir`
+
+This option specifies the location for storing stubby runtime data. In
+particular, if DNSSEC is turned on, stubby will store its automatically
+retrieved trust anchor data here. The default value is `'/var/lib/stubby'`.
+
+#### `option dnssec_trust_anchors`
+
+This option sets the location of the file containing the trust anchor data used
+for DNSSEC validation. If this is not specified, stubby will automatically
+retrieve a trust anchor at startup. It's unlikely you'll want to manage the
+trust anchor data manually, so in most cases this is not needed. By default,
+this is unset.
+
+#### `option edns_client_subnet_private`
+
+This option specifies whether to enforce ECS client privacy. The default is
+`'1'`. Set to `'0'` to disable client privacy.
+
+For more details see Section 7.1.2 [here](https://tools.ietf.org/html/rfc7871).
+
+#### `option idle_timeout`
+
+This option specifies the time (in milliseconds) to hold TLS connections open to
+avoid the overhead of opening a new connection for every query. You should not
+normally need to change this from the default value (currently `'10000'`).
+
+See [here](https://tools.ietf.org/html/rfc7828) for more details.
+
+#### `option round_robin_upstreams`
 
-## Prerequisites
+This option specifies how stubby will use the upstream DNS resolvers. Set to
+`'1'` (the default) to instruct stubby to distribute queries across all
+available name servers - this will use multiple simultaneous connections which
+can give better performance in most (but not all) cases. Set to `'0'` to treat
+the upstream resolvers as an ordered list and use a single upstream resolver
+until it becomes unavailable, then use the next one.
 
-You must have a ca cert bundle installed on your device for stubby to make the TLS enabled connections.
+#### `list listen_address`
 
-- You can install this by running the following: opkg install ca-certificates
-- You can also install this through the LUCI web interface
+This list sets the addresses and ports for the stubby daemon to listen for
+requests on. the default configuration configures stubby to listen on port 5453
+on the loopback interface for both IPv4 and IPv6.
 
-## Package Overview
-This package has some modifications that makes it differ from the default upstream configuration. They are outlined below.
+#### `option log_level`
 
-### General Cleanup
-Comments are removed, etc.
+If set, this option specifies the level of logging from the stubby
+daemon. By default, this option is not set.
 
-### EDNS Client-Subnet Option Changed to 0
-The value of "edns_client_subnet_private" is '1' in the upstream default config. This informs the upstream resolver to NOT forward your connection's IP to any other upstream servers. This is good for privacy, but could result in sub-optimal routing to CDNs, etc.
+The possible levels are:
 
-To give a more "comparable" DNS experience similar to google/opendns, this package disables this option.
+    '0': EMERG  - System is unusable
+    '1': ALERT  - Action must be taken immediately
+    '2': CRIT   - Critical conditions
+    '3': ERROR  - Error conditions
+    '4': WARN   - Warning conditions
+    '5': NOTICE - Normal, but significant, condition
+    '6': INFO   - Informational message
+    '7': DEBUG  - Debug-level message
 
-### Default Listening Ports Changed
-The value of "listen_addresses" in the default config does not list port numbers, which will cause stubby to default to port 53. However, Openwrt defaults to dnsmasq as the main name server daemon, which runs on port 53. By setting the listening ports to non-standard values, this allows users to keep the main name server daemon in place (dnsmasq/unbound/etc.) and have that name server forward to stubby.
+#### `option command_line_arguments`
 
-Additionally, due to the slight overhead involved with DNS-over-TLS, it is recommended to have a caching name server on the network.
+This option specifies additional command line arguments for
+stubby daemon. By default, this is an empty string.
+       
+### `resolver` section options
 
-### Round Robin Upstream Setting Changed
+#### `option address`
 
-The default stubby config list multiple upstream resolvers, and because of this, it makes sense to "load balance" between them. However, in this package's default stubby config, the only upstream service listed is Cloudflare. One entry is for ipv6 and one for ipv4.
+This option specifies the resolver IP address, and can either be an IPv4 or an
+IPv6 address.
 
-By setting the "round_robin_upstreams" value to 0, we are simply forcing stubby to try and use ipv6 connectivity to Cloudflare first, and if not available, simply use the ipv4 service.
+#### `option tls_auth_name`
 
-Cloudflare is an Anycast DNS service. This should take care of any needed "failover" in the event that one of Cloudflare's nodes goes down.
+This option specifies the upstream domain name used for TLS authentication with
+the supplied server certificate
 
-### Upstream Resolvers Changed
+#### `list spki`
 
-Most of the default resolvers for stubby are in Europe. To provide a better experience for a larger number of users, this package defaults to using Cloudflare's DNS service. Cloudflare's DNS service has been ranked number one in speed against many other top resolvers.
+This list specifies the SPKI pinset which is verified against the keys in the
+server cerrtificate. The values takes the form `'<digest type>/value>'`, where
+the `digest type` is the hashing algorithm used, and the value is the Base64
+encoded hash of the public key. At present, only `sha256` is
+supported for the digest type.
 
-https://developers.Cloudflare.com/1.1.1.1/commitment-to-privacy/
-https://www.dnsperf.com/dns-resolver/1-1-1-1
\ No newline at end of file
+This should ONLY be used if the upstream resolver has committed to maintaining
+the pinset. CloudFlare have made no such commitment, and so we do not specify
+the SPKI values in the default configuration, even though they are available.
diff --git a/net/stubby/files/stubby.conf b/net/stubby/files/stubby.conf
new file mode 100644 (file)
index 0000000..a4eed15
--- /dev/null
@@ -0,0 +1,41 @@
+config stubby 'global'
+       option manual '0'
+       option trigger 'wan'
+       # option triggerdelay '2'
+       list dns_transport 'GETDNS_TRANSPORT_TLS'
+       option tls_authentication '1'
+       option tls_query_padding_blocksize '128'
+       # option tls_connection_retries '2'
+       # option tls_backoff_time '3600'
+       # option timeout '5000'
+       # option dnssec_return_status '0'
+       option appdata_dir '/var/lib/stubby'
+       # option dnssec_trust_anchors '/var/lib/stubby/getdns-root.key'
+       option edns_client_subnet_private '1'
+       option idle_timeout '10000'
+       option round_robin_upstreams '1'
+       list listen_address '127.0.0.1@5453'
+       list listen_address '0::1@5453'
+       # option log_level '7'
+       # option command_line_arguments ''
+
+# Upstream resolvers are specified using 'resolver' sections.
+config resolver
+       option address '2606:4700:4700::1111'
+       option tls_auth_name 'cloudflare-dns.com'
+       # list spki 'sha256/yioEpqeR4WtDwE9YxNVnCEkTxIjx6EEIwFSQW+lJsbc='
+
+config resolver
+       option address '2606:4700:4700::1001'
+       option tls_auth_name 'cloudflare-dns.com'
+       # list spki 'sha256/yioEpqeR4WtDwE9YxNVnCEkTxIjx6EEIwFSQW+lJsbc='
+
+config resolver
+       option address '1.1.1.1'
+       option tls_auth_name 'cloudflare-dns.com'
+       # list spki 'sha256/yioEpqeR4WtDwE9YxNVnCEkTxIjx6EEIwFSQW+lJsbc='
+
+config resolver
+       option address '1.0.0.1'
+       option tls_auth_name 'cloudflare-dns.com'
+       # list spki 'sha256/yioEpqeR4WtDwE9YxNVnCEkTxIjx6EEIwFSQW+lJsbc='
old mode 100644 (file)
new mode 100755 (executable)
index 1f2ce16..af75770
@@ -5,21 +5,212 @@ USE_PROCD=1
 START=50
 STOP=51
 
-PROG=/usr/sbin/stubby
+PROG="/usr/sbin/stubby"
+
+stubby="/usr/sbin/stubby"
+stubby_init="/etc/init.d/stubby"
+stubby_config_dir="/var/etc/stubby"
+stubby_config="$stubby_config_dir/stubby.yml"
+stubby_pid_file="/var/run/stubby.pid"
+stubby_manual_config="/etc/stubby/stubby.yml"
+
+boot()
+{
+    stubby_boot=1
+    rc_procd start_service
+}
+
+generate_config()
+{
+    local config_file="$1"
+    local round_robin
+    local tls_authentication
+    local tls_query_padding_blocksize
+    local edns_client_subnet_private
+    local idle_timeout
+    local appdata_dir
+    local tls_connection_retries
+    local tls_backoff_time
+    local timeout
+    local dnssec_return_status
+    local dnssec_trust_anchors
+    local listen_addresses_section=0
+    local dns_transport_list_section=0
+    local upstream_recursive_servers_section=0
+    local stubby_args
+    local command_line_arguments
+    local log_level
+
+    # Generate configuration. See: https://github.com/getdnsapi/stubby/blob/develop/stubby.yml.example
+    echo "# Autogenerated configuration from uci data" > "$config_file"
+    echo "resolution_type: GETDNS_RESOLUTION_STUB" >> "$config_file"
+
+    config_get round_robin "global" round_robin_upstreams "1"
+    echo "round_robin_upstreams: $round_robin" >> "$config_file"
+
+    config_get appdata_dir "global" appdata_dir "/var/lib/stubby"
+    echo "appdata_dir: \"$appdata_dir\"" >> "$config_file"
+
+    config_get tls_connection_retries "global" tls_connection_retries ""
+    if [ -n "$tls_connection_retries" ]; then
+        echo "tls_connection_retries: $tls_connection_retries" >> "$config_file"
+    fi
+
+    config_get tls_backoff_time "global" tls_backoff_time ""
+    if [ -n "$tls_backoff_time" ]; then
+        echo "tls_backoff_time: $tls_backoff_time" >> "$config_file"
+    fi
+
+    config_get timeout "global" timeout ""
+    if [ -n "$timeout" ]; then
+        echo "timeout: $timeout" >> "$config_file"
+    fi
+
+    config_get_bool tls_authentication "global" tls_authentication "1"
+    if [ "$tls_authentication" = "1" ]; then
+        echo "tls_authentication: GETDNS_AUTHENTICATION_REQUIRED" >> "$config_file"
+    else
+        echo "tls_authentication: GETDNS_AUTHENTICATION_NONE" >> "$config_file"
+    fi
+
+    config_get_bool dnssec_return_status "global" dnssec_return_status "0"
+    if [ "$dnssec_return_status" = "1" ]; then
+        echo "dnssec_return_status: GETDNS_EXTENSION_TRUE" >> "$config_file"
+    fi
+
+    config_get dnssec_trust_anchors "global" dnssec_trust_anchors ""
+    if [ -n "$dnssec_trust_anchors" ]; then
+        echo "dnssec_trust_anchors: \"$dnssec_trust_anchors\"" >> "$config_file"
+    fi
+
+    config_get tls_query_padding_blocksize "global" tls_query_padding_blocksize "128"
+    echo "tls_query_padding_blocksize: $tls_query_padding_blocksize" >> "$config_file"
+
+    config_get_bool edns_client_subnet_private "global" edns_client_subnet_private "1"
+    echo "edns_client_subnet_private: $edns_client_subnet_private" >> "$config_file"
+
+    config_get idle_timeout "global" idle_timeout "10000"
+    echo "idle_timeout: $idle_timeout" >> "$config_file"
+
+    handle_listen_address_value()
+    {
+        local value="$1"
+
+        if [ "$listen_addresses_section" = 0 ]; then
+            echo "listen_addresses:" >> "$config_file"
+            listen_addresses_section=1
+        fi
+        echo "  - $value" >> "$config_file"
+    }
+    config_list_foreach "global" listen_address handle_listen_address_value
+
+    handle_dns_transport_list_value()
+    {
+        local value="$1"
+
+        if [ "$dns_transport_list_section" = 0 ]; then
+            echo "dns_transport_list:" >> "$config_file"
+            dns_transport_list_section=1
+        fi
+        echo "  - $value" >> "$config_file"
+    }
+    config_list_foreach "global" dns_transport handle_dns_transport_list_value
+
+    handle_resolver()
+    {
+        local config=$1
+        local address
+        local tls_auth_name
+        local spki
+        local tls_pubkey_pinset_section=0
+
+        if [ "$upstream_recursive_servers_section" = 0 ]; then
+            echo "upstream_recursive_servers:" >> "$config_file"
+            upstream_recursive_servers_section=1
+        fi
+        config_get address "$config" address
+        config_get tls_auth_name "$config" tls_auth_name
+        echo "  - address_data: $address" >> "$config_file"
+        echo "    tls_auth_name: \"$tls_auth_name\"" >> "$config_file"
+
+        handle_resolver_spki()
+        {
+            local val="$1"
+            local digest="${val%/*}"
+            local value="${val#*/}"
+
+            if [ "$tls_pubkey_pinset_section" = 0 ]; then
+                echo "    tls_pubkey_pinset:" >> "$config_file"
+                tls_pubkey_pinset_section=1
+            fi
+            echo "      - digest: \"$digest\"" >> "$config_file"
+            echo "        value: $value" >> "$config_file"
+        }
+        config_list_foreach "$config" spki handle_resolver_spki
+    }
+
+    config_foreach handle_resolver resolver
+}
 
 start_service() {
-  procd_open_instance stubby
-  procd_set_param command /usr/sbin/stubby
+    local config_file_tmp
+    local manual
+    local log_level
+    local command_line_arguments
+    local stubby_args
+
+    mkdir -p "$stubby_config_dir"
+
+    config_load "stubby"
 
-  procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-5}
+    config_get_bool manual "global" manual "0"
 
-  procd_set_param limits core="unlimited"
+    if [ "$manual" = "1" ]; then
+        cp "$stubby_manual_config" "$stubby_config"
+    else
+        config_file_tmp="$stubby_config.$$"
+        generate_config "$config_file_tmp"
+        mv "$config_file_tmp" "$stubby_config"
+    fi
 
-  procd_set_param file /etc/stubby/stubby.yml
+    stubby_args=""
+    config_get command_line_arguments "global" command_line_arguments ""
+    if [ -n "$command_line_arguments" ]; then
+        stubby_args="$command_line_arguments"
+    fi
 
-  procd_set_param stdout 1
-  procd_set_param stderr 1
-  procd_set_param user stubby
-  procd_close_instance
+    config_get log_level "global" log_level ""
+    if [ -n "$log_level" ]; then
+        stubby_args="$stubby_args -v$log_level"
+    fi
+
+    if [ $("${stubby_init}" enabled; printf "%u" ${?}) -eq 0 ]; then
+        if [ -n "${stubby_boot}" ]; then
+            local trigger="$(uci_get stubby global trigger)"
+            if [ "${trigger}" != "timed" ]; then
+                return 0
+            fi
+        fi
+        procd_open_instance "stubby"
+        procd_set_param command "$stubby" "$stubby_args" -C "$stubby_config"
+        procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-5}
+        procd_set_param file "$stubby_config"
+        procd_set_param stdout 1
+        procd_set_param stderr 1
+        procd_set_param pidfile "$stubby_pid_file"
+        procd_set_param user stubby
+        procd_close_instance
+    fi
 }
 
+service_triggers()
+{
+    local trigger="$(uci_get stubby global trigger)"
+    local delay="$(uci_get stubby global triggerdelay "2")"
+
+    if [ "${trigger}" != "none" ] && [ "${trigger}" != "timed" ]; then
+        PROCD_RELOAD_DELAY=$((${delay:-2} * 1000))
+        procd_add_interface_trigger "interface.*.up" "${trigger}" "${stubby_init}" start
+    fi
+    procd_add_reload_trigger "stubby"
+}
index 278fa2ee3fb9fa8f1ac7a0196cc8638e011f8b11..655352deb2b4fbeee35c5bd5d82cad771fb4927e 100644 (file)
@@ -1,39 +1,25 @@
-#NOTE: See '/etc/stubby/stubby.yml.default' for original config file and descriptions
-
+# Note: by default on OpenWRT stubby configuration is handled via
+# the UCI system and the file /etc/config/stubby. If you want to
+# use this file to configure stubby, then set "option manual '1'"
+# in /etc/config/stubby.
 resolution_type: GETDNS_RESOLUTION_STUB
-
-dns_transport_list:
-  - GETDNS_TRANSPORT_TLS
-
+round_robin_upstreams: 1
+appdata_dir: "/var/lib/stubby"
 tls_authentication: GETDNS_AUTHENTICATION_REQUIRED
-
 tls_query_padding_blocksize: 128
-
-edns_client_subnet_private : 0
-
-round_robin_upstreams: 0
-
+edns_client_subnet_private: 1
 idle_timeout: 10000
-
 listen_addresses:
   - 127.0.0.1@5453
-  -  0::1@5453
-
+  - 0::1@5453
+dns_transport_list:
+  - GETDNS_TRANSPORT_TLS
 upstream_recursive_servers:
-# IPv6 addresses
-# # Cloudflare IPv6
   - address_data: 2606:4700:4700::1111
     tls_auth_name: "cloudflare-dns.com"
-
-# # Quad 9 IPv6
-#  - address_data: 2620:fe::10
-#    tls_auth_name: "dns.quad9.net"
-
-# IPv4 addresses
-# # Cloudflare servers
+  - address_data: 2606:4700:4700::1111
+    tls_auth_name: "cloudflare-dns.com"
   - address_data: 1.1.1.1
     tls_auth_name: "cloudflare-dns.com"
-
-# Quad 9 service
-#  - address_data: 9.9.9.10
-#    tls_auth_name: "dns.quad9.net"
+  - address_data: 1.0.0.1
+    tls_auth_name: "cloudflare-dns.com"
index e23bd9210610915f732329fe806a727ef4e08af7..35ce8585f8613e7d338c4adb91400ebbeb2d9892 100644 (file)
@@ -8,8 +8,8 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=stunnel
-PKG_VERSION:=5.44
-PKG_RELEASE:=4
+PKG_VERSION:=5.48
+PKG_RELEASE:=1
 
 PKG_LICENSE:=GPL-2.0+
 PKG_MAINTAINER:=Florian Eckert <fe@dev.tdt.de>
@@ -18,9 +18,11 @@ PKG_LICENSE_FILES:=COPYING COPYRIGHT.GPL
 PKG_SOURCE_URL:= \
        http://ftp.nluug.nl/pub/networking/stunnel/ \
        http://www.usenix.org.uk/mirrors/stunnel/ \
-       https://www.stunnel.org/downloads/
+       https://www.stunnel.org/downloads/ \
+       https://www.usenix.org.uk/mirrors/stunnel/archive/$(word 1, $(subst .,$(space),$(PKG_VERSION))).x/
+
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_HASH:=990a325dbb47d77d88772dd02fbbd27d91b1fea3ece76c9ff4461eca93f12299
+PKG_HASH:=1011d5a302ce6a227882d094282993a3187250f42f8a801dcc1620da63b2b8df
 
 PKG_FIXUP:=autoreconf
 PKG_FIXUP:=patch-libtool
index 3a79d5a13d04956d0636b3ffe31a79166ac7fe23..acc4fa2ee28da29548e113ca25d327b3e65bd175 100644 (file)
@@ -11,12 +11,12 @@ PKG_LICENSE:=ASL-2.0
 PKG_MAINTAINER:=Mislav Novakovic <mislav.novakovic@sartura.hr>
 
 PKG_NAME:=sysrepo
-PKG_VERSION:=0.7.4
+PKG_VERSION:=0.7.5
 PKG_RELEASE:=3
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://codeload.github.com/sysrepo/sysrepo/tar.gz/v$(PKG_VERSION)?
-PKG_HASH:=238456bbb18149fd0fa5ebc9acb3c6e3129474c796db7447c2a95dcd40ab3084
+PKG_HASH:=3ef20e1e005fd22f13d1996231ccfc72241f3f76c5700397ad59dda0f9b29f72
 
 CMAKE_INSTALL:=1
 
@@ -40,7 +40,7 @@ define Package/libsysrepo
   CATEGORY:=Utilities
   URL:=$(PKG_SOURCE_URL)
   TITLE:=YANG-based data store library
-  DEPENDS:=+libyang +libprotobuf-c +libev +libredblack +librt +SYSREPO_BINDINGS:libstdcpp +SYSREPO_PYTHON:python-base +SYSREPO_LUA:lua
+  DEPENDS:=+libyang +libprotobuf-c +libev +libredblack +librt +libpthread +SYSREPO_BINDINGS:libstdcpp +SYSREPO_PYTHON:python-base +SYSREPO_LUA:lua
   MENU:=1
 endef
 
@@ -90,7 +90,8 @@ CMAKE_OPTIONS += \
        -DOPER_DATA_PROVIDE_TIMEOUT=4 \
        -DNOTIF_AGE_TIMEOUT=120 \
        -DNOTIF_TIME_WINDOW=20 \
-       -DUSE_SR_MEM_MGMT=0
+       -DUSE_SR_MEM_MGMT=0 \
+       -DFILE_FORMAT_EXT:STRING=xml
 
 ifeq ($(CONFIG_SYSREPO_LUA),y)
 CMAKE_OPTIONS += \
@@ -108,7 +109,8 @@ ifeq ($(CONFIG_SYSREPO_BINDINGS),y)
 CMAKE_OPTIONS += \
        -DCMAKE_DISABLE_FIND_PACKAGE_SWIG=FALSE \
        -DGEN_LANGUAGE_BINDINGS:BOOL=TRUE \
-       -DSWIG_DIR=$(STAGING_DIR)/host/share/swig
+       -DSWIG_DIR=$(STAGING_DIR)/host/share/swig \
+       -DCALL_TARGET_BINS_DIRECTLY=OFF
 endif
 
 define Package/libsysrepo/install
@@ -121,7 +123,7 @@ define Package/libsysrepo/install
        $(INSTALL_CONF) $(PKG_BUILD_DIR)/yang/sysrepo-persistent-data.yang $(1)/etc/sysrepo/yang/internal
 
        $(INSTALL_DIR) $(1)/etc/sysrepo/yang
-       $(INSTALL_DATA) $(PKG_BUILD_DIR)/yang/ietf-netconf-acm@2012-02-22.yang $(1)/etc/sysrepo/yang/ietf-netconf-acm@2012-02-22.yang
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/yang/ietf-netconf-acm@2018-02-14.yang $(1)/etc/sysrepo/yang/ietf-netconf-acm@2018-02-14.yang
        $(INSTALL_DATA) $(PKG_BUILD_DIR)/yang/ietf-netconf-notifications.yang $(1)/etc/sysrepo/yang/ietf-netconf-notifications@2012-02-06.yang
        $(INSTALL_DATA) $(PKG_BUILD_DIR)/yang/nc-notifications.yang $(1)/etc/sysrepo/yang/nc-notifications@2008-07-14.yang
        $(INSTALL_DATA) $(PKG_BUILD_DIR)/yang/notifications.yang $(1)/etc/sysrepo/yang/notifications@2008-07-14.yang
@@ -169,6 +171,17 @@ define Package/sysrepocfg/install
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/sysrepocfg $(1)/bin/
 endef
 
+define Build/InstallDev
+       $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libsysrepo.pc $(1)/usr/lib/pkgconfig/
+
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_BUILD_DIR)/src/libsysrepo.so* $(1)/usr/lib/
+
+       $(INSTALL_DIR) $(1)/usr/include
+       $(CP) $(PKG_BUILD_DIR)/inc/* $(1)/usr/include/
+endef
+
 $(eval $(call BuildPackage,libsysrepo))
 $(eval $(call BuildPackage,sysrepo))
 $(eval $(call BuildPackage,sysrepoctl))
index 274a6c06642b9762f6466cbb4c22bfd35959e095..6fd06ef8191c901f268cc54e637a1aa519f02069 100644 (file)
@@ -15,7 +15,7 @@ if [ -x /bin/sysrepoctl ]; then
 
        match=$(sysrepoctl -l | grep "ietf-netconf-acm ")
        if [ ! "$match" ]; then
-               sysrepoctl --install --yang=/etc/sysrepo/yang/ietf-netconf-acm@2012-02-22.yang -p 644
+               sysrepoctl --install --yang=/etc/sysrepo/yang/ietf-netconf-acm@2018-02-14.yang -p 644
        fi
 
        match=$(sysrepoctl -l | grep "ietf-netconf-notifications ")
index abfcd66cdcb8fc5ba6691b47d5eaf271575dcee8..a2599cbdb96bd90459ea879b623c3a4cc5ffda62 100644 (file)
@@ -4,12 +4,12 @@ START=60
 STOP=10
 
 USE_PROCD=1
-PROG_DEAMON=/bin/sysrepod
+PROG_DAEMON=/bin/sysrepod
 PROG_PLUGIN=/bin/sysrepo-plugind
 
 start_service() {
     procd_open_instance
-    procd_set_param command ${PROG_DEAMON}
+    procd_set_param command ${PROG_DAEMON}
     procd_append_param command -d -l 0
     procd_set_param respawn
     procd_close_instance
@@ -25,6 +25,6 @@ stop_service()
 {
     kill -9 `ps | grep netopeer2-server | grep -v grep | awk '{print $1}'` >/dev/null 2>&1
     service_stop ${PROG_PLUGIN}
-    service_stop ${PROG_DEAMON}
+    service_stop ${PROG_DAEMON}
     rm -rf /var/run/sysrepo-subscriptions/*
 }
diff --git a/net/sysrepo/patches/001-add-generated-protobufc-files b/net/sysrepo/patches/001-add-generated-protobufc-files
new file mode 100644 (file)
index 0000000..ec08c13
--- /dev/null
@@ -0,0 +1,14785 @@
+Index: sysrepo-0.7.5/src/common/sysrepo.pb-c.c
+===================================================================
+--- /dev/null
++++ sysrepo-0.7.5/src/common/sysrepo.pb-c.c
+@@ -0,0 +1,10537 @@
++/* Generated by the protocol buffer compiler.  DO NOT EDIT! */
++/* Generated from: sysrepo.proto */
++
++/* Do not generate deprecated warnings for self */
++#ifndef PROTOBUF_C__NO_DEPRECATED
++#define PROTOBUF_C__NO_DEPRECATED
++#endif
++
++#include "sysrepo.pb-c.h"
++void   sr__value__init
++                     (Sr__Value         *message)
++{
++  static Sr__Value init_value = SR__VALUE__INIT;
++  *message = init_value;
++}
++size_t sr__value__get_packed_size
++                     (const Sr__Value *message)
++{
++  assert(message->base.descriptor == &sr__value__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__value__pack
++                     (const Sr__Value *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__value__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__value__pack_to_buffer
++                     (const Sr__Value *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__value__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__Value *
++       sr__value__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__Value *)
++     protobuf_c_message_unpack (&sr__value__descriptor,
++                                allocator, len, data);
++}
++void   sr__value__free_unpacked
++                     (Sr__Value *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__value__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__node__init
++                     (Sr__Node         *message)
++{
++  static Sr__Node init_value = SR__NODE__INIT;
++  *message = init_value;
++}
++size_t sr__node__get_packed_size
++                     (const Sr__Node *message)
++{
++  assert(message->base.descriptor == &sr__node__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__node__pack
++                     (const Sr__Node *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__node__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__node__pack_to_buffer
++                     (const Sr__Node *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__node__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__Node *
++       sr__node__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__Node *)
++     protobuf_c_message_unpack (&sr__node__descriptor,
++                                allocator, len, data);
++}
++void   sr__node__free_unpacked
++                     (Sr__Node *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__node__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__error__init
++                     (Sr__Error         *message)
++{
++  static Sr__Error init_value = SR__ERROR__INIT;
++  *message = init_value;
++}
++size_t sr__error__get_packed_size
++                     (const Sr__Error *message)
++{
++  assert(message->base.descriptor == &sr__error__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__error__pack
++                     (const Sr__Error *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__error__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__error__pack_to_buffer
++                     (const Sr__Error *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__error__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__Error *
++       sr__error__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__Error *)
++     protobuf_c_message_unpack (&sr__error__descriptor,
++                                allocator, len, data);
++}
++void   sr__error__free_unpacked
++                     (Sr__Error *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__error__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__session_start_req__init
++                     (Sr__SessionStartReq         *message)
++{
++  static Sr__SessionStartReq init_value = SR__SESSION_START_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__session_start_req__get_packed_size
++                     (const Sr__SessionStartReq *message)
++{
++  assert(message->base.descriptor == &sr__session_start_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__session_start_req__pack
++                     (const Sr__SessionStartReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__session_start_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__session_start_req__pack_to_buffer
++                     (const Sr__SessionStartReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__session_start_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__SessionStartReq *
++       sr__session_start_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__SessionStartReq *)
++     protobuf_c_message_unpack (&sr__session_start_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__session_start_req__free_unpacked
++                     (Sr__SessionStartReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__session_start_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__session_start_resp__init
++                     (Sr__SessionStartResp         *message)
++{
++  static Sr__SessionStartResp init_value = SR__SESSION_START_RESP__INIT;
++  *message = init_value;
++}
++size_t sr__session_start_resp__get_packed_size
++                     (const Sr__SessionStartResp *message)
++{
++  assert(message->base.descriptor == &sr__session_start_resp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__session_start_resp__pack
++                     (const Sr__SessionStartResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__session_start_resp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__session_start_resp__pack_to_buffer
++                     (const Sr__SessionStartResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__session_start_resp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__SessionStartResp *
++       sr__session_start_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__SessionStartResp *)
++     protobuf_c_message_unpack (&sr__session_start_resp__descriptor,
++                                allocator, len, data);
++}
++void   sr__session_start_resp__free_unpacked
++                     (Sr__SessionStartResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__session_start_resp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__session_stop_req__init
++                     (Sr__SessionStopReq         *message)
++{
++  static Sr__SessionStopReq init_value = SR__SESSION_STOP_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__session_stop_req__get_packed_size
++                     (const Sr__SessionStopReq *message)
++{
++  assert(message->base.descriptor == &sr__session_stop_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__session_stop_req__pack
++                     (const Sr__SessionStopReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__session_stop_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__session_stop_req__pack_to_buffer
++                     (const Sr__SessionStopReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__session_stop_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__SessionStopReq *
++       sr__session_stop_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__SessionStopReq *)
++     protobuf_c_message_unpack (&sr__session_stop_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__session_stop_req__free_unpacked
++                     (Sr__SessionStopReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__session_stop_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__session_stop_resp__init
++                     (Sr__SessionStopResp         *message)
++{
++  static Sr__SessionStopResp init_value = SR__SESSION_STOP_RESP__INIT;
++  *message = init_value;
++}
++size_t sr__session_stop_resp__get_packed_size
++                     (const Sr__SessionStopResp *message)
++{
++  assert(message->base.descriptor == &sr__session_stop_resp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__session_stop_resp__pack
++                     (const Sr__SessionStopResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__session_stop_resp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__session_stop_resp__pack_to_buffer
++                     (const Sr__SessionStopResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__session_stop_resp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__SessionStopResp *
++       sr__session_stop_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__SessionStopResp *)
++     protobuf_c_message_unpack (&sr__session_stop_resp__descriptor,
++                                allocator, len, data);
++}
++void   sr__session_stop_resp__free_unpacked
++                     (Sr__SessionStopResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__session_stop_resp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__session_refresh_req__init
++                     (Sr__SessionRefreshReq         *message)
++{
++  static Sr__SessionRefreshReq init_value = SR__SESSION_REFRESH_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__session_refresh_req__get_packed_size
++                     (const Sr__SessionRefreshReq *message)
++{
++  assert(message->base.descriptor == &sr__session_refresh_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__session_refresh_req__pack
++                     (const Sr__SessionRefreshReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__session_refresh_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__session_refresh_req__pack_to_buffer
++                     (const Sr__SessionRefreshReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__session_refresh_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__SessionRefreshReq *
++       sr__session_refresh_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__SessionRefreshReq *)
++     protobuf_c_message_unpack (&sr__session_refresh_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__session_refresh_req__free_unpacked
++                     (Sr__SessionRefreshReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__session_refresh_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__session_refresh_resp__init
++                     (Sr__SessionRefreshResp         *message)
++{
++  static Sr__SessionRefreshResp init_value = SR__SESSION_REFRESH_RESP__INIT;
++  *message = init_value;
++}
++size_t sr__session_refresh_resp__get_packed_size
++                     (const Sr__SessionRefreshResp *message)
++{
++  assert(message->base.descriptor == &sr__session_refresh_resp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__session_refresh_resp__pack
++                     (const Sr__SessionRefreshResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__session_refresh_resp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__session_refresh_resp__pack_to_buffer
++                     (const Sr__SessionRefreshResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__session_refresh_resp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__SessionRefreshResp *
++       sr__session_refresh_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__SessionRefreshResp *)
++     protobuf_c_message_unpack (&sr__session_refresh_resp__descriptor,
++                                allocator, len, data);
++}
++void   sr__session_refresh_resp__free_unpacked
++                     (Sr__SessionRefreshResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__session_refresh_resp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__session_check_req__init
++                     (Sr__SessionCheckReq         *message)
++{
++  static Sr__SessionCheckReq init_value = SR__SESSION_CHECK_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__session_check_req__get_packed_size
++                     (const Sr__SessionCheckReq *message)
++{
++  assert(message->base.descriptor == &sr__session_check_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__session_check_req__pack
++                     (const Sr__SessionCheckReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__session_check_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__session_check_req__pack_to_buffer
++                     (const Sr__SessionCheckReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__session_check_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__SessionCheckReq *
++       sr__session_check_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__SessionCheckReq *)
++     protobuf_c_message_unpack (&sr__session_check_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__session_check_req__free_unpacked
++                     (Sr__SessionCheckReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__session_check_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__session_check_resp__init
++                     (Sr__SessionCheckResp         *message)
++{
++  static Sr__SessionCheckResp init_value = SR__SESSION_CHECK_RESP__INIT;
++  *message = init_value;
++}
++size_t sr__session_check_resp__get_packed_size
++                     (const Sr__SessionCheckResp *message)
++{
++  assert(message->base.descriptor == &sr__session_check_resp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__session_check_resp__pack
++                     (const Sr__SessionCheckResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__session_check_resp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__session_check_resp__pack_to_buffer
++                     (const Sr__SessionCheckResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__session_check_resp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__SessionCheckResp *
++       sr__session_check_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__SessionCheckResp *)
++     protobuf_c_message_unpack (&sr__session_check_resp__descriptor,
++                                allocator, len, data);
++}
++void   sr__session_check_resp__free_unpacked
++                     (Sr__SessionCheckResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__session_check_resp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__session_switch_ds_req__init
++                     (Sr__SessionSwitchDsReq         *message)
++{
++  static Sr__SessionSwitchDsReq init_value = SR__SESSION_SWITCH_DS_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__session_switch_ds_req__get_packed_size
++                     (const Sr__SessionSwitchDsReq *message)
++{
++  assert(message->base.descriptor == &sr__session_switch_ds_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__session_switch_ds_req__pack
++                     (const Sr__SessionSwitchDsReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__session_switch_ds_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__session_switch_ds_req__pack_to_buffer
++                     (const Sr__SessionSwitchDsReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__session_switch_ds_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__SessionSwitchDsReq *
++       sr__session_switch_ds_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__SessionSwitchDsReq *)
++     protobuf_c_message_unpack (&sr__session_switch_ds_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__session_switch_ds_req__free_unpacked
++                     (Sr__SessionSwitchDsReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__session_switch_ds_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__session_switch_ds_resp__init
++                     (Sr__SessionSwitchDsResp         *message)
++{
++  static Sr__SessionSwitchDsResp init_value = SR__SESSION_SWITCH_DS_RESP__INIT;
++  *message = init_value;
++}
++size_t sr__session_switch_ds_resp__get_packed_size
++                     (const Sr__SessionSwitchDsResp *message)
++{
++  assert(message->base.descriptor == &sr__session_switch_ds_resp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__session_switch_ds_resp__pack
++                     (const Sr__SessionSwitchDsResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__session_switch_ds_resp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__session_switch_ds_resp__pack_to_buffer
++                     (const Sr__SessionSwitchDsResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__session_switch_ds_resp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__SessionSwitchDsResp *
++       sr__session_switch_ds_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__SessionSwitchDsResp *)
++     protobuf_c_message_unpack (&sr__session_switch_ds_resp__descriptor,
++                                allocator, len, data);
++}
++void   sr__session_switch_ds_resp__free_unpacked
++                     (Sr__SessionSwitchDsResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__session_switch_ds_resp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__session_set_opts_req__init
++                     (Sr__SessionSetOptsReq         *message)
++{
++  static Sr__SessionSetOptsReq init_value = SR__SESSION_SET_OPTS_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__session_set_opts_req__get_packed_size
++                     (const Sr__SessionSetOptsReq *message)
++{
++  assert(message->base.descriptor == &sr__session_set_opts_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__session_set_opts_req__pack
++                     (const Sr__SessionSetOptsReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__session_set_opts_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__session_set_opts_req__pack_to_buffer
++                     (const Sr__SessionSetOptsReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__session_set_opts_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__SessionSetOptsReq *
++       sr__session_set_opts_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__SessionSetOptsReq *)
++     protobuf_c_message_unpack (&sr__session_set_opts_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__session_set_opts_req__free_unpacked
++                     (Sr__SessionSetOptsReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__session_set_opts_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__session_set_opts_resp__init
++                     (Sr__SessionSetOptsResp         *message)
++{
++  static Sr__SessionSetOptsResp init_value = SR__SESSION_SET_OPTS_RESP__INIT;
++  *message = init_value;
++}
++size_t sr__session_set_opts_resp__get_packed_size
++                     (const Sr__SessionSetOptsResp *message)
++{
++  assert(message->base.descriptor == &sr__session_set_opts_resp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__session_set_opts_resp__pack
++                     (const Sr__SessionSetOptsResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__session_set_opts_resp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__session_set_opts_resp__pack_to_buffer
++                     (const Sr__SessionSetOptsResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__session_set_opts_resp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__SessionSetOptsResp *
++       sr__session_set_opts_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__SessionSetOptsResp *)
++     protobuf_c_message_unpack (&sr__session_set_opts_resp__descriptor,
++                                allocator, len, data);
++}
++void   sr__session_set_opts_resp__free_unpacked
++                     (Sr__SessionSetOptsResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__session_set_opts_resp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__version_verify_req__init
++                     (Sr__VersionVerifyReq         *message)
++{
++  static Sr__VersionVerifyReq init_value = SR__VERSION_VERIFY_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__version_verify_req__get_packed_size
++                     (const Sr__VersionVerifyReq *message)
++{
++  assert(message->base.descriptor == &sr__version_verify_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__version_verify_req__pack
++                     (const Sr__VersionVerifyReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__version_verify_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__version_verify_req__pack_to_buffer
++                     (const Sr__VersionVerifyReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__version_verify_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__VersionVerifyReq *
++       sr__version_verify_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__VersionVerifyReq *)
++     protobuf_c_message_unpack (&sr__version_verify_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__version_verify_req__free_unpacked
++                     (Sr__VersionVerifyReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__version_verify_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__version_verify_resp__init
++                     (Sr__VersionVerifyResp         *message)
++{
++  static Sr__VersionVerifyResp init_value = SR__VERSION_VERIFY_RESP__INIT;
++  *message = init_value;
++}
++size_t sr__version_verify_resp__get_packed_size
++                     (const Sr__VersionVerifyResp *message)
++{
++  assert(message->base.descriptor == &sr__version_verify_resp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__version_verify_resp__pack
++                     (const Sr__VersionVerifyResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__version_verify_resp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__version_verify_resp__pack_to_buffer
++                     (const Sr__VersionVerifyResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__version_verify_resp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__VersionVerifyResp *
++       sr__version_verify_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__VersionVerifyResp *)
++     protobuf_c_message_unpack (&sr__version_verify_resp__descriptor,
++                                allocator, len, data);
++}
++void   sr__version_verify_resp__free_unpacked
++                     (Sr__VersionVerifyResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__version_verify_resp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__schema_revision__init
++                     (Sr__SchemaRevision         *message)
++{
++  static Sr__SchemaRevision init_value = SR__SCHEMA_REVISION__INIT;
++  *message = init_value;
++}
++size_t sr__schema_revision__get_packed_size
++                     (const Sr__SchemaRevision *message)
++{
++  assert(message->base.descriptor == &sr__schema_revision__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__schema_revision__pack
++                     (const Sr__SchemaRevision *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__schema_revision__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__schema_revision__pack_to_buffer
++                     (const Sr__SchemaRevision *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__schema_revision__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__SchemaRevision *
++       sr__schema_revision__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__SchemaRevision *)
++     protobuf_c_message_unpack (&sr__schema_revision__descriptor,
++                                allocator, len, data);
++}
++void   sr__schema_revision__free_unpacked
++                     (Sr__SchemaRevision *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__schema_revision__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__schema_submodule__init
++                     (Sr__SchemaSubmodule         *message)
++{
++  static Sr__SchemaSubmodule init_value = SR__SCHEMA_SUBMODULE__INIT;
++  *message = init_value;
++}
++size_t sr__schema_submodule__get_packed_size
++                     (const Sr__SchemaSubmodule *message)
++{
++  assert(message->base.descriptor == &sr__schema_submodule__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__schema_submodule__pack
++                     (const Sr__SchemaSubmodule *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__schema_submodule__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__schema_submodule__pack_to_buffer
++                     (const Sr__SchemaSubmodule *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__schema_submodule__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__SchemaSubmodule *
++       sr__schema_submodule__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__SchemaSubmodule *)
++     protobuf_c_message_unpack (&sr__schema_submodule__descriptor,
++                                allocator, len, data);
++}
++void   sr__schema_submodule__free_unpacked
++                     (Sr__SchemaSubmodule *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__schema_submodule__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__schema__init
++                     (Sr__Schema         *message)
++{
++  static Sr__Schema init_value = SR__SCHEMA__INIT;
++  *message = init_value;
++}
++size_t sr__schema__get_packed_size
++                     (const Sr__Schema *message)
++{
++  assert(message->base.descriptor == &sr__schema__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__schema__pack
++                     (const Sr__Schema *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__schema__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__schema__pack_to_buffer
++                     (const Sr__Schema *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__schema__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__Schema *
++       sr__schema__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__Schema *)
++     protobuf_c_message_unpack (&sr__schema__descriptor,
++                                allocator, len, data);
++}
++void   sr__schema__free_unpacked
++                     (Sr__Schema *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__schema__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__list_schemas_req__init
++                     (Sr__ListSchemasReq         *message)
++{
++  static Sr__ListSchemasReq init_value = SR__LIST_SCHEMAS_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__list_schemas_req__get_packed_size
++                     (const Sr__ListSchemasReq *message)
++{
++  assert(message->base.descriptor == &sr__list_schemas_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__list_schemas_req__pack
++                     (const Sr__ListSchemasReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__list_schemas_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__list_schemas_req__pack_to_buffer
++                     (const Sr__ListSchemasReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__list_schemas_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__ListSchemasReq *
++       sr__list_schemas_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__ListSchemasReq *)
++     protobuf_c_message_unpack (&sr__list_schemas_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__list_schemas_req__free_unpacked
++                     (Sr__ListSchemasReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__list_schemas_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__list_schemas_resp__init
++                     (Sr__ListSchemasResp         *message)
++{
++  static Sr__ListSchemasResp init_value = SR__LIST_SCHEMAS_RESP__INIT;
++  *message = init_value;
++}
++size_t sr__list_schemas_resp__get_packed_size
++                     (const Sr__ListSchemasResp *message)
++{
++  assert(message->base.descriptor == &sr__list_schemas_resp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__list_schemas_resp__pack
++                     (const Sr__ListSchemasResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__list_schemas_resp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__list_schemas_resp__pack_to_buffer
++                     (const Sr__ListSchemasResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__list_schemas_resp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__ListSchemasResp *
++       sr__list_schemas_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__ListSchemasResp *)
++     protobuf_c_message_unpack (&sr__list_schemas_resp__descriptor,
++                                allocator, len, data);
++}
++void   sr__list_schemas_resp__free_unpacked
++                     (Sr__ListSchemasResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__list_schemas_resp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__get_schema_req__init
++                     (Sr__GetSchemaReq         *message)
++{
++  static Sr__GetSchemaReq init_value = SR__GET_SCHEMA_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__get_schema_req__get_packed_size
++                     (const Sr__GetSchemaReq *message)
++{
++  assert(message->base.descriptor == &sr__get_schema_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__get_schema_req__pack
++                     (const Sr__GetSchemaReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__get_schema_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__get_schema_req__pack_to_buffer
++                     (const Sr__GetSchemaReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__get_schema_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__GetSchemaReq *
++       sr__get_schema_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__GetSchemaReq *)
++     protobuf_c_message_unpack (&sr__get_schema_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__get_schema_req__free_unpacked
++                     (Sr__GetSchemaReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__get_schema_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__get_schema_resp__init
++                     (Sr__GetSchemaResp         *message)
++{
++  static Sr__GetSchemaResp init_value = SR__GET_SCHEMA_RESP__INIT;
++  *message = init_value;
++}
++size_t sr__get_schema_resp__get_packed_size
++                     (const Sr__GetSchemaResp *message)
++{
++  assert(message->base.descriptor == &sr__get_schema_resp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__get_schema_resp__pack
++                     (const Sr__GetSchemaResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__get_schema_resp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__get_schema_resp__pack_to_buffer
++                     (const Sr__GetSchemaResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__get_schema_resp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__GetSchemaResp *
++       sr__get_schema_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__GetSchemaResp *)
++     protobuf_c_message_unpack (&sr__get_schema_resp__descriptor,
++                                allocator, len, data);
++}
++void   sr__get_schema_resp__free_unpacked
++                     (Sr__GetSchemaResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__get_schema_resp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__get_item_req__init
++                     (Sr__GetItemReq         *message)
++{
++  static Sr__GetItemReq init_value = SR__GET_ITEM_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__get_item_req__get_packed_size
++                     (const Sr__GetItemReq *message)
++{
++  assert(message->base.descriptor == &sr__get_item_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__get_item_req__pack
++                     (const Sr__GetItemReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__get_item_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__get_item_req__pack_to_buffer
++                     (const Sr__GetItemReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__get_item_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__GetItemReq *
++       sr__get_item_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__GetItemReq *)
++     protobuf_c_message_unpack (&sr__get_item_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__get_item_req__free_unpacked
++                     (Sr__GetItemReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__get_item_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__get_item_resp__init
++                     (Sr__GetItemResp         *message)
++{
++  static Sr__GetItemResp init_value = SR__GET_ITEM_RESP__INIT;
++  *message = init_value;
++}
++size_t sr__get_item_resp__get_packed_size
++                     (const Sr__GetItemResp *message)
++{
++  assert(message->base.descriptor == &sr__get_item_resp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__get_item_resp__pack
++                     (const Sr__GetItemResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__get_item_resp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__get_item_resp__pack_to_buffer
++                     (const Sr__GetItemResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__get_item_resp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__GetItemResp *
++       sr__get_item_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__GetItemResp *)
++     protobuf_c_message_unpack (&sr__get_item_resp__descriptor,
++                                allocator, len, data);
++}
++void   sr__get_item_resp__free_unpacked
++                     (Sr__GetItemResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__get_item_resp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__get_items_req__init
++                     (Sr__GetItemsReq         *message)
++{
++  static Sr__GetItemsReq init_value = SR__GET_ITEMS_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__get_items_req__get_packed_size
++                     (const Sr__GetItemsReq *message)
++{
++  assert(message->base.descriptor == &sr__get_items_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__get_items_req__pack
++                     (const Sr__GetItemsReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__get_items_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__get_items_req__pack_to_buffer
++                     (const Sr__GetItemsReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__get_items_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__GetItemsReq *
++       sr__get_items_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__GetItemsReq *)
++     protobuf_c_message_unpack (&sr__get_items_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__get_items_req__free_unpacked
++                     (Sr__GetItemsReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__get_items_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__get_items_resp__init
++                     (Sr__GetItemsResp         *message)
++{
++  static Sr__GetItemsResp init_value = SR__GET_ITEMS_RESP__INIT;
++  *message = init_value;
++}
++size_t sr__get_items_resp__get_packed_size
++                     (const Sr__GetItemsResp *message)
++{
++  assert(message->base.descriptor == &sr__get_items_resp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__get_items_resp__pack
++                     (const Sr__GetItemsResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__get_items_resp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__get_items_resp__pack_to_buffer
++                     (const Sr__GetItemsResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__get_items_resp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__GetItemsResp *
++       sr__get_items_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__GetItemsResp *)
++     protobuf_c_message_unpack (&sr__get_items_resp__descriptor,
++                                allocator, len, data);
++}
++void   sr__get_items_resp__free_unpacked
++                     (Sr__GetItemsResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__get_items_resp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__get_subtree_req__init
++                     (Sr__GetSubtreeReq         *message)
++{
++  static Sr__GetSubtreeReq init_value = SR__GET_SUBTREE_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__get_subtree_req__get_packed_size
++                     (const Sr__GetSubtreeReq *message)
++{
++  assert(message->base.descriptor == &sr__get_subtree_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__get_subtree_req__pack
++                     (const Sr__GetSubtreeReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__get_subtree_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__get_subtree_req__pack_to_buffer
++                     (const Sr__GetSubtreeReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__get_subtree_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__GetSubtreeReq *
++       sr__get_subtree_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__GetSubtreeReq *)
++     protobuf_c_message_unpack (&sr__get_subtree_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__get_subtree_req__free_unpacked
++                     (Sr__GetSubtreeReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__get_subtree_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__get_subtree_resp__init
++                     (Sr__GetSubtreeResp         *message)
++{
++  static Sr__GetSubtreeResp init_value = SR__GET_SUBTREE_RESP__INIT;
++  *message = init_value;
++}
++size_t sr__get_subtree_resp__get_packed_size
++                     (const Sr__GetSubtreeResp *message)
++{
++  assert(message->base.descriptor == &sr__get_subtree_resp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__get_subtree_resp__pack
++                     (const Sr__GetSubtreeResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__get_subtree_resp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__get_subtree_resp__pack_to_buffer
++                     (const Sr__GetSubtreeResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__get_subtree_resp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__GetSubtreeResp *
++       sr__get_subtree_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__GetSubtreeResp *)
++     protobuf_c_message_unpack (&sr__get_subtree_resp__descriptor,
++                                allocator, len, data);
++}
++void   sr__get_subtree_resp__free_unpacked
++                     (Sr__GetSubtreeResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__get_subtree_resp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__get_subtrees_req__init
++                     (Sr__GetSubtreesReq         *message)
++{
++  static Sr__GetSubtreesReq init_value = SR__GET_SUBTREES_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__get_subtrees_req__get_packed_size
++                     (const Sr__GetSubtreesReq *message)
++{
++  assert(message->base.descriptor == &sr__get_subtrees_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__get_subtrees_req__pack
++                     (const Sr__GetSubtreesReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__get_subtrees_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__get_subtrees_req__pack_to_buffer
++                     (const Sr__GetSubtreesReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__get_subtrees_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__GetSubtreesReq *
++       sr__get_subtrees_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__GetSubtreesReq *)
++     protobuf_c_message_unpack (&sr__get_subtrees_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__get_subtrees_req__free_unpacked
++                     (Sr__GetSubtreesReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__get_subtrees_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__get_subtrees_resp__init
++                     (Sr__GetSubtreesResp         *message)
++{
++  static Sr__GetSubtreesResp init_value = SR__GET_SUBTREES_RESP__INIT;
++  *message = init_value;
++}
++size_t sr__get_subtrees_resp__get_packed_size
++                     (const Sr__GetSubtreesResp *message)
++{
++  assert(message->base.descriptor == &sr__get_subtrees_resp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__get_subtrees_resp__pack
++                     (const Sr__GetSubtreesResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__get_subtrees_resp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__get_subtrees_resp__pack_to_buffer
++                     (const Sr__GetSubtreesResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__get_subtrees_resp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__GetSubtreesResp *
++       sr__get_subtrees_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__GetSubtreesResp *)
++     protobuf_c_message_unpack (&sr__get_subtrees_resp__descriptor,
++                                allocator, len, data);
++}
++void   sr__get_subtrees_resp__free_unpacked
++                     (Sr__GetSubtreesResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__get_subtrees_resp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__get_subtree_chunk_req__init
++                     (Sr__GetSubtreeChunkReq         *message)
++{
++  static Sr__GetSubtreeChunkReq init_value = SR__GET_SUBTREE_CHUNK_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__get_subtree_chunk_req__get_packed_size
++                     (const Sr__GetSubtreeChunkReq *message)
++{
++  assert(message->base.descriptor == &sr__get_subtree_chunk_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__get_subtree_chunk_req__pack
++                     (const Sr__GetSubtreeChunkReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__get_subtree_chunk_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__get_subtree_chunk_req__pack_to_buffer
++                     (const Sr__GetSubtreeChunkReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__get_subtree_chunk_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__GetSubtreeChunkReq *
++       sr__get_subtree_chunk_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__GetSubtreeChunkReq *)
++     protobuf_c_message_unpack (&sr__get_subtree_chunk_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__get_subtree_chunk_req__free_unpacked
++                     (Sr__GetSubtreeChunkReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__get_subtree_chunk_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__get_subtree_chunk_resp__init
++                     (Sr__GetSubtreeChunkResp         *message)
++{
++  static Sr__GetSubtreeChunkResp init_value = SR__GET_SUBTREE_CHUNK_RESP__INIT;
++  *message = init_value;
++}
++size_t sr__get_subtree_chunk_resp__get_packed_size
++                     (const Sr__GetSubtreeChunkResp *message)
++{
++  assert(message->base.descriptor == &sr__get_subtree_chunk_resp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__get_subtree_chunk_resp__pack
++                     (const Sr__GetSubtreeChunkResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__get_subtree_chunk_resp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__get_subtree_chunk_resp__pack_to_buffer
++                     (const Sr__GetSubtreeChunkResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__get_subtree_chunk_resp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__GetSubtreeChunkResp *
++       sr__get_subtree_chunk_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__GetSubtreeChunkResp *)
++     protobuf_c_message_unpack (&sr__get_subtree_chunk_resp__descriptor,
++                                allocator, len, data);
++}
++void   sr__get_subtree_chunk_resp__free_unpacked
++                     (Sr__GetSubtreeChunkResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__get_subtree_chunk_resp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__set_item_req__init
++                     (Sr__SetItemReq         *message)
++{
++  static Sr__SetItemReq init_value = SR__SET_ITEM_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__set_item_req__get_packed_size
++                     (const Sr__SetItemReq *message)
++{
++  assert(message->base.descriptor == &sr__set_item_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__set_item_req__pack
++                     (const Sr__SetItemReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__set_item_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__set_item_req__pack_to_buffer
++                     (const Sr__SetItemReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__set_item_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__SetItemReq *
++       sr__set_item_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__SetItemReq *)
++     protobuf_c_message_unpack (&sr__set_item_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__set_item_req__free_unpacked
++                     (Sr__SetItemReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__set_item_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__set_item_resp__init
++                     (Sr__SetItemResp         *message)
++{
++  static Sr__SetItemResp init_value = SR__SET_ITEM_RESP__INIT;
++  *message = init_value;
++}
++size_t sr__set_item_resp__get_packed_size
++                     (const Sr__SetItemResp *message)
++{
++  assert(message->base.descriptor == &sr__set_item_resp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__set_item_resp__pack
++                     (const Sr__SetItemResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__set_item_resp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__set_item_resp__pack_to_buffer
++                     (const Sr__SetItemResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__set_item_resp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__SetItemResp *
++       sr__set_item_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__SetItemResp *)
++     protobuf_c_message_unpack (&sr__set_item_resp__descriptor,
++                                allocator, len, data);
++}
++void   sr__set_item_resp__free_unpacked
++                     (Sr__SetItemResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__set_item_resp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__set_item_str_req__init
++                     (Sr__SetItemStrReq         *message)
++{
++  static Sr__SetItemStrReq init_value = SR__SET_ITEM_STR_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__set_item_str_req__get_packed_size
++                     (const Sr__SetItemStrReq *message)
++{
++  assert(message->base.descriptor == &sr__set_item_str_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__set_item_str_req__pack
++                     (const Sr__SetItemStrReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__set_item_str_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__set_item_str_req__pack_to_buffer
++                     (const Sr__SetItemStrReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__set_item_str_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__SetItemStrReq *
++       sr__set_item_str_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__SetItemStrReq *)
++     protobuf_c_message_unpack (&sr__set_item_str_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__set_item_str_req__free_unpacked
++                     (Sr__SetItemStrReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__set_item_str_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__set_item_str_resp__init
++                     (Sr__SetItemStrResp         *message)
++{
++  static Sr__SetItemStrResp init_value = SR__SET_ITEM_STR_RESP__INIT;
++  *message = init_value;
++}
++size_t sr__set_item_str_resp__get_packed_size
++                     (const Sr__SetItemStrResp *message)
++{
++  assert(message->base.descriptor == &sr__set_item_str_resp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__set_item_str_resp__pack
++                     (const Sr__SetItemStrResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__set_item_str_resp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__set_item_str_resp__pack_to_buffer
++                     (const Sr__SetItemStrResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__set_item_str_resp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__SetItemStrResp *
++       sr__set_item_str_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__SetItemStrResp *)
++     protobuf_c_message_unpack (&sr__set_item_str_resp__descriptor,
++                                allocator, len, data);
++}
++void   sr__set_item_str_resp__free_unpacked
++                     (Sr__SetItemStrResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__set_item_str_resp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__delete_item_req__init
++                     (Sr__DeleteItemReq         *message)
++{
++  static Sr__DeleteItemReq init_value = SR__DELETE_ITEM_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__delete_item_req__get_packed_size
++                     (const Sr__DeleteItemReq *message)
++{
++  assert(message->base.descriptor == &sr__delete_item_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__delete_item_req__pack
++                     (const Sr__DeleteItemReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__delete_item_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__delete_item_req__pack_to_buffer
++                     (const Sr__DeleteItemReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__delete_item_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__DeleteItemReq *
++       sr__delete_item_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__DeleteItemReq *)
++     protobuf_c_message_unpack (&sr__delete_item_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__delete_item_req__free_unpacked
++                     (Sr__DeleteItemReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__delete_item_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__delete_item_resp__init
++                     (Sr__DeleteItemResp         *message)
++{
++  static Sr__DeleteItemResp init_value = SR__DELETE_ITEM_RESP__INIT;
++  *message = init_value;
++}
++size_t sr__delete_item_resp__get_packed_size
++                     (const Sr__DeleteItemResp *message)
++{
++  assert(message->base.descriptor == &sr__delete_item_resp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__delete_item_resp__pack
++                     (const Sr__DeleteItemResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__delete_item_resp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__delete_item_resp__pack_to_buffer
++                     (const Sr__DeleteItemResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__delete_item_resp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__DeleteItemResp *
++       sr__delete_item_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__DeleteItemResp *)
++     protobuf_c_message_unpack (&sr__delete_item_resp__descriptor,
++                                allocator, len, data);
++}
++void   sr__delete_item_resp__free_unpacked
++                     (Sr__DeleteItemResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__delete_item_resp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__move_item_req__init
++                     (Sr__MoveItemReq         *message)
++{
++  static Sr__MoveItemReq init_value = SR__MOVE_ITEM_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__move_item_req__get_packed_size
++                     (const Sr__MoveItemReq *message)
++{
++  assert(message->base.descriptor == &sr__move_item_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__move_item_req__pack
++                     (const Sr__MoveItemReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__move_item_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__move_item_req__pack_to_buffer
++                     (const Sr__MoveItemReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__move_item_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__MoveItemReq *
++       sr__move_item_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__MoveItemReq *)
++     protobuf_c_message_unpack (&sr__move_item_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__move_item_req__free_unpacked
++                     (Sr__MoveItemReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__move_item_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__move_item_resp__init
++                     (Sr__MoveItemResp         *message)
++{
++  static Sr__MoveItemResp init_value = SR__MOVE_ITEM_RESP__INIT;
++  *message = init_value;
++}
++size_t sr__move_item_resp__get_packed_size
++                     (const Sr__MoveItemResp *message)
++{
++  assert(message->base.descriptor == &sr__move_item_resp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__move_item_resp__pack
++                     (const Sr__MoveItemResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__move_item_resp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__move_item_resp__pack_to_buffer
++                     (const Sr__MoveItemResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__move_item_resp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__MoveItemResp *
++       sr__move_item_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__MoveItemResp *)
++     protobuf_c_message_unpack (&sr__move_item_resp__descriptor,
++                                allocator, len, data);
++}
++void   sr__move_item_resp__free_unpacked
++                     (Sr__MoveItemResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__move_item_resp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__validate_req__init
++                     (Sr__ValidateReq         *message)
++{
++  static Sr__ValidateReq init_value = SR__VALIDATE_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__validate_req__get_packed_size
++                     (const Sr__ValidateReq *message)
++{
++  assert(message->base.descriptor == &sr__validate_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__validate_req__pack
++                     (const Sr__ValidateReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__validate_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__validate_req__pack_to_buffer
++                     (const Sr__ValidateReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__validate_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__ValidateReq *
++       sr__validate_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__ValidateReq *)
++     protobuf_c_message_unpack (&sr__validate_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__validate_req__free_unpacked
++                     (Sr__ValidateReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__validate_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__validate_resp__init
++                     (Sr__ValidateResp         *message)
++{
++  static Sr__ValidateResp init_value = SR__VALIDATE_RESP__INIT;
++  *message = init_value;
++}
++size_t sr__validate_resp__get_packed_size
++                     (const Sr__ValidateResp *message)
++{
++  assert(message->base.descriptor == &sr__validate_resp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__validate_resp__pack
++                     (const Sr__ValidateResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__validate_resp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__validate_resp__pack_to_buffer
++                     (const Sr__ValidateResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__validate_resp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__ValidateResp *
++       sr__validate_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__ValidateResp *)
++     protobuf_c_message_unpack (&sr__validate_resp__descriptor,
++                                allocator, len, data);
++}
++void   sr__validate_resp__free_unpacked
++                     (Sr__ValidateResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__validate_resp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__commit_req__init
++                     (Sr__CommitReq         *message)
++{
++  static Sr__CommitReq init_value = SR__COMMIT_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__commit_req__get_packed_size
++                     (const Sr__CommitReq *message)
++{
++  assert(message->base.descriptor == &sr__commit_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__commit_req__pack
++                     (const Sr__CommitReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__commit_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__commit_req__pack_to_buffer
++                     (const Sr__CommitReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__commit_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__CommitReq *
++       sr__commit_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__CommitReq *)
++     protobuf_c_message_unpack (&sr__commit_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__commit_req__free_unpacked
++                     (Sr__CommitReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__commit_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__commit_resp__init
++                     (Sr__CommitResp         *message)
++{
++  static Sr__CommitResp init_value = SR__COMMIT_RESP__INIT;
++  *message = init_value;
++}
++size_t sr__commit_resp__get_packed_size
++                     (const Sr__CommitResp *message)
++{
++  assert(message->base.descriptor == &sr__commit_resp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__commit_resp__pack
++                     (const Sr__CommitResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__commit_resp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__commit_resp__pack_to_buffer
++                     (const Sr__CommitResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__commit_resp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__CommitResp *
++       sr__commit_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__CommitResp *)
++     protobuf_c_message_unpack (&sr__commit_resp__descriptor,
++                                allocator, len, data);
++}
++void   sr__commit_resp__free_unpacked
++                     (Sr__CommitResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__commit_resp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__discard_changes_req__init
++                     (Sr__DiscardChangesReq         *message)
++{
++  static Sr__DiscardChangesReq init_value = SR__DISCARD_CHANGES_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__discard_changes_req__get_packed_size
++                     (const Sr__DiscardChangesReq *message)
++{
++  assert(message->base.descriptor == &sr__discard_changes_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__discard_changes_req__pack
++                     (const Sr__DiscardChangesReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__discard_changes_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__discard_changes_req__pack_to_buffer
++                     (const Sr__DiscardChangesReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__discard_changes_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__DiscardChangesReq *
++       sr__discard_changes_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__DiscardChangesReq *)
++     protobuf_c_message_unpack (&sr__discard_changes_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__discard_changes_req__free_unpacked
++                     (Sr__DiscardChangesReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__discard_changes_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__discard_changes_resp__init
++                     (Sr__DiscardChangesResp         *message)
++{
++  static Sr__DiscardChangesResp init_value = SR__DISCARD_CHANGES_RESP__INIT;
++  *message = init_value;
++}
++size_t sr__discard_changes_resp__get_packed_size
++                     (const Sr__DiscardChangesResp *message)
++{
++  assert(message->base.descriptor == &sr__discard_changes_resp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__discard_changes_resp__pack
++                     (const Sr__DiscardChangesResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__discard_changes_resp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__discard_changes_resp__pack_to_buffer
++                     (const Sr__DiscardChangesResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__discard_changes_resp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__DiscardChangesResp *
++       sr__discard_changes_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__DiscardChangesResp *)
++     protobuf_c_message_unpack (&sr__discard_changes_resp__descriptor,
++                                allocator, len, data);
++}
++void   sr__discard_changes_resp__free_unpacked
++                     (Sr__DiscardChangesResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__discard_changes_resp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__copy_config_req__init
++                     (Sr__CopyConfigReq         *message)
++{
++  static Sr__CopyConfigReq init_value = SR__COPY_CONFIG_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__copy_config_req__get_packed_size
++                     (const Sr__CopyConfigReq *message)
++{
++  assert(message->base.descriptor == &sr__copy_config_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__copy_config_req__pack
++                     (const Sr__CopyConfigReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__copy_config_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__copy_config_req__pack_to_buffer
++                     (const Sr__CopyConfigReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__copy_config_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__CopyConfigReq *
++       sr__copy_config_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__CopyConfigReq *)
++     protobuf_c_message_unpack (&sr__copy_config_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__copy_config_req__free_unpacked
++                     (Sr__CopyConfigReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__copy_config_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__copy_config_resp__init
++                     (Sr__CopyConfigResp         *message)
++{
++  static Sr__CopyConfigResp init_value = SR__COPY_CONFIG_RESP__INIT;
++  *message = init_value;
++}
++size_t sr__copy_config_resp__get_packed_size
++                     (const Sr__CopyConfigResp *message)
++{
++  assert(message->base.descriptor == &sr__copy_config_resp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__copy_config_resp__pack
++                     (const Sr__CopyConfigResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__copy_config_resp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__copy_config_resp__pack_to_buffer
++                     (const Sr__CopyConfigResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__copy_config_resp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__CopyConfigResp *
++       sr__copy_config_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__CopyConfigResp *)
++     protobuf_c_message_unpack (&sr__copy_config_resp__descriptor,
++                                allocator, len, data);
++}
++void   sr__copy_config_resp__free_unpacked
++                     (Sr__CopyConfigResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__copy_config_resp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__lock_req__init
++                     (Sr__LockReq         *message)
++{
++  static Sr__LockReq init_value = SR__LOCK_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__lock_req__get_packed_size
++                     (const Sr__LockReq *message)
++{
++  assert(message->base.descriptor == &sr__lock_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__lock_req__pack
++                     (const Sr__LockReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__lock_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__lock_req__pack_to_buffer
++                     (const Sr__LockReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__lock_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__LockReq *
++       sr__lock_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__LockReq *)
++     protobuf_c_message_unpack (&sr__lock_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__lock_req__free_unpacked
++                     (Sr__LockReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__lock_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__lock_resp__init
++                     (Sr__LockResp         *message)
++{
++  static Sr__LockResp init_value = SR__LOCK_RESP__INIT;
++  *message = init_value;
++}
++size_t sr__lock_resp__get_packed_size
++                     (const Sr__LockResp *message)
++{
++  assert(message->base.descriptor == &sr__lock_resp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__lock_resp__pack
++                     (const Sr__LockResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__lock_resp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__lock_resp__pack_to_buffer
++                     (const Sr__LockResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__lock_resp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__LockResp *
++       sr__lock_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__LockResp *)
++     protobuf_c_message_unpack (&sr__lock_resp__descriptor,
++                                allocator, len, data);
++}
++void   sr__lock_resp__free_unpacked
++                     (Sr__LockResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__lock_resp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__unlock_req__init
++                     (Sr__UnlockReq         *message)
++{
++  static Sr__UnlockReq init_value = SR__UNLOCK_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__unlock_req__get_packed_size
++                     (const Sr__UnlockReq *message)
++{
++  assert(message->base.descriptor == &sr__unlock_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__unlock_req__pack
++                     (const Sr__UnlockReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__unlock_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__unlock_req__pack_to_buffer
++                     (const Sr__UnlockReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__unlock_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__UnlockReq *
++       sr__unlock_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__UnlockReq *)
++     protobuf_c_message_unpack (&sr__unlock_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__unlock_req__free_unpacked
++                     (Sr__UnlockReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__unlock_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__unlock_resp__init
++                     (Sr__UnlockResp         *message)
++{
++  static Sr__UnlockResp init_value = SR__UNLOCK_RESP__INIT;
++  *message = init_value;
++}
++size_t sr__unlock_resp__get_packed_size
++                     (const Sr__UnlockResp *message)
++{
++  assert(message->base.descriptor == &sr__unlock_resp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__unlock_resp__pack
++                     (const Sr__UnlockResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__unlock_resp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__unlock_resp__pack_to_buffer
++                     (const Sr__UnlockResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__unlock_resp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__UnlockResp *
++       sr__unlock_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__UnlockResp *)
++     protobuf_c_message_unpack (&sr__unlock_resp__descriptor,
++                                allocator, len, data);
++}
++void   sr__unlock_resp__free_unpacked
++                     (Sr__UnlockResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__unlock_resp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__subscribe_req__init
++                     (Sr__SubscribeReq         *message)
++{
++  static Sr__SubscribeReq init_value = SR__SUBSCRIBE_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__subscribe_req__get_packed_size
++                     (const Sr__SubscribeReq *message)
++{
++  assert(message->base.descriptor == &sr__subscribe_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__subscribe_req__pack
++                     (const Sr__SubscribeReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__subscribe_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__subscribe_req__pack_to_buffer
++                     (const Sr__SubscribeReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__subscribe_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__SubscribeReq *
++       sr__subscribe_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__SubscribeReq *)
++     protobuf_c_message_unpack (&sr__subscribe_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__subscribe_req__free_unpacked
++                     (Sr__SubscribeReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__subscribe_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__subscribe_resp__init
++                     (Sr__SubscribeResp         *message)
++{
++  static Sr__SubscribeResp init_value = SR__SUBSCRIBE_RESP__INIT;
++  *message = init_value;
++}
++size_t sr__subscribe_resp__get_packed_size
++                     (const Sr__SubscribeResp *message)
++{
++  assert(message->base.descriptor == &sr__subscribe_resp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__subscribe_resp__pack
++                     (const Sr__SubscribeResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__subscribe_resp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__subscribe_resp__pack_to_buffer
++                     (const Sr__SubscribeResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__subscribe_resp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__SubscribeResp *
++       sr__subscribe_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__SubscribeResp *)
++     protobuf_c_message_unpack (&sr__subscribe_resp__descriptor,
++                                allocator, len, data);
++}
++void   sr__subscribe_resp__free_unpacked
++                     (Sr__SubscribeResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__subscribe_resp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__unsubscribe_req__init
++                     (Sr__UnsubscribeReq         *message)
++{
++  static Sr__UnsubscribeReq init_value = SR__UNSUBSCRIBE_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__unsubscribe_req__get_packed_size
++                     (const Sr__UnsubscribeReq *message)
++{
++  assert(message->base.descriptor == &sr__unsubscribe_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__unsubscribe_req__pack
++                     (const Sr__UnsubscribeReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__unsubscribe_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__unsubscribe_req__pack_to_buffer
++                     (const Sr__UnsubscribeReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__unsubscribe_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__UnsubscribeReq *
++       sr__unsubscribe_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__UnsubscribeReq *)
++     protobuf_c_message_unpack (&sr__unsubscribe_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__unsubscribe_req__free_unpacked
++                     (Sr__UnsubscribeReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__unsubscribe_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__unsubscribe_resp__init
++                     (Sr__UnsubscribeResp         *message)
++{
++  static Sr__UnsubscribeResp init_value = SR__UNSUBSCRIBE_RESP__INIT;
++  *message = init_value;
++}
++size_t sr__unsubscribe_resp__get_packed_size
++                     (const Sr__UnsubscribeResp *message)
++{
++  assert(message->base.descriptor == &sr__unsubscribe_resp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__unsubscribe_resp__pack
++                     (const Sr__UnsubscribeResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__unsubscribe_resp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__unsubscribe_resp__pack_to_buffer
++                     (const Sr__UnsubscribeResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__unsubscribe_resp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__UnsubscribeResp *
++       sr__unsubscribe_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__UnsubscribeResp *)
++     protobuf_c_message_unpack (&sr__unsubscribe_resp__descriptor,
++                                allocator, len, data);
++}
++void   sr__unsubscribe_resp__free_unpacked
++                     (Sr__UnsubscribeResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__unsubscribe_resp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__check_enabled_running_req__init
++                     (Sr__CheckEnabledRunningReq         *message)
++{
++  static Sr__CheckEnabledRunningReq init_value = SR__CHECK_ENABLED_RUNNING_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__check_enabled_running_req__get_packed_size
++                     (const Sr__CheckEnabledRunningReq *message)
++{
++  assert(message->base.descriptor == &sr__check_enabled_running_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__check_enabled_running_req__pack
++                     (const Sr__CheckEnabledRunningReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__check_enabled_running_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__check_enabled_running_req__pack_to_buffer
++                     (const Sr__CheckEnabledRunningReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__check_enabled_running_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__CheckEnabledRunningReq *
++       sr__check_enabled_running_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__CheckEnabledRunningReq *)
++     protobuf_c_message_unpack (&sr__check_enabled_running_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__check_enabled_running_req__free_unpacked
++                     (Sr__CheckEnabledRunningReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__check_enabled_running_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__check_enabled_running_resp__init
++                     (Sr__CheckEnabledRunningResp         *message)
++{
++  static Sr__CheckEnabledRunningResp init_value = SR__CHECK_ENABLED_RUNNING_RESP__INIT;
++  *message = init_value;
++}
++size_t sr__check_enabled_running_resp__get_packed_size
++                     (const Sr__CheckEnabledRunningResp *message)
++{
++  assert(message->base.descriptor == &sr__check_enabled_running_resp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__check_enabled_running_resp__pack
++                     (const Sr__CheckEnabledRunningResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__check_enabled_running_resp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__check_enabled_running_resp__pack_to_buffer
++                     (const Sr__CheckEnabledRunningResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__check_enabled_running_resp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__CheckEnabledRunningResp *
++       sr__check_enabled_running_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__CheckEnabledRunningResp *)
++     protobuf_c_message_unpack (&sr__check_enabled_running_resp__descriptor,
++                                allocator, len, data);
++}
++void   sr__check_enabled_running_resp__free_unpacked
++                     (Sr__CheckEnabledRunningResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__check_enabled_running_resp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__module_install_notification__init
++                     (Sr__ModuleInstallNotification         *message)
++{
++  static Sr__ModuleInstallNotification init_value = SR__MODULE_INSTALL_NOTIFICATION__INIT;
++  *message = init_value;
++}
++size_t sr__module_install_notification__get_packed_size
++                     (const Sr__ModuleInstallNotification *message)
++{
++  assert(message->base.descriptor == &sr__module_install_notification__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__module_install_notification__pack
++                     (const Sr__ModuleInstallNotification *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__module_install_notification__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__module_install_notification__pack_to_buffer
++                     (const Sr__ModuleInstallNotification *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__module_install_notification__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__ModuleInstallNotification *
++       sr__module_install_notification__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__ModuleInstallNotification *)
++     protobuf_c_message_unpack (&sr__module_install_notification__descriptor,
++                                allocator, len, data);
++}
++void   sr__module_install_notification__free_unpacked
++                     (Sr__ModuleInstallNotification *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__module_install_notification__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__feature_enable_notification__init
++                     (Sr__FeatureEnableNotification         *message)
++{
++  static Sr__FeatureEnableNotification init_value = SR__FEATURE_ENABLE_NOTIFICATION__INIT;
++  *message = init_value;
++}
++size_t sr__feature_enable_notification__get_packed_size
++                     (const Sr__FeatureEnableNotification *message)
++{
++  assert(message->base.descriptor == &sr__feature_enable_notification__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__feature_enable_notification__pack
++                     (const Sr__FeatureEnableNotification *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__feature_enable_notification__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__feature_enable_notification__pack_to_buffer
++                     (const Sr__FeatureEnableNotification *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__feature_enable_notification__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__FeatureEnableNotification *
++       sr__feature_enable_notification__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__FeatureEnableNotification *)
++     protobuf_c_message_unpack (&sr__feature_enable_notification__descriptor,
++                                allocator, len, data);
++}
++void   sr__feature_enable_notification__free_unpacked
++                     (Sr__FeatureEnableNotification *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__feature_enable_notification__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__module_change_notification__init
++                     (Sr__ModuleChangeNotification         *message)
++{
++  static Sr__ModuleChangeNotification init_value = SR__MODULE_CHANGE_NOTIFICATION__INIT;
++  *message = init_value;
++}
++size_t sr__module_change_notification__get_packed_size
++                     (const Sr__ModuleChangeNotification *message)
++{
++  assert(message->base.descriptor == &sr__module_change_notification__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__module_change_notification__pack
++                     (const Sr__ModuleChangeNotification *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__module_change_notification__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__module_change_notification__pack_to_buffer
++                     (const Sr__ModuleChangeNotification *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__module_change_notification__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__ModuleChangeNotification *
++       sr__module_change_notification__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__ModuleChangeNotification *)
++     protobuf_c_message_unpack (&sr__module_change_notification__descriptor,
++                                allocator, len, data);
++}
++void   sr__module_change_notification__free_unpacked
++                     (Sr__ModuleChangeNotification *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__module_change_notification__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__subtree_change_notification__init
++                     (Sr__SubtreeChangeNotification         *message)
++{
++  static Sr__SubtreeChangeNotification init_value = SR__SUBTREE_CHANGE_NOTIFICATION__INIT;
++  *message = init_value;
++}
++size_t sr__subtree_change_notification__get_packed_size
++                     (const Sr__SubtreeChangeNotification *message)
++{
++  assert(message->base.descriptor == &sr__subtree_change_notification__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__subtree_change_notification__pack
++                     (const Sr__SubtreeChangeNotification *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__subtree_change_notification__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__subtree_change_notification__pack_to_buffer
++                     (const Sr__SubtreeChangeNotification *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__subtree_change_notification__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__SubtreeChangeNotification *
++       sr__subtree_change_notification__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__SubtreeChangeNotification *)
++     protobuf_c_message_unpack (&sr__subtree_change_notification__descriptor,
++                                allocator, len, data);
++}
++void   sr__subtree_change_notification__free_unpacked
++                     (Sr__SubtreeChangeNotification *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__subtree_change_notification__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__change__init
++                     (Sr__Change         *message)
++{
++  static Sr__Change init_value = SR__CHANGE__INIT;
++  *message = init_value;
++}
++size_t sr__change__get_packed_size
++                     (const Sr__Change *message)
++{
++  assert(message->base.descriptor == &sr__change__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__change__pack
++                     (const Sr__Change *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__change__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__change__pack_to_buffer
++                     (const Sr__Change *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__change__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__Change *
++       sr__change__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__Change *)
++     protobuf_c_message_unpack (&sr__change__descriptor,
++                                allocator, len, data);
++}
++void   sr__change__free_unpacked
++                     (Sr__Change *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__change__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__get_changes_req__init
++                     (Sr__GetChangesReq         *message)
++{
++  static Sr__GetChangesReq init_value = SR__GET_CHANGES_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__get_changes_req__get_packed_size
++                     (const Sr__GetChangesReq *message)
++{
++  assert(message->base.descriptor == &sr__get_changes_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__get_changes_req__pack
++                     (const Sr__GetChangesReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__get_changes_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__get_changes_req__pack_to_buffer
++                     (const Sr__GetChangesReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__get_changes_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__GetChangesReq *
++       sr__get_changes_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__GetChangesReq *)
++     protobuf_c_message_unpack (&sr__get_changes_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__get_changes_req__free_unpacked
++                     (Sr__GetChangesReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__get_changes_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__get_changes_resp__init
++                     (Sr__GetChangesResp         *message)
++{
++  static Sr__GetChangesResp init_value = SR__GET_CHANGES_RESP__INIT;
++  *message = init_value;
++}
++size_t sr__get_changes_resp__get_packed_size
++                     (const Sr__GetChangesResp *message)
++{
++  assert(message->base.descriptor == &sr__get_changes_resp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__get_changes_resp__pack
++                     (const Sr__GetChangesResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__get_changes_resp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__get_changes_resp__pack_to_buffer
++                     (const Sr__GetChangesResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__get_changes_resp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__GetChangesResp *
++       sr__get_changes_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__GetChangesResp *)
++     protobuf_c_message_unpack (&sr__get_changes_resp__descriptor,
++                                allocator, len, data);
++}
++void   sr__get_changes_resp__free_unpacked
++                     (Sr__GetChangesResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__get_changes_resp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__check_exec_perm_req__init
++                     (Sr__CheckExecPermReq         *message)
++{
++  static Sr__CheckExecPermReq init_value = SR__CHECK_EXEC_PERM_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__check_exec_perm_req__get_packed_size
++                     (const Sr__CheckExecPermReq *message)
++{
++  assert(message->base.descriptor == &sr__check_exec_perm_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__check_exec_perm_req__pack
++                     (const Sr__CheckExecPermReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__check_exec_perm_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__check_exec_perm_req__pack_to_buffer
++                     (const Sr__CheckExecPermReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__check_exec_perm_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__CheckExecPermReq *
++       sr__check_exec_perm_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__CheckExecPermReq *)
++     protobuf_c_message_unpack (&sr__check_exec_perm_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__check_exec_perm_req__free_unpacked
++                     (Sr__CheckExecPermReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__check_exec_perm_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__check_exec_perm_resp__init
++                     (Sr__CheckExecPermResp         *message)
++{
++  static Sr__CheckExecPermResp init_value = SR__CHECK_EXEC_PERM_RESP__INIT;
++  *message = init_value;
++}
++size_t sr__check_exec_perm_resp__get_packed_size
++                     (const Sr__CheckExecPermResp *message)
++{
++  assert(message->base.descriptor == &sr__check_exec_perm_resp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__check_exec_perm_resp__pack
++                     (const Sr__CheckExecPermResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__check_exec_perm_resp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__check_exec_perm_resp__pack_to_buffer
++                     (const Sr__CheckExecPermResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__check_exec_perm_resp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__CheckExecPermResp *
++       sr__check_exec_perm_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__CheckExecPermResp *)
++     protobuf_c_message_unpack (&sr__check_exec_perm_resp__descriptor,
++                                allocator, len, data);
++}
++void   sr__check_exec_perm_resp__free_unpacked
++                     (Sr__CheckExecPermResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__check_exec_perm_resp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__rpcreq__init
++                     (Sr__RPCReq         *message)
++{
++  static Sr__RPCReq init_value = SR__RPCREQ__INIT;
++  *message = init_value;
++}
++size_t sr__rpcreq__get_packed_size
++                     (const Sr__RPCReq *message)
++{
++  assert(message->base.descriptor == &sr__rpcreq__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__rpcreq__pack
++                     (const Sr__RPCReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__rpcreq__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__rpcreq__pack_to_buffer
++                     (const Sr__RPCReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__rpcreq__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__RPCReq *
++       sr__rpcreq__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__RPCReq *)
++     protobuf_c_message_unpack (&sr__rpcreq__descriptor,
++                                allocator, len, data);
++}
++void   sr__rpcreq__free_unpacked
++                     (Sr__RPCReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__rpcreq__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__rpcresp__init
++                     (Sr__RPCResp         *message)
++{
++  static Sr__RPCResp init_value = SR__RPCRESP__INIT;
++  *message = init_value;
++}
++size_t sr__rpcresp__get_packed_size
++                     (const Sr__RPCResp *message)
++{
++  assert(message->base.descriptor == &sr__rpcresp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__rpcresp__pack
++                     (const Sr__RPCResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__rpcresp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__rpcresp__pack_to_buffer
++                     (const Sr__RPCResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__rpcresp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__RPCResp *
++       sr__rpcresp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__RPCResp *)
++     protobuf_c_message_unpack (&sr__rpcresp__descriptor,
++                                allocator, len, data);
++}
++void   sr__rpcresp__free_unpacked
++                     (Sr__RPCResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__rpcresp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__event_notif_req__init
++                     (Sr__EventNotifReq         *message)
++{
++  static Sr__EventNotifReq init_value = SR__EVENT_NOTIF_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__event_notif_req__get_packed_size
++                     (const Sr__EventNotifReq *message)
++{
++  assert(message->base.descriptor == &sr__event_notif_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__event_notif_req__pack
++                     (const Sr__EventNotifReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__event_notif_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__event_notif_req__pack_to_buffer
++                     (const Sr__EventNotifReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__event_notif_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__EventNotifReq *
++       sr__event_notif_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__EventNotifReq *)
++     protobuf_c_message_unpack (&sr__event_notif_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__event_notif_req__free_unpacked
++                     (Sr__EventNotifReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__event_notif_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__event_notif_resp__init
++                     (Sr__EventNotifResp         *message)
++{
++  static Sr__EventNotifResp init_value = SR__EVENT_NOTIF_RESP__INIT;
++  *message = init_value;
++}
++size_t sr__event_notif_resp__get_packed_size
++                     (const Sr__EventNotifResp *message)
++{
++  assert(message->base.descriptor == &sr__event_notif_resp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__event_notif_resp__pack
++                     (const Sr__EventNotifResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__event_notif_resp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__event_notif_resp__pack_to_buffer
++                     (const Sr__EventNotifResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__event_notif_resp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__EventNotifResp *
++       sr__event_notif_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__EventNotifResp *)
++     protobuf_c_message_unpack (&sr__event_notif_resp__descriptor,
++                                allocator, len, data);
++}
++void   sr__event_notif_resp__free_unpacked
++                     (Sr__EventNotifResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__event_notif_resp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__event_notif_replay_req__init
++                     (Sr__EventNotifReplayReq         *message)
++{
++  static Sr__EventNotifReplayReq init_value = SR__EVENT_NOTIF_REPLAY_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__event_notif_replay_req__get_packed_size
++                     (const Sr__EventNotifReplayReq *message)
++{
++  assert(message->base.descriptor == &sr__event_notif_replay_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__event_notif_replay_req__pack
++                     (const Sr__EventNotifReplayReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__event_notif_replay_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__event_notif_replay_req__pack_to_buffer
++                     (const Sr__EventNotifReplayReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__event_notif_replay_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__EventNotifReplayReq *
++       sr__event_notif_replay_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__EventNotifReplayReq *)
++     protobuf_c_message_unpack (&sr__event_notif_replay_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__event_notif_replay_req__free_unpacked
++                     (Sr__EventNotifReplayReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__event_notif_replay_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__event_notif_replay_resp__init
++                     (Sr__EventNotifReplayResp         *message)
++{
++  static Sr__EventNotifReplayResp init_value = SR__EVENT_NOTIF_REPLAY_RESP__INIT;
++  *message = init_value;
++}
++size_t sr__event_notif_replay_resp__get_packed_size
++                     (const Sr__EventNotifReplayResp *message)
++{
++  assert(message->base.descriptor == &sr__event_notif_replay_resp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__event_notif_replay_resp__pack
++                     (const Sr__EventNotifReplayResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__event_notif_replay_resp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__event_notif_replay_resp__pack_to_buffer
++                     (const Sr__EventNotifReplayResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__event_notif_replay_resp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__EventNotifReplayResp *
++       sr__event_notif_replay_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__EventNotifReplayResp *)
++     protobuf_c_message_unpack (&sr__event_notif_replay_resp__descriptor,
++                                allocator, len, data);
++}
++void   sr__event_notif_replay_resp__free_unpacked
++                     (Sr__EventNotifReplayResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__event_notif_replay_resp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__data_provide_req__init
++                     (Sr__DataProvideReq         *message)
++{
++  static Sr__DataProvideReq init_value = SR__DATA_PROVIDE_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__data_provide_req__get_packed_size
++                     (const Sr__DataProvideReq *message)
++{
++  assert(message->base.descriptor == &sr__data_provide_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__data_provide_req__pack
++                     (const Sr__DataProvideReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__data_provide_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__data_provide_req__pack_to_buffer
++                     (const Sr__DataProvideReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__data_provide_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__DataProvideReq *
++       sr__data_provide_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__DataProvideReq *)
++     protobuf_c_message_unpack (&sr__data_provide_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__data_provide_req__free_unpacked
++                     (Sr__DataProvideReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__data_provide_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__data_provide_resp__init
++                     (Sr__DataProvideResp         *message)
++{
++  static Sr__DataProvideResp init_value = SR__DATA_PROVIDE_RESP__INIT;
++  *message = init_value;
++}
++size_t sr__data_provide_resp__get_packed_size
++                     (const Sr__DataProvideResp *message)
++{
++  assert(message->base.descriptor == &sr__data_provide_resp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__data_provide_resp__pack
++                     (const Sr__DataProvideResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__data_provide_resp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__data_provide_resp__pack_to_buffer
++                     (const Sr__DataProvideResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__data_provide_resp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__DataProvideResp *
++       sr__data_provide_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__DataProvideResp *)
++     protobuf_c_message_unpack (&sr__data_provide_resp__descriptor,
++                                allocator, len, data);
++}
++void   sr__data_provide_resp__free_unpacked
++                     (Sr__DataProvideResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__data_provide_resp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__module_install_req__init
++                     (Sr__ModuleInstallReq         *message)
++{
++  static Sr__ModuleInstallReq init_value = SR__MODULE_INSTALL_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__module_install_req__get_packed_size
++                     (const Sr__ModuleInstallReq *message)
++{
++  assert(message->base.descriptor == &sr__module_install_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__module_install_req__pack
++                     (const Sr__ModuleInstallReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__module_install_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__module_install_req__pack_to_buffer
++                     (const Sr__ModuleInstallReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__module_install_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__ModuleInstallReq *
++       sr__module_install_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__ModuleInstallReq *)
++     protobuf_c_message_unpack (&sr__module_install_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__module_install_req__free_unpacked
++                     (Sr__ModuleInstallReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__module_install_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__module_install_resp__init
++                     (Sr__ModuleInstallResp         *message)
++{
++  static Sr__ModuleInstallResp init_value = SR__MODULE_INSTALL_RESP__INIT;
++  *message = init_value;
++}
++size_t sr__module_install_resp__get_packed_size
++                     (const Sr__ModuleInstallResp *message)
++{
++  assert(message->base.descriptor == &sr__module_install_resp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__module_install_resp__pack
++                     (const Sr__ModuleInstallResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__module_install_resp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__module_install_resp__pack_to_buffer
++                     (const Sr__ModuleInstallResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__module_install_resp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__ModuleInstallResp *
++       sr__module_install_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__ModuleInstallResp *)
++     protobuf_c_message_unpack (&sr__module_install_resp__descriptor,
++                                allocator, len, data);
++}
++void   sr__module_install_resp__free_unpacked
++                     (Sr__ModuleInstallResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__module_install_resp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__feature_enable_req__init
++                     (Sr__FeatureEnableReq         *message)
++{
++  static Sr__FeatureEnableReq init_value = SR__FEATURE_ENABLE_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__feature_enable_req__get_packed_size
++                     (const Sr__FeatureEnableReq *message)
++{
++  assert(message->base.descriptor == &sr__feature_enable_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__feature_enable_req__pack
++                     (const Sr__FeatureEnableReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__feature_enable_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__feature_enable_req__pack_to_buffer
++                     (const Sr__FeatureEnableReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__feature_enable_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__FeatureEnableReq *
++       sr__feature_enable_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__FeatureEnableReq *)
++     protobuf_c_message_unpack (&sr__feature_enable_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__feature_enable_req__free_unpacked
++                     (Sr__FeatureEnableReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__feature_enable_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__feature_enable_resp__init
++                     (Sr__FeatureEnableResp         *message)
++{
++  static Sr__FeatureEnableResp init_value = SR__FEATURE_ENABLE_RESP__INIT;
++  *message = init_value;
++}
++size_t sr__feature_enable_resp__get_packed_size
++                     (const Sr__FeatureEnableResp *message)
++{
++  assert(message->base.descriptor == &sr__feature_enable_resp__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__feature_enable_resp__pack
++                     (const Sr__FeatureEnableResp *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__feature_enable_resp__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__feature_enable_resp__pack_to_buffer
++                     (const Sr__FeatureEnableResp *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__feature_enable_resp__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__FeatureEnableResp *
++       sr__feature_enable_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__FeatureEnableResp *)
++     protobuf_c_message_unpack (&sr__feature_enable_resp__descriptor,
++                                allocator, len, data);
++}
++void   sr__feature_enable_resp__free_unpacked
++                     (Sr__FeatureEnableResp *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__feature_enable_resp__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__unsubscribe_destination_req__init
++                     (Sr__UnsubscribeDestinationReq         *message)
++{
++  static Sr__UnsubscribeDestinationReq init_value = SR__UNSUBSCRIBE_DESTINATION_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__unsubscribe_destination_req__get_packed_size
++                     (const Sr__UnsubscribeDestinationReq *message)
++{
++  assert(message->base.descriptor == &sr__unsubscribe_destination_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__unsubscribe_destination_req__pack
++                     (const Sr__UnsubscribeDestinationReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__unsubscribe_destination_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__unsubscribe_destination_req__pack_to_buffer
++                     (const Sr__UnsubscribeDestinationReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__unsubscribe_destination_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__UnsubscribeDestinationReq *
++       sr__unsubscribe_destination_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__UnsubscribeDestinationReq *)
++     protobuf_c_message_unpack (&sr__unsubscribe_destination_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__unsubscribe_destination_req__free_unpacked
++                     (Sr__UnsubscribeDestinationReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__unsubscribe_destination_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__commit_timeout_req__init
++                     (Sr__CommitTimeoutReq         *message)
++{
++  static Sr__CommitTimeoutReq init_value = SR__COMMIT_TIMEOUT_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__commit_timeout_req__get_packed_size
++                     (const Sr__CommitTimeoutReq *message)
++{
++  assert(message->base.descriptor == &sr__commit_timeout_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__commit_timeout_req__pack
++                     (const Sr__CommitTimeoutReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__commit_timeout_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__commit_timeout_req__pack_to_buffer
++                     (const Sr__CommitTimeoutReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__commit_timeout_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__CommitTimeoutReq *
++       sr__commit_timeout_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__CommitTimeoutReq *)
++     protobuf_c_message_unpack (&sr__commit_timeout_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__commit_timeout_req__free_unpacked
++                     (Sr__CommitTimeoutReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__commit_timeout_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__oper_data_timeout_req__init
++                     (Sr__OperDataTimeoutReq         *message)
++{
++  static Sr__OperDataTimeoutReq init_value = SR__OPER_DATA_TIMEOUT_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__oper_data_timeout_req__get_packed_size
++                     (const Sr__OperDataTimeoutReq *message)
++{
++  assert(message->base.descriptor == &sr__oper_data_timeout_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__oper_data_timeout_req__pack
++                     (const Sr__OperDataTimeoutReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__oper_data_timeout_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__oper_data_timeout_req__pack_to_buffer
++                     (const Sr__OperDataTimeoutReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__oper_data_timeout_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__OperDataTimeoutReq *
++       sr__oper_data_timeout_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__OperDataTimeoutReq *)
++     protobuf_c_message_unpack (&sr__oper_data_timeout_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__oper_data_timeout_req__free_unpacked
++                     (Sr__OperDataTimeoutReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__oper_data_timeout_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__internal_state_data_req__init
++                     (Sr__InternalStateDataReq         *message)
++{
++  static Sr__InternalStateDataReq init_value = SR__INTERNAL_STATE_DATA_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__internal_state_data_req__get_packed_size
++                     (const Sr__InternalStateDataReq *message)
++{
++  assert(message->base.descriptor == &sr__internal_state_data_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__internal_state_data_req__pack
++                     (const Sr__InternalStateDataReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__internal_state_data_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__internal_state_data_req__pack_to_buffer
++                     (const Sr__InternalStateDataReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__internal_state_data_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__InternalStateDataReq *
++       sr__internal_state_data_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__InternalStateDataReq *)
++     protobuf_c_message_unpack (&sr__internal_state_data_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__internal_state_data_req__free_unpacked
++                     (Sr__InternalStateDataReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__internal_state_data_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__notif_store_cleanup_req__init
++                     (Sr__NotifStoreCleanupReq         *message)
++{
++  static Sr__NotifStoreCleanupReq init_value = SR__NOTIF_STORE_CLEANUP_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__notif_store_cleanup_req__get_packed_size
++                     (const Sr__NotifStoreCleanupReq *message)
++{
++  assert(message->base.descriptor == &sr__notif_store_cleanup_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__notif_store_cleanup_req__pack
++                     (const Sr__NotifStoreCleanupReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__notif_store_cleanup_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__notif_store_cleanup_req__pack_to_buffer
++                     (const Sr__NotifStoreCleanupReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__notif_store_cleanup_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__NotifStoreCleanupReq *
++       sr__notif_store_cleanup_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__NotifStoreCleanupReq *)
++     protobuf_c_message_unpack (&sr__notif_store_cleanup_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__notif_store_cleanup_req__free_unpacked
++                     (Sr__NotifStoreCleanupReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__notif_store_cleanup_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__delayed_msg_req__init
++                     (Sr__DelayedMsgReq         *message)
++{
++  static Sr__DelayedMsgReq init_value = SR__DELAYED_MSG_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__delayed_msg_req__get_packed_size
++                     (const Sr__DelayedMsgReq *message)
++{
++  assert(message->base.descriptor == &sr__delayed_msg_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__delayed_msg_req__pack
++                     (const Sr__DelayedMsgReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__delayed_msg_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__delayed_msg_req__pack_to_buffer
++                     (const Sr__DelayedMsgReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__delayed_msg_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__DelayedMsgReq *
++       sr__delayed_msg_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__DelayedMsgReq *)
++     protobuf_c_message_unpack (&sr__delayed_msg_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__delayed_msg_req__free_unpacked
++                     (Sr__DelayedMsgReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__delayed_msg_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__nacm_reload_req__init
++                     (Sr__NacmReloadReq         *message)
++{
++  static Sr__NacmReloadReq init_value = SR__NACM_RELOAD_REQ__INIT;
++  *message = init_value;
++}
++size_t sr__nacm_reload_req__get_packed_size
++                     (const Sr__NacmReloadReq *message)
++{
++  assert(message->base.descriptor == &sr__nacm_reload_req__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__nacm_reload_req__pack
++                     (const Sr__NacmReloadReq *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__nacm_reload_req__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__nacm_reload_req__pack_to_buffer
++                     (const Sr__NacmReloadReq *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__nacm_reload_req__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__NacmReloadReq *
++       sr__nacm_reload_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__NacmReloadReq *)
++     protobuf_c_message_unpack (&sr__nacm_reload_req__descriptor,
++                                allocator, len, data);
++}
++void   sr__nacm_reload_req__free_unpacked
++                     (Sr__NacmReloadReq *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__nacm_reload_req__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__request__init
++                     (Sr__Request         *message)
++{
++  static Sr__Request init_value = SR__REQUEST__INIT;
++  *message = init_value;
++}
++size_t sr__request__get_packed_size
++                     (const Sr__Request *message)
++{
++  assert(message->base.descriptor == &sr__request__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__request__pack
++                     (const Sr__Request *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__request__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__request__pack_to_buffer
++                     (const Sr__Request *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__request__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__Request *
++       sr__request__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__Request *)
++     protobuf_c_message_unpack (&sr__request__descriptor,
++                                allocator, len, data);
++}
++void   sr__request__free_unpacked
++                     (Sr__Request *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__request__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__response__init
++                     (Sr__Response         *message)
++{
++  static Sr__Response init_value = SR__RESPONSE__INIT;
++  *message = init_value;
++}
++size_t sr__response__get_packed_size
++                     (const Sr__Response *message)
++{
++  assert(message->base.descriptor == &sr__response__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__response__pack
++                     (const Sr__Response *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__response__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__response__pack_to_buffer
++                     (const Sr__Response *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__response__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__Response *
++       sr__response__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__Response *)
++     protobuf_c_message_unpack (&sr__response__descriptor,
++                                allocator, len, data);
++}
++void   sr__response__free_unpacked
++                     (Sr__Response *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__response__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__notification__init
++                     (Sr__Notification         *message)
++{
++  static Sr__Notification init_value = SR__NOTIFICATION__INIT;
++  *message = init_value;
++}
++size_t sr__notification__get_packed_size
++                     (const Sr__Notification *message)
++{
++  assert(message->base.descriptor == &sr__notification__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__notification__pack
++                     (const Sr__Notification *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__notification__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__notification__pack_to_buffer
++                     (const Sr__Notification *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__notification__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__Notification *
++       sr__notification__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__Notification *)
++     protobuf_c_message_unpack (&sr__notification__descriptor,
++                                allocator, len, data);
++}
++void   sr__notification__free_unpacked
++                     (Sr__Notification *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__notification__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__notification_ack__init
++                     (Sr__NotificationAck         *message)
++{
++  static Sr__NotificationAck init_value = SR__NOTIFICATION_ACK__INIT;
++  *message = init_value;
++}
++size_t sr__notification_ack__get_packed_size
++                     (const Sr__NotificationAck *message)
++{
++  assert(message->base.descriptor == &sr__notification_ack__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__notification_ack__pack
++                     (const Sr__NotificationAck *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__notification_ack__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__notification_ack__pack_to_buffer
++                     (const Sr__NotificationAck *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__notification_ack__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__NotificationAck *
++       sr__notification_ack__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__NotificationAck *)
++     protobuf_c_message_unpack (&sr__notification_ack__descriptor,
++                                allocator, len, data);
++}
++void   sr__notification_ack__free_unpacked
++                     (Sr__NotificationAck *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__notification_ack__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__internal_request__init
++                     (Sr__InternalRequest         *message)
++{
++  static Sr__InternalRequest init_value = SR__INTERNAL_REQUEST__INIT;
++  *message = init_value;
++}
++size_t sr__internal_request__get_packed_size
++                     (const Sr__InternalRequest *message)
++{
++  assert(message->base.descriptor == &sr__internal_request__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__internal_request__pack
++                     (const Sr__InternalRequest *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__internal_request__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__internal_request__pack_to_buffer
++                     (const Sr__InternalRequest *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__internal_request__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__InternalRequest *
++       sr__internal_request__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__InternalRequest *)
++     protobuf_c_message_unpack (&sr__internal_request__descriptor,
++                                allocator, len, data);
++}
++void   sr__internal_request__free_unpacked
++                     (Sr__InternalRequest *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__internal_request__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++void   sr__msg__init
++                     (Sr__Msg         *message)
++{
++  static Sr__Msg init_value = SR__MSG__INIT;
++  *message = init_value;
++}
++size_t sr__msg__get_packed_size
++                     (const Sr__Msg *message)
++{
++  assert(message->base.descriptor == &sr__msg__descriptor);
++  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
++}
++size_t sr__msg__pack
++                     (const Sr__Msg *message,
++                      uint8_t       *out)
++{
++  assert(message->base.descriptor == &sr__msg__descriptor);
++  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
++}
++size_t sr__msg__pack_to_buffer
++                     (const Sr__Msg *message,
++                      ProtobufCBuffer *buffer)
++{
++  assert(message->base.descriptor == &sr__msg__descriptor);
++  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
++}
++Sr__Msg *
++       sr__msg__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data)
++{
++  return (Sr__Msg *)
++     protobuf_c_message_unpack (&sr__msg__descriptor,
++                                allocator, len, data);
++}
++void   sr__msg__free_unpacked
++                     (Sr__Msg *message,
++                      ProtobufCAllocator *allocator)
++{
++  assert(message->base.descriptor == &sr__msg__descriptor);
++  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
++}
++static const ProtobufCEnumValue sr__value__types__enum_values_by_number[22] =
++{
++  { "LIST", "SR__VALUE__TYPES__LIST", 1 },
++  { "CONTAINER", "SR__VALUE__TYPES__CONTAINER", 2 },
++  { "CONTAINER_PRESENCE", "SR__VALUE__TYPES__CONTAINER_PRESENCE", 3 },
++  { "LEAF_EMPTY", "SR__VALUE__TYPES__LEAF_EMPTY", 4 },
++  { "BINARY", "SR__VALUE__TYPES__BINARY", 10 },
++  { "BITS", "SR__VALUE__TYPES__BITS", 11 },
++  { "BOOL", "SR__VALUE__TYPES__BOOL", 12 },
++  { "DECIMAL64", "SR__VALUE__TYPES__DECIMAL64", 13 },
++  { "ENUM", "SR__VALUE__TYPES__ENUM", 14 },
++  { "IDENTITYREF", "SR__VALUE__TYPES__IDENTITYREF", 15 },
++  { "INSTANCEID", "SR__VALUE__TYPES__INSTANCEID", 16 },
++  { "INT8", "SR__VALUE__TYPES__INT8", 17 },
++  { "INT16", "SR__VALUE__TYPES__INT16", 18 },
++  { "INT32", "SR__VALUE__TYPES__INT32", 19 },
++  { "INT64", "SR__VALUE__TYPES__INT64", 20 },
++  { "STRING", "SR__VALUE__TYPES__STRING", 21 },
++  { "UINT8", "SR__VALUE__TYPES__UINT8", 22 },
++  { "UINT16", "SR__VALUE__TYPES__UINT16", 23 },
++  { "UINT32", "SR__VALUE__TYPES__UINT32", 24 },
++  { "UINT64", "SR__VALUE__TYPES__UINT64", 25 },
++  { "ANYXML", "SR__VALUE__TYPES__ANYXML", 26 },
++  { "ANYDATA", "SR__VALUE__TYPES__ANYDATA", 27 },
++};
++static const ProtobufCIntRange sr__value__types__value_ranges[] = {
++{1, 0},{10, 4},{0, 22}
++};
++static const ProtobufCEnumValueIndex sr__value__types__enum_values_by_name[22] =
++{
++  { "ANYDATA", 21 },
++  { "ANYXML", 20 },
++  { "BINARY", 4 },
++  { "BITS", 5 },
++  { "BOOL", 6 },
++  { "CONTAINER", 1 },
++  { "CONTAINER_PRESENCE", 2 },
++  { "DECIMAL64", 7 },
++  { "ENUM", 8 },
++  { "IDENTITYREF", 9 },
++  { "INSTANCEID", 10 },
++  { "INT16", 12 },
++  { "INT32", 13 },
++  { "INT64", 14 },
++  { "INT8", 11 },
++  { "LEAF_EMPTY", 3 },
++  { "LIST", 0 },
++  { "STRING", 15 },
++  { "UINT16", 17 },
++  { "UINT32", 18 },
++  { "UINT64", 19 },
++  { "UINT8", 16 },
++};
++const ProtobufCEnumDescriptor sr__value__types__descriptor =
++{
++  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
++  "sr.Value.Types",
++  "Types",
++  "Sr__Value__Types",
++  "sr",
++  22,
++  sr__value__types__enum_values_by_number,
++  22,
++  sr__value__types__enum_values_by_name,
++  2,
++  sr__value__types__value_ranges,
++  NULL,NULL,NULL,NULL   /* reserved[1234] */
++};
++static const ProtobufCFieldDescriptor sr__value__field_descriptors[21] =
++{
++  {
++    "xpath",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Value, xpath),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "type",
++    2,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_ENUM,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Value, type),
++    &sr__value__types__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "dflt",
++    3,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_BOOL,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Value, dflt),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "binary_val",
++    10,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Value, binary_val),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "bits_val",
++    11,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Value, bits_val),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "bool_val",
++    12,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_BOOL,
++    offsetof(Sr__Value, has_bool_val),
++    offsetof(Sr__Value, bool_val),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "decimal64_val",
++    13,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_DOUBLE,
++    offsetof(Sr__Value, has_decimal64_val),
++    offsetof(Sr__Value, decimal64_val),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "enum_val",
++    14,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Value, enum_val),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "identityref_val",
++    15,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Value, identityref_val),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "instanceid_val",
++    16,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Value, instanceid_val),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "int8_val",
++    17,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_INT32,
++    offsetof(Sr__Value, has_int8_val),
++    offsetof(Sr__Value, int8_val),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "int16_val",
++    18,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_INT32,
++    offsetof(Sr__Value, has_int16_val),
++    offsetof(Sr__Value, int16_val),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "int32_val",
++    19,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_INT32,
++    offsetof(Sr__Value, has_int32_val),
++    offsetof(Sr__Value, int32_val),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "int64_val",
++    20,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_INT64,
++    offsetof(Sr__Value, has_int64_val),
++    offsetof(Sr__Value, int64_val),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "string_val",
++    21,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Value, string_val),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "uint8_val",
++    22,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_UINT32,
++    offsetof(Sr__Value, has_uint8_val),
++    offsetof(Sr__Value, uint8_val),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "uint16_val",
++    23,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_UINT32,
++    offsetof(Sr__Value, has_uint16_val),
++    offsetof(Sr__Value, uint16_val),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "uint32_val",
++    24,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_UINT32,
++    offsetof(Sr__Value, has_uint32_val),
++    offsetof(Sr__Value, uint32_val),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "uint64_val",
++    25,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_UINT64,
++    offsetof(Sr__Value, has_uint64_val),
++    offsetof(Sr__Value, uint64_val),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "anyxml_val",
++    26,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Value, anyxml_val),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "anydata_val",
++    27,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Value, anydata_val),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__value__field_indices_by_name[] = {
++  20,   /* field[20] = anydata_val */
++  19,   /* field[19] = anyxml_val */
++  3,   /* field[3] = binary_val */
++  4,   /* field[4] = bits_val */
++  5,   /* field[5] = bool_val */
++  6,   /* field[6] = decimal64_val */
++  2,   /* field[2] = dflt */
++  7,   /* field[7] = enum_val */
++  8,   /* field[8] = identityref_val */
++  9,   /* field[9] = instanceid_val */
++  11,   /* field[11] = int16_val */
++  12,   /* field[12] = int32_val */
++  13,   /* field[13] = int64_val */
++  10,   /* field[10] = int8_val */
++  14,   /* field[14] = string_val */
++  1,   /* field[1] = type */
++  16,   /* field[16] = uint16_val */
++  17,   /* field[17] = uint32_val */
++  18,   /* field[18] = uint64_val */
++  15,   /* field[15] = uint8_val */
++  0,   /* field[0] = xpath */
++};
++static const ProtobufCIntRange sr__value__number_ranges[2 + 1] =
++{
++  { 1, 0 },
++  { 10, 3 },
++  { 0, 21 }
++};
++const ProtobufCMessageDescriptor sr__value__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.Value",
++  "Value",
++  "Sr__Value",
++  "sr",
++  sizeof(Sr__Value),
++  21,
++  sr__value__field_descriptors,
++  sr__value__field_indices_by_name,
++  2,  sr__value__number_ranges,
++  (ProtobufCMessageInit) sr__value__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__node__field_descriptors[3] =
++{
++  {
++    "value",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Node, value),
++    &sr__value__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "module_name",
++    2,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Node, module_name),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "children",
++    3,
++    PROTOBUF_C_LABEL_REPEATED,
++    PROTOBUF_C_TYPE_MESSAGE,
++    offsetof(Sr__Node, n_children),
++    offsetof(Sr__Node, children),
++    &sr__node__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__node__field_indices_by_name[] = {
++  2,   /* field[2] = children */
++  1,   /* field[1] = module_name */
++  0,   /* field[0] = value */
++};
++static const ProtobufCIntRange sr__node__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 3 }
++};
++const ProtobufCMessageDescriptor sr__node__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.Node",
++  "Node",
++  "Sr__Node",
++  "sr",
++  sizeof(Sr__Node),
++  3,
++  sr__node__field_descriptors,
++  sr__node__field_indices_by_name,
++  1,  sr__node__number_ranges,
++  (ProtobufCMessageInit) sr__node__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__error__field_descriptors[2] =
++{
++  {
++    "message",
++    1,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Error, message),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "xpath",
++    2,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Error, xpath),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__error__field_indices_by_name[] = {
++  0,   /* field[0] = message */
++  1,   /* field[1] = xpath */
++};
++static const ProtobufCIntRange sr__error__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 2 }
++};
++const ProtobufCMessageDescriptor sr__error__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.Error",
++  "Error",
++  "Sr__Error",
++  "sr",
++  sizeof(Sr__Error),
++  2,
++  sr__error__field_descriptors,
++  sr__error__field_indices_by_name,
++  1,  sr__error__number_ranges,
++  (ProtobufCMessageInit) sr__error__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__session_start_req__field_descriptors[4] =
++{
++  {
++    "datastore",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_ENUM,
++    0,   /* quantifier_offset */
++    offsetof(Sr__SessionStartReq, datastore),
++    &sr__data_store__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "user_name",
++    2,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__SessionStartReq, user_name),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "options",
++    3,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_UINT32,
++    0,   /* quantifier_offset */
++    offsetof(Sr__SessionStartReq, options),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "commit_id",
++    4,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_UINT32,
++    offsetof(Sr__SessionStartReq, has_commit_id),
++    offsetof(Sr__SessionStartReq, commit_id),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__session_start_req__field_indices_by_name[] = {
++  3,   /* field[3] = commit_id */
++  0,   /* field[0] = datastore */
++  2,   /* field[2] = options */
++  1,   /* field[1] = user_name */
++};
++static const ProtobufCIntRange sr__session_start_req__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 4 }
++};
++const ProtobufCMessageDescriptor sr__session_start_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.SessionStartReq",
++  "SessionStartReq",
++  "Sr__SessionStartReq",
++  "sr",
++  sizeof(Sr__SessionStartReq),
++  4,
++  sr__session_start_req__field_descriptors,
++  sr__session_start_req__field_indices_by_name,
++  1,  sr__session_start_req__number_ranges,
++  (ProtobufCMessageInit) sr__session_start_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__session_start_resp__field_descriptors[1] =
++{
++  {
++    "session_id",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_UINT32,
++    0,   /* quantifier_offset */
++    offsetof(Sr__SessionStartResp, session_id),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__session_start_resp__field_indices_by_name[] = {
++  0,   /* field[0] = session_id */
++};
++static const ProtobufCIntRange sr__session_start_resp__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 1 }
++};
++const ProtobufCMessageDescriptor sr__session_start_resp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.SessionStartResp",
++  "SessionStartResp",
++  "Sr__SessionStartResp",
++  "sr",
++  sizeof(Sr__SessionStartResp),
++  1,
++  sr__session_start_resp__field_descriptors,
++  sr__session_start_resp__field_indices_by_name,
++  1,  sr__session_start_resp__number_ranges,
++  (ProtobufCMessageInit) sr__session_start_resp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__session_stop_req__field_descriptors[1] =
++{
++  {
++    "session_id",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_UINT32,
++    0,   /* quantifier_offset */
++    offsetof(Sr__SessionStopReq, session_id),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__session_stop_req__field_indices_by_name[] = {
++  0,   /* field[0] = session_id */
++};
++static const ProtobufCIntRange sr__session_stop_req__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 1 }
++};
++const ProtobufCMessageDescriptor sr__session_stop_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.SessionStopReq",
++  "SessionStopReq",
++  "Sr__SessionStopReq",
++  "sr",
++  sizeof(Sr__SessionStopReq),
++  1,
++  sr__session_stop_req__field_descriptors,
++  sr__session_stop_req__field_indices_by_name,
++  1,  sr__session_stop_req__number_ranges,
++  (ProtobufCMessageInit) sr__session_stop_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__session_stop_resp__field_descriptors[1] =
++{
++  {
++    "session_id",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_UINT32,
++    0,   /* quantifier_offset */
++    offsetof(Sr__SessionStopResp, session_id),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__session_stop_resp__field_indices_by_name[] = {
++  0,   /* field[0] = session_id */
++};
++static const ProtobufCIntRange sr__session_stop_resp__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 1 }
++};
++const ProtobufCMessageDescriptor sr__session_stop_resp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.SessionStopResp",
++  "SessionStopResp",
++  "Sr__SessionStopResp",
++  "sr",
++  sizeof(Sr__SessionStopResp),
++  1,
++  sr__session_stop_resp__field_descriptors,
++  sr__session_stop_resp__field_indices_by_name,
++  1,  sr__session_stop_resp__number_ranges,
++  (ProtobufCMessageInit) sr__session_stop_resp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++#define sr__session_refresh_req__field_descriptors NULL
++#define sr__session_refresh_req__field_indices_by_name NULL
++#define sr__session_refresh_req__number_ranges NULL
++const ProtobufCMessageDescriptor sr__session_refresh_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.SessionRefreshReq",
++  "SessionRefreshReq",
++  "Sr__SessionRefreshReq",
++  "sr",
++  sizeof(Sr__SessionRefreshReq),
++  0,
++  sr__session_refresh_req__field_descriptors,
++  sr__session_refresh_req__field_indices_by_name,
++  0,  sr__session_refresh_req__number_ranges,
++  (ProtobufCMessageInit) sr__session_refresh_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__session_refresh_resp__field_descriptors[1] =
++{
++  {
++    "errors",
++    1,
++    PROTOBUF_C_LABEL_REPEATED,
++    PROTOBUF_C_TYPE_MESSAGE,
++    offsetof(Sr__SessionRefreshResp, n_errors),
++    offsetof(Sr__SessionRefreshResp, errors),
++    &sr__error__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__session_refresh_resp__field_indices_by_name[] = {
++  0,   /* field[0] = errors */
++};
++static const ProtobufCIntRange sr__session_refresh_resp__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 1 }
++};
++const ProtobufCMessageDescriptor sr__session_refresh_resp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.SessionRefreshResp",
++  "SessionRefreshResp",
++  "Sr__SessionRefreshResp",
++  "sr",
++  sizeof(Sr__SessionRefreshResp),
++  1,
++  sr__session_refresh_resp__field_descriptors,
++  sr__session_refresh_resp__field_indices_by_name,
++  1,  sr__session_refresh_resp__number_ranges,
++  (ProtobufCMessageInit) sr__session_refresh_resp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++#define sr__session_check_req__field_descriptors NULL
++#define sr__session_check_req__field_indices_by_name NULL
++#define sr__session_check_req__number_ranges NULL
++const ProtobufCMessageDescriptor sr__session_check_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.SessionCheckReq",
++  "SessionCheckReq",
++  "Sr__SessionCheckReq",
++  "sr",
++  sizeof(Sr__SessionCheckReq),
++  0,
++  sr__session_check_req__field_descriptors,
++  sr__session_check_req__field_indices_by_name,
++  0,  sr__session_check_req__number_ranges,
++  (ProtobufCMessageInit) sr__session_check_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__session_check_resp__field_descriptors[1] =
++{
++  {
++    "errors",
++    1,
++    PROTOBUF_C_LABEL_REPEATED,
++    PROTOBUF_C_TYPE_MESSAGE,
++    offsetof(Sr__SessionCheckResp, n_errors),
++    offsetof(Sr__SessionCheckResp, errors),
++    &sr__error__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__session_check_resp__field_indices_by_name[] = {
++  0,   /* field[0] = errors */
++};
++static const ProtobufCIntRange sr__session_check_resp__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 1 }
++};
++const ProtobufCMessageDescriptor sr__session_check_resp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.SessionCheckResp",
++  "SessionCheckResp",
++  "Sr__SessionCheckResp",
++  "sr",
++  sizeof(Sr__SessionCheckResp),
++  1,
++  sr__session_check_resp__field_descriptors,
++  sr__session_check_resp__field_indices_by_name,
++  1,  sr__session_check_resp__number_ranges,
++  (ProtobufCMessageInit) sr__session_check_resp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__session_switch_ds_req__field_descriptors[1] =
++{
++  {
++    "datastore",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_ENUM,
++    0,   /* quantifier_offset */
++    offsetof(Sr__SessionSwitchDsReq, datastore),
++    &sr__data_store__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__session_switch_ds_req__field_indices_by_name[] = {
++  0,   /* field[0] = datastore */
++};
++static const ProtobufCIntRange sr__session_switch_ds_req__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 1 }
++};
++const ProtobufCMessageDescriptor sr__session_switch_ds_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.SessionSwitchDsReq",
++  "SessionSwitchDsReq",
++  "Sr__SessionSwitchDsReq",
++  "sr",
++  sizeof(Sr__SessionSwitchDsReq),
++  1,
++  sr__session_switch_ds_req__field_descriptors,
++  sr__session_switch_ds_req__field_indices_by_name,
++  1,  sr__session_switch_ds_req__number_ranges,
++  (ProtobufCMessageInit) sr__session_switch_ds_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++#define sr__session_switch_ds_resp__field_descriptors NULL
++#define sr__session_switch_ds_resp__field_indices_by_name NULL
++#define sr__session_switch_ds_resp__number_ranges NULL
++const ProtobufCMessageDescriptor sr__session_switch_ds_resp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.SessionSwitchDsResp",
++  "SessionSwitchDsResp",
++  "Sr__SessionSwitchDsResp",
++  "sr",
++  sizeof(Sr__SessionSwitchDsResp),
++  0,
++  sr__session_switch_ds_resp__field_descriptors,
++  sr__session_switch_ds_resp__field_indices_by_name,
++  0,  sr__session_switch_ds_resp__number_ranges,
++  (ProtobufCMessageInit) sr__session_switch_ds_resp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__session_set_opts_req__field_descriptors[1] =
++{
++  {
++    "options",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_UINT32,
++    0,   /* quantifier_offset */
++    offsetof(Sr__SessionSetOptsReq, options),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__session_set_opts_req__field_indices_by_name[] = {
++  0,   /* field[0] = options */
++};
++static const ProtobufCIntRange sr__session_set_opts_req__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 1 }
++};
++const ProtobufCMessageDescriptor sr__session_set_opts_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.SessionSetOptsReq",
++  "SessionSetOptsReq",
++  "Sr__SessionSetOptsReq",
++  "sr",
++  sizeof(Sr__SessionSetOptsReq),
++  1,
++  sr__session_set_opts_req__field_descriptors,
++  sr__session_set_opts_req__field_indices_by_name,
++  1,  sr__session_set_opts_req__number_ranges,
++  (ProtobufCMessageInit) sr__session_set_opts_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++#define sr__session_set_opts_resp__field_descriptors NULL
++#define sr__session_set_opts_resp__field_indices_by_name NULL
++#define sr__session_set_opts_resp__number_ranges NULL
++const ProtobufCMessageDescriptor sr__session_set_opts_resp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.SessionSetOptsResp",
++  "SessionSetOptsResp",
++  "Sr__SessionSetOptsResp",
++  "sr",
++  sizeof(Sr__SessionSetOptsResp),
++  0,
++  sr__session_set_opts_resp__field_descriptors,
++  sr__session_set_opts_resp__field_indices_by_name,
++  0,  sr__session_set_opts_resp__number_ranges,
++  (ProtobufCMessageInit) sr__session_set_opts_resp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__version_verify_req__field_descriptors[1] =
++{
++  {
++    "soname",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__VersionVerifyReq, soname),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__version_verify_req__field_indices_by_name[] = {
++  0,   /* field[0] = soname */
++};
++static const ProtobufCIntRange sr__version_verify_req__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 1 }
++};
++const ProtobufCMessageDescriptor sr__version_verify_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.VersionVerifyReq",
++  "VersionVerifyReq",
++  "Sr__VersionVerifyReq",
++  "sr",
++  sizeof(Sr__VersionVerifyReq),
++  1,
++  sr__version_verify_req__field_descriptors,
++  sr__version_verify_req__field_indices_by_name,
++  1,  sr__version_verify_req__number_ranges,
++  (ProtobufCMessageInit) sr__version_verify_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__version_verify_resp__field_descriptors[1] =
++{
++  {
++    "soname",
++    1,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__VersionVerifyResp, soname),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__version_verify_resp__field_indices_by_name[] = {
++  0,   /* field[0] = soname */
++};
++static const ProtobufCIntRange sr__version_verify_resp__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 1 }
++};
++const ProtobufCMessageDescriptor sr__version_verify_resp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.VersionVerifyResp",
++  "VersionVerifyResp",
++  "Sr__VersionVerifyResp",
++  "sr",
++  sizeof(Sr__VersionVerifyResp),
++  1,
++  sr__version_verify_resp__field_descriptors,
++  sr__version_verify_resp__field_indices_by_name,
++  1,  sr__version_verify_resp__number_ranges,
++  (ProtobufCMessageInit) sr__version_verify_resp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__schema_revision__field_descriptors[3] =
++{
++  {
++    "revision",
++    1,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__SchemaRevision, revision),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "file_path_yang",
++    2,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__SchemaRevision, file_path_yang),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "file_path_yin",
++    3,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__SchemaRevision, file_path_yin),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__schema_revision__field_indices_by_name[] = {
++  1,   /* field[1] = file_path_yang */
++  2,   /* field[2] = file_path_yin */
++  0,   /* field[0] = revision */
++};
++static const ProtobufCIntRange sr__schema_revision__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 3 }
++};
++const ProtobufCMessageDescriptor sr__schema_revision__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.SchemaRevision",
++  "SchemaRevision",
++  "Sr__SchemaRevision",
++  "sr",
++  sizeof(Sr__SchemaRevision),
++  3,
++  sr__schema_revision__field_descriptors,
++  sr__schema_revision__field_indices_by_name,
++  1,  sr__schema_revision__number_ranges,
++  (ProtobufCMessageInit) sr__schema_revision__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__schema_submodule__field_descriptors[2] =
++{
++  {
++    "submodule_name",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__SchemaSubmodule, submodule_name),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "revision",
++    2,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__SchemaSubmodule, revision),
++    &sr__schema_revision__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__schema_submodule__field_indices_by_name[] = {
++  1,   /* field[1] = revision */
++  0,   /* field[0] = submodule_name */
++};
++static const ProtobufCIntRange sr__schema_submodule__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 2 }
++};
++const ProtobufCMessageDescriptor sr__schema_submodule__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.SchemaSubmodule",
++  "SchemaSubmodule",
++  "Sr__SchemaSubmodule",
++  "sr",
++  sizeof(Sr__SchemaSubmodule),
++  2,
++  sr__schema_submodule__field_descriptors,
++  sr__schema_submodule__field_indices_by_name,
++  1,  sr__schema_submodule__number_ranges,
++  (ProtobufCMessageInit) sr__schema_submodule__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__schema__field_descriptors[8] =
++{
++  {
++    "module_name",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Schema, module_name),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "ns",
++    2,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Schema, ns),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "prefix",
++    3,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Schema, prefix),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "installed",
++    4,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_BOOL,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Schema, installed),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "implemented",
++    5,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_BOOL,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Schema, implemented),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "revision",
++    6,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Schema, revision),
++    &sr__schema_revision__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "submodules",
++    7,
++    PROTOBUF_C_LABEL_REPEATED,
++    PROTOBUF_C_TYPE_MESSAGE,
++    offsetof(Sr__Schema, n_submodules),
++    offsetof(Sr__Schema, submodules),
++    &sr__schema_submodule__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "enabled_features",
++    8,
++    PROTOBUF_C_LABEL_REPEATED,
++    PROTOBUF_C_TYPE_STRING,
++    offsetof(Sr__Schema, n_enabled_features),
++    offsetof(Sr__Schema, enabled_features),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__schema__field_indices_by_name[] = {
++  7,   /* field[7] = enabled_features */
++  4,   /* field[4] = implemented */
++  3,   /* field[3] = installed */
++  0,   /* field[0] = module_name */
++  1,   /* field[1] = ns */
++  2,   /* field[2] = prefix */
++  5,   /* field[5] = revision */
++  6,   /* field[6] = submodules */
++};
++static const ProtobufCIntRange sr__schema__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 8 }
++};
++const ProtobufCMessageDescriptor sr__schema__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.Schema",
++  "Schema",
++  "Sr__Schema",
++  "sr",
++  sizeof(Sr__Schema),
++  8,
++  sr__schema__field_descriptors,
++  sr__schema__field_indices_by_name,
++  1,  sr__schema__number_ranges,
++  (ProtobufCMessageInit) sr__schema__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++#define sr__list_schemas_req__field_descriptors NULL
++#define sr__list_schemas_req__field_indices_by_name NULL
++#define sr__list_schemas_req__number_ranges NULL
++const ProtobufCMessageDescriptor sr__list_schemas_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.ListSchemasReq",
++  "ListSchemasReq",
++  "Sr__ListSchemasReq",
++  "sr",
++  sizeof(Sr__ListSchemasReq),
++  0,
++  sr__list_schemas_req__field_descriptors,
++  sr__list_schemas_req__field_indices_by_name,
++  0,  sr__list_schemas_req__number_ranges,
++  (ProtobufCMessageInit) sr__list_schemas_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__list_schemas_resp__field_descriptors[1] =
++{
++  {
++    "schemas",
++    1,
++    PROTOBUF_C_LABEL_REPEATED,
++    PROTOBUF_C_TYPE_MESSAGE,
++    offsetof(Sr__ListSchemasResp, n_schemas),
++    offsetof(Sr__ListSchemasResp, schemas),
++    &sr__schema__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__list_schemas_resp__field_indices_by_name[] = {
++  0,   /* field[0] = schemas */
++};
++static const ProtobufCIntRange sr__list_schemas_resp__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 1 }
++};
++const ProtobufCMessageDescriptor sr__list_schemas_resp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.ListSchemasResp",
++  "ListSchemasResp",
++  "Sr__ListSchemasResp",
++  "sr",
++  sizeof(Sr__ListSchemasResp),
++  1,
++  sr__list_schemas_resp__field_descriptors,
++  sr__list_schemas_resp__field_indices_by_name,
++  1,  sr__list_schemas_resp__number_ranges,
++  (ProtobufCMessageInit) sr__list_schemas_resp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__get_schema_req__field_descriptors[5] =
++{
++  {
++    "module_name",
++    1,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__GetSchemaReq, module_name),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "revision",
++    2,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__GetSchemaReq, revision),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "submodule_name",
++    3,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__GetSchemaReq, submodule_name),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "submodule_revision",
++    4,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__GetSchemaReq, submodule_revision),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "yang_format",
++    5,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_BOOL,
++    0,   /* quantifier_offset */
++    offsetof(Sr__GetSchemaReq, yang_format),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__get_schema_req__field_indices_by_name[] = {
++  0,   /* field[0] = module_name */
++  1,   /* field[1] = revision */
++  2,   /* field[2] = submodule_name */
++  3,   /* field[3] = submodule_revision */
++  4,   /* field[4] = yang_format */
++};
++static const ProtobufCIntRange sr__get_schema_req__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 5 }
++};
++const ProtobufCMessageDescriptor sr__get_schema_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.GetSchemaReq",
++  "GetSchemaReq",
++  "Sr__GetSchemaReq",
++  "sr",
++  sizeof(Sr__GetSchemaReq),
++  5,
++  sr__get_schema_req__field_descriptors,
++  sr__get_schema_req__field_indices_by_name,
++  1,  sr__get_schema_req__number_ranges,
++  (ProtobufCMessageInit) sr__get_schema_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__get_schema_resp__field_descriptors[1] =
++{
++  {
++    "schema_content",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__GetSchemaResp, schema_content),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__get_schema_resp__field_indices_by_name[] = {
++  0,   /* field[0] = schema_content */
++};
++static const ProtobufCIntRange sr__get_schema_resp__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 1 }
++};
++const ProtobufCMessageDescriptor sr__get_schema_resp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.GetSchemaResp",
++  "GetSchemaResp",
++  "Sr__GetSchemaResp",
++  "sr",
++  sizeof(Sr__GetSchemaResp),
++  1,
++  sr__get_schema_resp__field_descriptors,
++  sr__get_schema_resp__field_indices_by_name,
++  1,  sr__get_schema_resp__number_ranges,
++  (ProtobufCMessageInit) sr__get_schema_resp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__get_item_req__field_descriptors[1] =
++{
++  {
++    "xpath",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__GetItemReq, xpath),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__get_item_req__field_indices_by_name[] = {
++  0,   /* field[0] = xpath */
++};
++static const ProtobufCIntRange sr__get_item_req__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 1 }
++};
++const ProtobufCMessageDescriptor sr__get_item_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.GetItemReq",
++  "GetItemReq",
++  "Sr__GetItemReq",
++  "sr",
++  sizeof(Sr__GetItemReq),
++  1,
++  sr__get_item_req__field_descriptors,
++  sr__get_item_req__field_indices_by_name,
++  1,  sr__get_item_req__number_ranges,
++  (ProtobufCMessageInit) sr__get_item_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__get_item_resp__field_descriptors[1] =
++{
++  {
++    "value",
++    1,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__GetItemResp, value),
++    &sr__value__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__get_item_resp__field_indices_by_name[] = {
++  0,   /* field[0] = value */
++};
++static const ProtobufCIntRange sr__get_item_resp__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 1 }
++};
++const ProtobufCMessageDescriptor sr__get_item_resp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.GetItemResp",
++  "GetItemResp",
++  "Sr__GetItemResp",
++  "sr",
++  sizeof(Sr__GetItemResp),
++  1,
++  sr__get_item_resp__field_descriptors,
++  sr__get_item_resp__field_indices_by_name,
++  1,  sr__get_item_resp__number_ranges,
++  (ProtobufCMessageInit) sr__get_item_resp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__get_items_req__field_descriptors[3] =
++{
++  {
++    "xpath",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__GetItemsReq, xpath),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "limit",
++    2,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_UINT32,
++    offsetof(Sr__GetItemsReq, has_limit),
++    offsetof(Sr__GetItemsReq, limit),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "offset",
++    3,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_UINT32,
++    offsetof(Sr__GetItemsReq, has_offset),
++    offsetof(Sr__GetItemsReq, offset),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__get_items_req__field_indices_by_name[] = {
++  1,   /* field[1] = limit */
++  2,   /* field[2] = offset */
++  0,   /* field[0] = xpath */
++};
++static const ProtobufCIntRange sr__get_items_req__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 3 }
++};
++const ProtobufCMessageDescriptor sr__get_items_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.GetItemsReq",
++  "GetItemsReq",
++  "Sr__GetItemsReq",
++  "sr",
++  sizeof(Sr__GetItemsReq),
++  3,
++  sr__get_items_req__field_descriptors,
++  sr__get_items_req__field_indices_by_name,
++  1,  sr__get_items_req__number_ranges,
++  (ProtobufCMessageInit) sr__get_items_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__get_items_resp__field_descriptors[1] =
++{
++  {
++    "values",
++    1,
++    PROTOBUF_C_LABEL_REPEATED,
++    PROTOBUF_C_TYPE_MESSAGE,
++    offsetof(Sr__GetItemsResp, n_values),
++    offsetof(Sr__GetItemsResp, values),
++    &sr__value__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__get_items_resp__field_indices_by_name[] = {
++  0,   /* field[0] = values */
++};
++static const ProtobufCIntRange sr__get_items_resp__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 1 }
++};
++const ProtobufCMessageDescriptor sr__get_items_resp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.GetItemsResp",
++  "GetItemsResp",
++  "Sr__GetItemsResp",
++  "sr",
++  sizeof(Sr__GetItemsResp),
++  1,
++  sr__get_items_resp__field_descriptors,
++  sr__get_items_resp__field_indices_by_name,
++  1,  sr__get_items_resp__number_ranges,
++  (ProtobufCMessageInit) sr__get_items_resp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__get_subtree_req__field_descriptors[1] =
++{
++  {
++    "xpath",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__GetSubtreeReq, xpath),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__get_subtree_req__field_indices_by_name[] = {
++  0,   /* field[0] = xpath */
++};
++static const ProtobufCIntRange sr__get_subtree_req__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 1 }
++};
++const ProtobufCMessageDescriptor sr__get_subtree_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.GetSubtreeReq",
++  "GetSubtreeReq",
++  "Sr__GetSubtreeReq",
++  "sr",
++  sizeof(Sr__GetSubtreeReq),
++  1,
++  sr__get_subtree_req__field_descriptors,
++  sr__get_subtree_req__field_indices_by_name,
++  1,  sr__get_subtree_req__number_ranges,
++  (ProtobufCMessageInit) sr__get_subtree_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__get_subtree_resp__field_descriptors[1] =
++{
++  {
++    "tree",
++    1,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__GetSubtreeResp, tree),
++    &sr__node__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__get_subtree_resp__field_indices_by_name[] = {
++  0,   /* field[0] = tree */
++};
++static const ProtobufCIntRange sr__get_subtree_resp__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 1 }
++};
++const ProtobufCMessageDescriptor sr__get_subtree_resp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.GetSubtreeResp",
++  "GetSubtreeResp",
++  "Sr__GetSubtreeResp",
++  "sr",
++  sizeof(Sr__GetSubtreeResp),
++  1,
++  sr__get_subtree_resp__field_descriptors,
++  sr__get_subtree_resp__field_indices_by_name,
++  1,  sr__get_subtree_resp__number_ranges,
++  (ProtobufCMessageInit) sr__get_subtree_resp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__get_subtrees_req__field_descriptors[1] =
++{
++  {
++    "xpath",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__GetSubtreesReq, xpath),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__get_subtrees_req__field_indices_by_name[] = {
++  0,   /* field[0] = xpath */
++};
++static const ProtobufCIntRange sr__get_subtrees_req__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 1 }
++};
++const ProtobufCMessageDescriptor sr__get_subtrees_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.GetSubtreesReq",
++  "GetSubtreesReq",
++  "Sr__GetSubtreesReq",
++  "sr",
++  sizeof(Sr__GetSubtreesReq),
++  1,
++  sr__get_subtrees_req__field_descriptors,
++  sr__get_subtrees_req__field_indices_by_name,
++  1,  sr__get_subtrees_req__number_ranges,
++  (ProtobufCMessageInit) sr__get_subtrees_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__get_subtrees_resp__field_descriptors[1] =
++{
++  {
++    "trees",
++    1,
++    PROTOBUF_C_LABEL_REPEATED,
++    PROTOBUF_C_TYPE_MESSAGE,
++    offsetof(Sr__GetSubtreesResp, n_trees),
++    offsetof(Sr__GetSubtreesResp, trees),
++    &sr__node__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__get_subtrees_resp__field_indices_by_name[] = {
++  0,   /* field[0] = trees */
++};
++static const ProtobufCIntRange sr__get_subtrees_resp__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 1 }
++};
++const ProtobufCMessageDescriptor sr__get_subtrees_resp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.GetSubtreesResp",
++  "GetSubtreesResp",
++  "Sr__GetSubtreesResp",
++  "sr",
++  sizeof(Sr__GetSubtreesResp),
++  1,
++  sr__get_subtrees_resp__field_descriptors,
++  sr__get_subtrees_resp__field_indices_by_name,
++  1,  sr__get_subtrees_resp__number_ranges,
++  (ProtobufCMessageInit) sr__get_subtrees_resp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__get_subtree_chunk_req__field_descriptors[6] =
++{
++  {
++    "xpath",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__GetSubtreeChunkReq, xpath),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "single",
++    2,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_BOOL,
++    0,   /* quantifier_offset */
++    offsetof(Sr__GetSubtreeChunkReq, single),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "slice_offset",
++    3,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_UINT32,
++    0,   /* quantifier_offset */
++    offsetof(Sr__GetSubtreeChunkReq, slice_offset),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "slice_width",
++    4,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_UINT32,
++    0,   /* quantifier_offset */
++    offsetof(Sr__GetSubtreeChunkReq, slice_width),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "child_limit",
++    5,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_UINT32,
++    0,   /* quantifier_offset */
++    offsetof(Sr__GetSubtreeChunkReq, child_limit),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "depth_limit",
++    6,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_UINT32,
++    0,   /* quantifier_offset */
++    offsetof(Sr__GetSubtreeChunkReq, depth_limit),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__get_subtree_chunk_req__field_indices_by_name[] = {
++  4,   /* field[4] = child_limit */
++  5,   /* field[5] = depth_limit */
++  1,   /* field[1] = single */
++  2,   /* field[2] = slice_offset */
++  3,   /* field[3] = slice_width */
++  0,   /* field[0] = xpath */
++};
++static const ProtobufCIntRange sr__get_subtree_chunk_req__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 6 }
++};
++const ProtobufCMessageDescriptor sr__get_subtree_chunk_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.GetSubtreeChunkReq",
++  "GetSubtreeChunkReq",
++  "Sr__GetSubtreeChunkReq",
++  "sr",
++  sizeof(Sr__GetSubtreeChunkReq),
++  6,
++  sr__get_subtree_chunk_req__field_descriptors,
++  sr__get_subtree_chunk_req__field_indices_by_name,
++  1,  sr__get_subtree_chunk_req__number_ranges,
++  (ProtobufCMessageInit) sr__get_subtree_chunk_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__get_subtree_chunk_resp__field_descriptors[2] =
++{
++  {
++    "xpath",
++    1,
++    PROTOBUF_C_LABEL_REPEATED,
++    PROTOBUF_C_TYPE_STRING,
++    offsetof(Sr__GetSubtreeChunkResp, n_xpath),
++    offsetof(Sr__GetSubtreeChunkResp, xpath),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "chunk",
++    2,
++    PROTOBUF_C_LABEL_REPEATED,
++    PROTOBUF_C_TYPE_MESSAGE,
++    offsetof(Sr__GetSubtreeChunkResp, n_chunk),
++    offsetof(Sr__GetSubtreeChunkResp, chunk),
++    &sr__node__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__get_subtree_chunk_resp__field_indices_by_name[] = {
++  1,   /* field[1] = chunk */
++  0,   /* field[0] = xpath */
++};
++static const ProtobufCIntRange sr__get_subtree_chunk_resp__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 2 }
++};
++const ProtobufCMessageDescriptor sr__get_subtree_chunk_resp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.GetSubtreeChunkResp",
++  "GetSubtreeChunkResp",
++  "Sr__GetSubtreeChunkResp",
++  "sr",
++  sizeof(Sr__GetSubtreeChunkResp),
++  2,
++  sr__get_subtree_chunk_resp__field_descriptors,
++  sr__get_subtree_chunk_resp__field_indices_by_name,
++  1,  sr__get_subtree_chunk_resp__number_ranges,
++  (ProtobufCMessageInit) sr__get_subtree_chunk_resp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__set_item_req__field_descriptors[3] =
++{
++  {
++    "xpath",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__SetItemReq, xpath),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "value",
++    2,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__SetItemReq, value),
++    &sr__value__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "options",
++    3,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_UINT32,
++    0,   /* quantifier_offset */
++    offsetof(Sr__SetItemReq, options),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__set_item_req__field_indices_by_name[] = {
++  2,   /* field[2] = options */
++  1,   /* field[1] = value */
++  0,   /* field[0] = xpath */
++};
++static const ProtobufCIntRange sr__set_item_req__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 3 }
++};
++const ProtobufCMessageDescriptor sr__set_item_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.SetItemReq",
++  "SetItemReq",
++  "Sr__SetItemReq",
++  "sr",
++  sizeof(Sr__SetItemReq),
++  3,
++  sr__set_item_req__field_descriptors,
++  sr__set_item_req__field_indices_by_name,
++  1,  sr__set_item_req__number_ranges,
++  (ProtobufCMessageInit) sr__set_item_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++#define sr__set_item_resp__field_descriptors NULL
++#define sr__set_item_resp__field_indices_by_name NULL
++#define sr__set_item_resp__number_ranges NULL
++const ProtobufCMessageDescriptor sr__set_item_resp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.SetItemResp",
++  "SetItemResp",
++  "Sr__SetItemResp",
++  "sr",
++  sizeof(Sr__SetItemResp),
++  0,
++  sr__set_item_resp__field_descriptors,
++  sr__set_item_resp__field_indices_by_name,
++  0,  sr__set_item_resp__number_ranges,
++  (ProtobufCMessageInit) sr__set_item_resp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__set_item_str_req__field_descriptors[3] =
++{
++  {
++    "xpath",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__SetItemStrReq, xpath),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "value",
++    2,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__SetItemStrReq, value),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "options",
++    3,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_UINT32,
++    0,   /* quantifier_offset */
++    offsetof(Sr__SetItemStrReq, options),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__set_item_str_req__field_indices_by_name[] = {
++  2,   /* field[2] = options */
++  1,   /* field[1] = value */
++  0,   /* field[0] = xpath */
++};
++static const ProtobufCIntRange sr__set_item_str_req__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 3 }
++};
++const ProtobufCMessageDescriptor sr__set_item_str_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.SetItemStrReq",
++  "SetItemStrReq",
++  "Sr__SetItemStrReq",
++  "sr",
++  sizeof(Sr__SetItemStrReq),
++  3,
++  sr__set_item_str_req__field_descriptors,
++  sr__set_item_str_req__field_indices_by_name,
++  1,  sr__set_item_str_req__number_ranges,
++  (ProtobufCMessageInit) sr__set_item_str_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++#define sr__set_item_str_resp__field_descriptors NULL
++#define sr__set_item_str_resp__field_indices_by_name NULL
++#define sr__set_item_str_resp__number_ranges NULL
++const ProtobufCMessageDescriptor sr__set_item_str_resp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.SetItemStrResp",
++  "SetItemStrResp",
++  "Sr__SetItemStrResp",
++  "sr",
++  sizeof(Sr__SetItemStrResp),
++  0,
++  sr__set_item_str_resp__field_descriptors,
++  sr__set_item_str_resp__field_indices_by_name,
++  0,  sr__set_item_str_resp__number_ranges,
++  (ProtobufCMessageInit) sr__set_item_str_resp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__delete_item_req__field_descriptors[2] =
++{
++  {
++    "xpath",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__DeleteItemReq, xpath),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "options",
++    3,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_UINT32,
++    0,   /* quantifier_offset */
++    offsetof(Sr__DeleteItemReq, options),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__delete_item_req__field_indices_by_name[] = {
++  1,   /* field[1] = options */
++  0,   /* field[0] = xpath */
++};
++static const ProtobufCIntRange sr__delete_item_req__number_ranges[2 + 1] =
++{
++  { 1, 0 },
++  { 3, 1 },
++  { 0, 2 }
++};
++const ProtobufCMessageDescriptor sr__delete_item_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.DeleteItemReq",
++  "DeleteItemReq",
++  "Sr__DeleteItemReq",
++  "sr",
++  sizeof(Sr__DeleteItemReq),
++  2,
++  sr__delete_item_req__field_descriptors,
++  sr__delete_item_req__field_indices_by_name,
++  2,  sr__delete_item_req__number_ranges,
++  (ProtobufCMessageInit) sr__delete_item_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++#define sr__delete_item_resp__field_descriptors NULL
++#define sr__delete_item_resp__field_indices_by_name NULL
++#define sr__delete_item_resp__number_ranges NULL
++const ProtobufCMessageDescriptor sr__delete_item_resp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.DeleteItemResp",
++  "DeleteItemResp",
++  "Sr__DeleteItemResp",
++  "sr",
++  sizeof(Sr__DeleteItemResp),
++  0,
++  sr__delete_item_resp__field_descriptors,
++  sr__delete_item_resp__field_indices_by_name,
++  0,  sr__delete_item_resp__number_ranges,
++  (ProtobufCMessageInit) sr__delete_item_resp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCEnumValue sr__move_item_req__move_position__enum_values_by_number[4] =
++{
++  { "BEFORE", "SR__MOVE_ITEM_REQ__MOVE_POSITION__BEFORE", 1 },
++  { "AFTER", "SR__MOVE_ITEM_REQ__MOVE_POSITION__AFTER", 2 },
++  { "FIRST", "SR__MOVE_ITEM_REQ__MOVE_POSITION__FIRST", 3 },
++  { "LAST", "SR__MOVE_ITEM_REQ__MOVE_POSITION__LAST", 4 },
++};
++static const ProtobufCIntRange sr__move_item_req__move_position__value_ranges[] = {
++{1, 0},{0, 4}
++};
++static const ProtobufCEnumValueIndex sr__move_item_req__move_position__enum_values_by_name[4] =
++{
++  { "AFTER", 1 },
++  { "BEFORE", 0 },
++  { "FIRST", 2 },
++  { "LAST", 3 },
++};
++const ProtobufCEnumDescriptor sr__move_item_req__move_position__descriptor =
++{
++  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
++  "sr.MoveItemReq.MovePosition",
++  "MovePosition",
++  "Sr__MoveItemReq__MovePosition",
++  "sr",
++  4,
++  sr__move_item_req__move_position__enum_values_by_number,
++  4,
++  sr__move_item_req__move_position__enum_values_by_name,
++  1,
++  sr__move_item_req__move_position__value_ranges,
++  NULL,NULL,NULL,NULL   /* reserved[1234] */
++};
++static const ProtobufCFieldDescriptor sr__move_item_req__field_descriptors[3] =
++{
++  {
++    "xpath",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__MoveItemReq, xpath),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "position",
++    2,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_ENUM,
++    0,   /* quantifier_offset */
++    offsetof(Sr__MoveItemReq, position),
++    &sr__move_item_req__move_position__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "relative_item",
++    3,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__MoveItemReq, relative_item),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__move_item_req__field_indices_by_name[] = {
++  1,   /* field[1] = position */
++  2,   /* field[2] = relative_item */
++  0,   /* field[0] = xpath */
++};
++static const ProtobufCIntRange sr__move_item_req__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 3 }
++};
++const ProtobufCMessageDescriptor sr__move_item_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.MoveItemReq",
++  "MoveItemReq",
++  "Sr__MoveItemReq",
++  "sr",
++  sizeof(Sr__MoveItemReq),
++  3,
++  sr__move_item_req__field_descriptors,
++  sr__move_item_req__field_indices_by_name,
++  1,  sr__move_item_req__number_ranges,
++  (ProtobufCMessageInit) sr__move_item_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++#define sr__move_item_resp__field_descriptors NULL
++#define sr__move_item_resp__field_indices_by_name NULL
++#define sr__move_item_resp__number_ranges NULL
++const ProtobufCMessageDescriptor sr__move_item_resp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.MoveItemResp",
++  "MoveItemResp",
++  "Sr__MoveItemResp",
++  "sr",
++  sizeof(Sr__MoveItemResp),
++  0,
++  sr__move_item_resp__field_descriptors,
++  sr__move_item_resp__field_indices_by_name,
++  0,  sr__move_item_resp__number_ranges,
++  (ProtobufCMessageInit) sr__move_item_resp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++#define sr__validate_req__field_descriptors NULL
++#define sr__validate_req__field_indices_by_name NULL
++#define sr__validate_req__number_ranges NULL
++const ProtobufCMessageDescriptor sr__validate_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.ValidateReq",
++  "ValidateReq",
++  "Sr__ValidateReq",
++  "sr",
++  sizeof(Sr__ValidateReq),
++  0,
++  sr__validate_req__field_descriptors,
++  sr__validate_req__field_indices_by_name,
++  0,  sr__validate_req__number_ranges,
++  (ProtobufCMessageInit) sr__validate_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__validate_resp__field_descriptors[1] =
++{
++  {
++    "errors",
++    1,
++    PROTOBUF_C_LABEL_REPEATED,
++    PROTOBUF_C_TYPE_MESSAGE,
++    offsetof(Sr__ValidateResp, n_errors),
++    offsetof(Sr__ValidateResp, errors),
++    &sr__error__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__validate_resp__field_indices_by_name[] = {
++  0,   /* field[0] = errors */
++};
++static const ProtobufCIntRange sr__validate_resp__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 1 }
++};
++const ProtobufCMessageDescriptor sr__validate_resp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.ValidateResp",
++  "ValidateResp",
++  "Sr__ValidateResp",
++  "sr",
++  sizeof(Sr__ValidateResp),
++  1,
++  sr__validate_resp__field_descriptors,
++  sr__validate_resp__field_indices_by_name,
++  1,  sr__validate_resp__number_ranges,
++  (ProtobufCMessageInit) sr__validate_resp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++#define sr__commit_req__field_descriptors NULL
++#define sr__commit_req__field_indices_by_name NULL
++#define sr__commit_req__number_ranges NULL
++const ProtobufCMessageDescriptor sr__commit_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.CommitReq",
++  "CommitReq",
++  "Sr__CommitReq",
++  "sr",
++  sizeof(Sr__CommitReq),
++  0,
++  sr__commit_req__field_descriptors,
++  sr__commit_req__field_indices_by_name,
++  0,  sr__commit_req__number_ranges,
++  (ProtobufCMessageInit) sr__commit_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__commit_resp__field_descriptors[1] =
++{
++  {
++    "errors",
++    1,
++    PROTOBUF_C_LABEL_REPEATED,
++    PROTOBUF_C_TYPE_MESSAGE,
++    offsetof(Sr__CommitResp, n_errors),
++    offsetof(Sr__CommitResp, errors),
++    &sr__error__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__commit_resp__field_indices_by_name[] = {
++  0,   /* field[0] = errors */
++};
++static const ProtobufCIntRange sr__commit_resp__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 1 }
++};
++const ProtobufCMessageDescriptor sr__commit_resp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.CommitResp",
++  "CommitResp",
++  "Sr__CommitResp",
++  "sr",
++  sizeof(Sr__CommitResp),
++  1,
++  sr__commit_resp__field_descriptors,
++  sr__commit_resp__field_indices_by_name,
++  1,  sr__commit_resp__number_ranges,
++  (ProtobufCMessageInit) sr__commit_resp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++#define sr__discard_changes_req__field_descriptors NULL
++#define sr__discard_changes_req__field_indices_by_name NULL
++#define sr__discard_changes_req__number_ranges NULL
++const ProtobufCMessageDescriptor sr__discard_changes_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.DiscardChangesReq",
++  "DiscardChangesReq",
++  "Sr__DiscardChangesReq",
++  "sr",
++  sizeof(Sr__DiscardChangesReq),
++  0,
++  sr__discard_changes_req__field_descriptors,
++  sr__discard_changes_req__field_indices_by_name,
++  0,  sr__discard_changes_req__number_ranges,
++  (ProtobufCMessageInit) sr__discard_changes_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++#define sr__discard_changes_resp__field_descriptors NULL
++#define sr__discard_changes_resp__field_indices_by_name NULL
++#define sr__discard_changes_resp__number_ranges NULL
++const ProtobufCMessageDescriptor sr__discard_changes_resp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.DiscardChangesResp",
++  "DiscardChangesResp",
++  "Sr__DiscardChangesResp",
++  "sr",
++  sizeof(Sr__DiscardChangesResp),
++  0,
++  sr__discard_changes_resp__field_descriptors,
++  sr__discard_changes_resp__field_indices_by_name,
++  0,  sr__discard_changes_resp__number_ranges,
++  (ProtobufCMessageInit) sr__discard_changes_resp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__copy_config_req__field_descriptors[3] =
++{
++  {
++    "src_datastore",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_ENUM,
++    0,   /* quantifier_offset */
++    offsetof(Sr__CopyConfigReq, src_datastore),
++    &sr__data_store__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "dst_datastore",
++    2,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_ENUM,
++    0,   /* quantifier_offset */
++    offsetof(Sr__CopyConfigReq, dst_datastore),
++    &sr__data_store__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "module_name",
++    3,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__CopyConfigReq, module_name),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__copy_config_req__field_indices_by_name[] = {
++  1,   /* field[1] = dst_datastore */
++  2,   /* field[2] = module_name */
++  0,   /* field[0] = src_datastore */
++};
++static const ProtobufCIntRange sr__copy_config_req__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 3 }
++};
++const ProtobufCMessageDescriptor sr__copy_config_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.CopyConfigReq",
++  "CopyConfigReq",
++  "Sr__CopyConfigReq",
++  "sr",
++  sizeof(Sr__CopyConfigReq),
++  3,
++  sr__copy_config_req__field_descriptors,
++  sr__copy_config_req__field_indices_by_name,
++  1,  sr__copy_config_req__number_ranges,
++  (ProtobufCMessageInit) sr__copy_config_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__copy_config_resp__field_descriptors[1] =
++{
++  {
++    "errors",
++    1,
++    PROTOBUF_C_LABEL_REPEATED,
++    PROTOBUF_C_TYPE_MESSAGE,
++    offsetof(Sr__CopyConfigResp, n_errors),
++    offsetof(Sr__CopyConfigResp, errors),
++    &sr__error__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__copy_config_resp__field_indices_by_name[] = {
++  0,   /* field[0] = errors */
++};
++static const ProtobufCIntRange sr__copy_config_resp__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 1 }
++};
++const ProtobufCMessageDescriptor sr__copy_config_resp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.CopyConfigResp",
++  "CopyConfigResp",
++  "Sr__CopyConfigResp",
++  "sr",
++  sizeof(Sr__CopyConfigResp),
++  1,
++  sr__copy_config_resp__field_descriptors,
++  sr__copy_config_resp__field_indices_by_name,
++  1,  sr__copy_config_resp__number_ranges,
++  (ProtobufCMessageInit) sr__copy_config_resp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__lock_req__field_descriptors[1] =
++{
++  {
++    "module_name",
++    1,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__LockReq, module_name),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__lock_req__field_indices_by_name[] = {
++  0,   /* field[0] = module_name */
++};
++static const ProtobufCIntRange sr__lock_req__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 1 }
++};
++const ProtobufCMessageDescriptor sr__lock_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.LockReq",
++  "LockReq",
++  "Sr__LockReq",
++  "sr",
++  sizeof(Sr__LockReq),
++  1,
++  sr__lock_req__field_descriptors,
++  sr__lock_req__field_indices_by_name,
++  1,  sr__lock_req__number_ranges,
++  (ProtobufCMessageInit) sr__lock_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++#define sr__lock_resp__field_descriptors NULL
++#define sr__lock_resp__field_indices_by_name NULL
++#define sr__lock_resp__number_ranges NULL
++const ProtobufCMessageDescriptor sr__lock_resp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.LockResp",
++  "LockResp",
++  "Sr__LockResp",
++  "sr",
++  sizeof(Sr__LockResp),
++  0,
++  sr__lock_resp__field_descriptors,
++  sr__lock_resp__field_indices_by_name,
++  0,  sr__lock_resp__number_ranges,
++  (ProtobufCMessageInit) sr__lock_resp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__unlock_req__field_descriptors[1] =
++{
++  {
++    "module_name",
++    1,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__UnlockReq, module_name),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__unlock_req__field_indices_by_name[] = {
++  0,   /* field[0] = module_name */
++};
++static const ProtobufCIntRange sr__unlock_req__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 1 }
++};
++const ProtobufCMessageDescriptor sr__unlock_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.UnlockReq",
++  "UnlockReq",
++  "Sr__UnlockReq",
++  "sr",
++  sizeof(Sr__UnlockReq),
++  1,
++  sr__unlock_req__field_descriptors,
++  sr__unlock_req__field_indices_by_name,
++  1,  sr__unlock_req__number_ranges,
++  (ProtobufCMessageInit) sr__unlock_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++#define sr__unlock_resp__field_descriptors NULL
++#define sr__unlock_resp__field_indices_by_name NULL
++#define sr__unlock_resp__number_ranges NULL
++const ProtobufCMessageDescriptor sr__unlock_resp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.UnlockResp",
++  "UnlockResp",
++  "Sr__UnlockResp",
++  "sr",
++  sizeof(Sr__UnlockResp),
++  0,
++  sr__unlock_resp__field_descriptors,
++  sr__unlock_resp__field_indices_by_name,
++  0,  sr__unlock_resp__number_ranges,
++  (ProtobufCMessageInit) sr__unlock_resp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__subscribe_req__field_descriptors[10] =
++{
++  {
++    "type",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_ENUM,
++    0,   /* quantifier_offset */
++    offsetof(Sr__SubscribeReq, type),
++    &sr__subscription_type__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "destination",
++    2,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__SubscribeReq, destination),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "subscription_id",
++    3,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_UINT32,
++    0,   /* quantifier_offset */
++    offsetof(Sr__SubscribeReq, subscription_id),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "module_name",
++    4,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__SubscribeReq, module_name),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "xpath",
++    5,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__SubscribeReq, xpath),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "notif_event",
++    10,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_ENUM,
++    offsetof(Sr__SubscribeReq, has_notif_event),
++    offsetof(Sr__SubscribeReq, notif_event),
++    &sr__notification_event__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "priority",
++    11,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_UINT32,
++    offsetof(Sr__SubscribeReq, has_priority),
++    offsetof(Sr__SubscribeReq, priority),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "enable_running",
++    12,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_BOOL,
++    offsetof(Sr__SubscribeReq, has_enable_running),
++    offsetof(Sr__SubscribeReq, enable_running),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "enable_event",
++    13,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_BOOL,
++    offsetof(Sr__SubscribeReq, has_enable_event),
++    offsetof(Sr__SubscribeReq, enable_event),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "api_variant",
++    20,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_ENUM,
++    0,   /* quantifier_offset */
++    offsetof(Sr__SubscribeReq, api_variant),
++    &sr__api_variant__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__subscribe_req__field_indices_by_name[] = {
++  9,   /* field[9] = api_variant */
++  1,   /* field[1] = destination */
++  8,   /* field[8] = enable_event */
++  7,   /* field[7] = enable_running */
++  3,   /* field[3] = module_name */
++  5,   /* field[5] = notif_event */
++  6,   /* field[6] = priority */
++  2,   /* field[2] = subscription_id */
++  0,   /* field[0] = type */
++  4,   /* field[4] = xpath */
++};
++static const ProtobufCIntRange sr__subscribe_req__number_ranges[3 + 1] =
++{
++  { 1, 0 },
++  { 10, 5 },
++  { 20, 9 },
++  { 0, 10 }
++};
++const ProtobufCMessageDescriptor sr__subscribe_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.SubscribeReq",
++  "SubscribeReq",
++  "Sr__SubscribeReq",
++  "sr",
++  sizeof(Sr__SubscribeReq),
++  10,
++  sr__subscribe_req__field_descriptors,
++  sr__subscribe_req__field_indices_by_name,
++  3,  sr__subscribe_req__number_ranges,
++  (ProtobufCMessageInit) sr__subscribe_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++#define sr__subscribe_resp__field_descriptors NULL
++#define sr__subscribe_resp__field_indices_by_name NULL
++#define sr__subscribe_resp__number_ranges NULL
++const ProtobufCMessageDescriptor sr__subscribe_resp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.SubscribeResp",
++  "SubscribeResp",
++  "Sr__SubscribeResp",
++  "sr",
++  sizeof(Sr__SubscribeResp),
++  0,
++  sr__subscribe_resp__field_descriptors,
++  sr__subscribe_resp__field_indices_by_name,
++  0,  sr__subscribe_resp__number_ranges,
++  (ProtobufCMessageInit) sr__subscribe_resp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__unsubscribe_req__field_descriptors[4] =
++{
++  {
++    "type",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_ENUM,
++    0,   /* quantifier_offset */
++    offsetof(Sr__UnsubscribeReq, type),
++    &sr__subscription_type__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "destination",
++    2,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__UnsubscribeReq, destination),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "subscription_id",
++    3,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_UINT32,
++    0,   /* quantifier_offset */
++    offsetof(Sr__UnsubscribeReq, subscription_id),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "module_name",
++    4,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__UnsubscribeReq, module_name),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__unsubscribe_req__field_indices_by_name[] = {
++  1,   /* field[1] = destination */
++  3,   /* field[3] = module_name */
++  2,   /* field[2] = subscription_id */
++  0,   /* field[0] = type */
++};
++static const ProtobufCIntRange sr__unsubscribe_req__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 4 }
++};
++const ProtobufCMessageDescriptor sr__unsubscribe_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.UnsubscribeReq",
++  "UnsubscribeReq",
++  "Sr__UnsubscribeReq",
++  "sr",
++  sizeof(Sr__UnsubscribeReq),
++  4,
++  sr__unsubscribe_req__field_descriptors,
++  sr__unsubscribe_req__field_indices_by_name,
++  1,  sr__unsubscribe_req__number_ranges,
++  (ProtobufCMessageInit) sr__unsubscribe_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++#define sr__unsubscribe_resp__field_descriptors NULL
++#define sr__unsubscribe_resp__field_indices_by_name NULL
++#define sr__unsubscribe_resp__number_ranges NULL
++const ProtobufCMessageDescriptor sr__unsubscribe_resp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.UnsubscribeResp",
++  "UnsubscribeResp",
++  "Sr__UnsubscribeResp",
++  "sr",
++  sizeof(Sr__UnsubscribeResp),
++  0,
++  sr__unsubscribe_resp__field_descriptors,
++  sr__unsubscribe_resp__field_indices_by_name,
++  0,  sr__unsubscribe_resp__number_ranges,
++  (ProtobufCMessageInit) sr__unsubscribe_resp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__check_enabled_running_req__field_descriptors[1] =
++{
++  {
++    "module_name",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__CheckEnabledRunningReq, module_name),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__check_enabled_running_req__field_indices_by_name[] = {
++  0,   /* field[0] = module_name */
++};
++static const ProtobufCIntRange sr__check_enabled_running_req__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 1 }
++};
++const ProtobufCMessageDescriptor sr__check_enabled_running_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.CheckEnabledRunningReq",
++  "CheckEnabledRunningReq",
++  "Sr__CheckEnabledRunningReq",
++  "sr",
++  sizeof(Sr__CheckEnabledRunningReq),
++  1,
++  sr__check_enabled_running_req__field_descriptors,
++  sr__check_enabled_running_req__field_indices_by_name,
++  1,  sr__check_enabled_running_req__number_ranges,
++  (ProtobufCMessageInit) sr__check_enabled_running_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__check_enabled_running_resp__field_descriptors[1] =
++{
++  {
++    "enabled",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_BOOL,
++    0,   /* quantifier_offset */
++    offsetof(Sr__CheckEnabledRunningResp, enabled),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__check_enabled_running_resp__field_indices_by_name[] = {
++  0,   /* field[0] = enabled */
++};
++static const ProtobufCIntRange sr__check_enabled_running_resp__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 1 }
++};
++const ProtobufCMessageDescriptor sr__check_enabled_running_resp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.CheckEnabledRunningResp",
++  "CheckEnabledRunningResp",
++  "Sr__CheckEnabledRunningResp",
++  "sr",
++  sizeof(Sr__CheckEnabledRunningResp),
++  1,
++  sr__check_enabled_running_resp__field_descriptors,
++  sr__check_enabled_running_resp__field_indices_by_name,
++  1,  sr__check_enabled_running_resp__number_ranges,
++  (ProtobufCMessageInit) sr__check_enabled_running_resp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__module_install_notification__field_descriptors[3] =
++{
++  {
++    "module_name",
++    1,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__ModuleInstallNotification, module_name),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "revision",
++    2,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__ModuleInstallNotification, revision),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "state",
++    3,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_ENUM,
++    0,   /* quantifier_offset */
++    offsetof(Sr__ModuleInstallNotification, state),
++    &sr__module_state__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__module_install_notification__field_indices_by_name[] = {
++  0,   /* field[0] = module_name */
++  1,   /* field[1] = revision */
++  2,   /* field[2] = state */
++};
++static const ProtobufCIntRange sr__module_install_notification__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 3 }
++};
++const ProtobufCMessageDescriptor sr__module_install_notification__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.ModuleInstallNotification",
++  "ModuleInstallNotification",
++  "Sr__ModuleInstallNotification",
++  "sr",
++  sizeof(Sr__ModuleInstallNotification),
++  3,
++  sr__module_install_notification__field_descriptors,
++  sr__module_install_notification__field_indices_by_name,
++  1,  sr__module_install_notification__number_ranges,
++  (ProtobufCMessageInit) sr__module_install_notification__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__feature_enable_notification__field_descriptors[3] =
++{
++  {
++    "module_name",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__FeatureEnableNotification, module_name),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "feature_name",
++    2,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__FeatureEnableNotification, feature_name),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "enabled",
++    3,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_BOOL,
++    0,   /* quantifier_offset */
++    offsetof(Sr__FeatureEnableNotification, enabled),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__feature_enable_notification__field_indices_by_name[] = {
++  2,   /* field[2] = enabled */
++  1,   /* field[1] = feature_name */
++  0,   /* field[0] = module_name */
++};
++static const ProtobufCIntRange sr__feature_enable_notification__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 3 }
++};
++const ProtobufCMessageDescriptor sr__feature_enable_notification__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.FeatureEnableNotification",
++  "FeatureEnableNotification",
++  "Sr__FeatureEnableNotification",
++  "sr",
++  sizeof(Sr__FeatureEnableNotification),
++  3,
++  sr__feature_enable_notification__field_descriptors,
++  sr__feature_enable_notification__field_indices_by_name,
++  1,  sr__feature_enable_notification__number_ranges,
++  (ProtobufCMessageInit) sr__feature_enable_notification__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__module_change_notification__field_descriptors[2] =
++{
++  {
++    "event",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_ENUM,
++    0,   /* quantifier_offset */
++    offsetof(Sr__ModuleChangeNotification, event),
++    &sr__notification_event__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "module_name",
++    2,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__ModuleChangeNotification, module_name),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__module_change_notification__field_indices_by_name[] = {
++  0,   /* field[0] = event */
++  1,   /* field[1] = module_name */
++};
++static const ProtobufCIntRange sr__module_change_notification__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 2 }
++};
++const ProtobufCMessageDescriptor sr__module_change_notification__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.ModuleChangeNotification",
++  "ModuleChangeNotification",
++  "Sr__ModuleChangeNotification",
++  "sr",
++  sizeof(Sr__ModuleChangeNotification),
++  2,
++  sr__module_change_notification__field_descriptors,
++  sr__module_change_notification__field_indices_by_name,
++  1,  sr__module_change_notification__number_ranges,
++  (ProtobufCMessageInit) sr__module_change_notification__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__subtree_change_notification__field_descriptors[2] =
++{
++  {
++    "event",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_ENUM,
++    0,   /* quantifier_offset */
++    offsetof(Sr__SubtreeChangeNotification, event),
++    &sr__notification_event__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "xpath",
++    2,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__SubtreeChangeNotification, xpath),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__subtree_change_notification__field_indices_by_name[] = {
++  0,   /* field[0] = event */
++  1,   /* field[1] = xpath */
++};
++static const ProtobufCIntRange sr__subtree_change_notification__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 2 }
++};
++const ProtobufCMessageDescriptor sr__subtree_change_notification__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.SubtreeChangeNotification",
++  "SubtreeChangeNotification",
++  "Sr__SubtreeChangeNotification",
++  "sr",
++  sizeof(Sr__SubtreeChangeNotification),
++  2,
++  sr__subtree_change_notification__field_descriptors,
++  sr__subtree_change_notification__field_indices_by_name,
++  1,  sr__subtree_change_notification__number_ranges,
++  (ProtobufCMessageInit) sr__subtree_change_notification__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__change__field_descriptors[3] =
++{
++  {
++    "changeOperation",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_ENUM,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Change, changeoperation),
++    &sr__change_operation__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "new_value",
++    2,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Change, new_value),
++    &sr__value__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "old_value",
++    3,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Change, old_value),
++    &sr__value__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__change__field_indices_by_name[] = {
++  0,   /* field[0] = changeOperation */
++  1,   /* field[1] = new_value */
++  2,   /* field[2] = old_value */
++};
++static const ProtobufCIntRange sr__change__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 3 }
++};
++const ProtobufCMessageDescriptor sr__change__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.Change",
++  "Change",
++  "Sr__Change",
++  "sr",
++  sizeof(Sr__Change),
++  3,
++  sr__change__field_descriptors,
++  sr__change__field_indices_by_name,
++  1,  sr__change__number_ranges,
++  (ProtobufCMessageInit) sr__change__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__get_changes_req__field_descriptors[3] =
++{
++  {
++    "xpath",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__GetChangesReq, xpath),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "limit",
++    2,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_UINT32,
++    0,   /* quantifier_offset */
++    offsetof(Sr__GetChangesReq, limit),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "offset",
++    3,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_UINT32,
++    0,   /* quantifier_offset */
++    offsetof(Sr__GetChangesReq, offset),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__get_changes_req__field_indices_by_name[] = {
++  1,   /* field[1] = limit */
++  2,   /* field[2] = offset */
++  0,   /* field[0] = xpath */
++};
++static const ProtobufCIntRange sr__get_changes_req__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 3 }
++};
++const ProtobufCMessageDescriptor sr__get_changes_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.GetChangesReq",
++  "GetChangesReq",
++  "Sr__GetChangesReq",
++  "sr",
++  sizeof(Sr__GetChangesReq),
++  3,
++  sr__get_changes_req__field_descriptors,
++  sr__get_changes_req__field_indices_by_name,
++  1,  sr__get_changes_req__number_ranges,
++  (ProtobufCMessageInit) sr__get_changes_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__get_changes_resp__field_descriptors[1] =
++{
++  {
++    "changes",
++    1,
++    PROTOBUF_C_LABEL_REPEATED,
++    PROTOBUF_C_TYPE_MESSAGE,
++    offsetof(Sr__GetChangesResp, n_changes),
++    offsetof(Sr__GetChangesResp, changes),
++    &sr__change__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__get_changes_resp__field_indices_by_name[] = {
++  0,   /* field[0] = changes */
++};
++static const ProtobufCIntRange sr__get_changes_resp__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 1 }
++};
++const ProtobufCMessageDescriptor sr__get_changes_resp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.GetChangesResp",
++  "GetChangesResp",
++  "Sr__GetChangesResp",
++  "sr",
++  sizeof(Sr__GetChangesResp),
++  1,
++  sr__get_changes_resp__field_descriptors,
++  sr__get_changes_resp__field_indices_by_name,
++  1,  sr__get_changes_resp__number_ranges,
++  (ProtobufCMessageInit) sr__get_changes_resp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__check_exec_perm_req__field_descriptors[1] =
++{
++  {
++    "xpath",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__CheckExecPermReq, xpath),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__check_exec_perm_req__field_indices_by_name[] = {
++  0,   /* field[0] = xpath */
++};
++static const ProtobufCIntRange sr__check_exec_perm_req__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 1 }
++};
++const ProtobufCMessageDescriptor sr__check_exec_perm_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.CheckExecPermReq",
++  "CheckExecPermReq",
++  "Sr__CheckExecPermReq",
++  "sr",
++  sizeof(Sr__CheckExecPermReq),
++  1,
++  sr__check_exec_perm_req__field_descriptors,
++  sr__check_exec_perm_req__field_indices_by_name,
++  1,  sr__check_exec_perm_req__number_ranges,
++  (ProtobufCMessageInit) sr__check_exec_perm_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__check_exec_perm_resp__field_descriptors[1] =
++{
++  {
++    "permitted",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_BOOL,
++    0,   /* quantifier_offset */
++    offsetof(Sr__CheckExecPermResp, permitted),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__check_exec_perm_resp__field_indices_by_name[] = {
++  0,   /* field[0] = permitted */
++};
++static const ProtobufCIntRange sr__check_exec_perm_resp__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 1 }
++};
++const ProtobufCMessageDescriptor sr__check_exec_perm_resp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.CheckExecPermResp",
++  "CheckExecPermResp",
++  "Sr__CheckExecPermResp",
++  "sr",
++  sizeof(Sr__CheckExecPermResp),
++  1,
++  sr__check_exec_perm_resp__field_descriptors,
++  sr__check_exec_perm_resp__field_indices_by_name,
++  1,  sr__check_exec_perm_resp__number_ranges,
++  (ProtobufCMessageInit) sr__check_exec_perm_resp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__rpcreq__field_descriptors[7] =
++{
++  {
++    "action",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_BOOL,
++    0,   /* quantifier_offset */
++    offsetof(Sr__RPCReq, action),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "xpath",
++    2,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__RPCReq, xpath),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "orig_api_variant",
++    3,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_ENUM,
++    0,   /* quantifier_offset */
++    offsetof(Sr__RPCReq, orig_api_variant),
++    &sr__api_variant__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "input",
++    4,
++    PROTOBUF_C_LABEL_REPEATED,
++    PROTOBUF_C_TYPE_MESSAGE,
++    offsetof(Sr__RPCReq, n_input),
++    offsetof(Sr__RPCReq, input),
++    &sr__value__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "input_tree",
++    5,
++    PROTOBUF_C_LABEL_REPEATED,
++    PROTOBUF_C_TYPE_MESSAGE,
++    offsetof(Sr__RPCReq, n_input_tree),
++    offsetof(Sr__RPCReq, input_tree),
++    &sr__node__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "subscriber_address",
++    10,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__RPCReq, subscriber_address),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "subscription_id",
++    11,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_UINT32,
++    offsetof(Sr__RPCReq, has_subscription_id),
++    offsetof(Sr__RPCReq, subscription_id),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__rpcreq__field_indices_by_name[] = {
++  0,   /* field[0] = action */
++  3,   /* field[3] = input */
++  4,   /* field[4] = input_tree */
++  2,   /* field[2] = orig_api_variant */
++  5,   /* field[5] = subscriber_address */
++  6,   /* field[6] = subscription_id */
++  1,   /* field[1] = xpath */
++};
++static const ProtobufCIntRange sr__rpcreq__number_ranges[2 + 1] =
++{
++  { 1, 0 },
++  { 10, 5 },
++  { 0, 7 }
++};
++const ProtobufCMessageDescriptor sr__rpcreq__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.RPCReq",
++  "RPCReq",
++  "Sr__RPCReq",
++  "sr",
++  sizeof(Sr__RPCReq),
++  7,
++  sr__rpcreq__field_descriptors,
++  sr__rpcreq__field_indices_by_name,
++  2,  sr__rpcreq__number_ranges,
++  (ProtobufCMessageInit) sr__rpcreq__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__rpcresp__field_descriptors[5] =
++{
++  {
++    "action",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_BOOL,
++    0,   /* quantifier_offset */
++    offsetof(Sr__RPCResp, action),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "xpath",
++    2,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__RPCResp, xpath),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "orig_api_variant",
++    3,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_ENUM,
++    0,   /* quantifier_offset */
++    offsetof(Sr__RPCResp, orig_api_variant),
++    &sr__api_variant__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "output",
++    4,
++    PROTOBUF_C_LABEL_REPEATED,
++    PROTOBUF_C_TYPE_MESSAGE,
++    offsetof(Sr__RPCResp, n_output),
++    offsetof(Sr__RPCResp, output),
++    &sr__value__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "output_tree",
++    5,
++    PROTOBUF_C_LABEL_REPEATED,
++    PROTOBUF_C_TYPE_MESSAGE,
++    offsetof(Sr__RPCResp, n_output_tree),
++    offsetof(Sr__RPCResp, output_tree),
++    &sr__node__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__rpcresp__field_indices_by_name[] = {
++  0,   /* field[0] = action */
++  2,   /* field[2] = orig_api_variant */
++  3,   /* field[3] = output */
++  4,   /* field[4] = output_tree */
++  1,   /* field[1] = xpath */
++};
++static const ProtobufCIntRange sr__rpcresp__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 5 }
++};
++const ProtobufCMessageDescriptor sr__rpcresp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.RPCResp",
++  "RPCResp",
++  "Sr__RPCResp",
++  "sr",
++  sizeof(Sr__RPCResp),
++  5,
++  sr__rpcresp__field_descriptors,
++  sr__rpcresp__field_indices_by_name,
++  1,  sr__rpcresp__number_ranges,
++  (ProtobufCMessageInit) sr__rpcresp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCEnumValue sr__event_notif_req__notif_type__enum_values_by_number[4] =
++{
++  { "REALTIME", "SR__EVENT_NOTIF_REQ__NOTIF_TYPE__REALTIME", 1 },
++  { "REPLAY", "SR__EVENT_NOTIF_REQ__NOTIF_TYPE__REPLAY", 2 },
++  { "REPLAY_COMPLETE", "SR__EVENT_NOTIF_REQ__NOTIF_TYPE__REPLAY_COMPLETE", 3 },
++  { "REPLAY_STOP", "SR__EVENT_NOTIF_REQ__NOTIF_TYPE__REPLAY_STOP", 4 },
++};
++static const ProtobufCIntRange sr__event_notif_req__notif_type__value_ranges[] = {
++{1, 0},{0, 4}
++};
++static const ProtobufCEnumValueIndex sr__event_notif_req__notif_type__enum_values_by_name[4] =
++{
++  { "REALTIME", 0 },
++  { "REPLAY", 1 },
++  { "REPLAY_COMPLETE", 2 },
++  { "REPLAY_STOP", 3 },
++};
++const ProtobufCEnumDescriptor sr__event_notif_req__notif_type__descriptor =
++{
++  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
++  "sr.EventNotifReq.NotifType",
++  "NotifType",
++  "Sr__EventNotifReq__NotifType",
++  "sr",
++  4,
++  sr__event_notif_req__notif_type__enum_values_by_number,
++  4,
++  sr__event_notif_req__notif_type__enum_values_by_name,
++  1,
++  sr__event_notif_req__notif_type__value_ranges,
++  NULL,NULL,NULL,NULL   /* reserved[1234] */
++};
++static const ProtobufCEnumValue sr__event_notif_req__notif_flags__enum_values_by_number[2] =
++{
++  { "DEFAULT", "SR__EVENT_NOTIF_REQ__NOTIF_FLAGS__DEFAULT", 0 },
++  { "EPHEMERAL", "SR__EVENT_NOTIF_REQ__NOTIF_FLAGS__EPHEMERAL", 1 },
++};
++static const ProtobufCIntRange sr__event_notif_req__notif_flags__value_ranges[] = {
++{0, 0},{0, 2}
++};
++static const ProtobufCEnumValueIndex sr__event_notif_req__notif_flags__enum_values_by_name[2] =
++{
++  { "DEFAULT", 0 },
++  { "EPHEMERAL", 1 },
++};
++const ProtobufCEnumDescriptor sr__event_notif_req__notif_flags__descriptor =
++{
++  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
++  "sr.EventNotifReq.NotifFlags",
++  "NotifFlags",
++  "Sr__EventNotifReq__NotifFlags",
++  "sr",
++  2,
++  sr__event_notif_req__notif_flags__enum_values_by_number,
++  2,
++  sr__event_notif_req__notif_flags__enum_values_by_name,
++  1,
++  sr__event_notif_req__notif_flags__value_ranges,
++  NULL,NULL,NULL,NULL   /* reserved[1234] */
++};
++static const ProtobufCFieldDescriptor sr__event_notif_req__field_descriptors[9] =
++{
++  {
++    "type",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_ENUM,
++    0,   /* quantifier_offset */
++    offsetof(Sr__EventNotifReq, type),
++    &sr__event_notif_req__notif_type__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "options",
++    2,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_UINT32,
++    0,   /* quantifier_offset */
++    offsetof(Sr__EventNotifReq, options),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "xpath",
++    3,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__EventNotifReq, xpath),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "values",
++    4,
++    PROTOBUF_C_LABEL_REPEATED,
++    PROTOBUF_C_TYPE_MESSAGE,
++    offsetof(Sr__EventNotifReq, n_values),
++    offsetof(Sr__EventNotifReq, values),
++    &sr__value__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "trees",
++    5,
++    PROTOBUF_C_LABEL_REPEATED,
++    PROTOBUF_C_TYPE_MESSAGE,
++    offsetof(Sr__EventNotifReq, n_trees),
++    offsetof(Sr__EventNotifReq, trees),
++    &sr__node__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "timestamp",
++    6,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_UINT64,
++    0,   /* quantifier_offset */
++    offsetof(Sr__EventNotifReq, timestamp),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "subscriber_address",
++    10,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__EventNotifReq, subscriber_address),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "subscription_id",
++    11,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_UINT32,
++    offsetof(Sr__EventNotifReq, has_subscription_id),
++    offsetof(Sr__EventNotifReq, subscription_id),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "do_not_send_reply",
++    20,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_BOOL,
++    0,   /* quantifier_offset */
++    offsetof(Sr__EventNotifReq, do_not_send_reply),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__event_notif_req__field_indices_by_name[] = {
++  8,   /* field[8] = do_not_send_reply */
++  1,   /* field[1] = options */
++  6,   /* field[6] = subscriber_address */
++  7,   /* field[7] = subscription_id */
++  5,   /* field[5] = timestamp */
++  4,   /* field[4] = trees */
++  0,   /* field[0] = type */
++  3,   /* field[3] = values */
++  2,   /* field[2] = xpath */
++};
++static const ProtobufCIntRange sr__event_notif_req__number_ranges[3 + 1] =
++{
++  { 1, 0 },
++  { 10, 6 },
++  { 20, 8 },
++  { 0, 9 }
++};
++const ProtobufCMessageDescriptor sr__event_notif_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.EventNotifReq",
++  "EventNotifReq",
++  "Sr__EventNotifReq",
++  "sr",
++  sizeof(Sr__EventNotifReq),
++  9,
++  sr__event_notif_req__field_descriptors,
++  sr__event_notif_req__field_indices_by_name,
++  3,  sr__event_notif_req__number_ranges,
++  (ProtobufCMessageInit) sr__event_notif_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++#define sr__event_notif_resp__field_descriptors NULL
++#define sr__event_notif_resp__field_indices_by_name NULL
++#define sr__event_notif_resp__number_ranges NULL
++const ProtobufCMessageDescriptor sr__event_notif_resp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.EventNotifResp",
++  "EventNotifResp",
++  "Sr__EventNotifResp",
++  "sr",
++  sizeof(Sr__EventNotifResp),
++  0,
++  sr__event_notif_resp__field_descriptors,
++  sr__event_notif_resp__field_indices_by_name,
++  0,  sr__event_notif_resp__number_ranges,
++  (ProtobufCMessageInit) sr__event_notif_resp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__event_notif_replay_req__field_descriptors[6] =
++{
++  {
++    "xpath",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__EventNotifReplayReq, xpath),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "start_time",
++    2,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_UINT64,
++    0,   /* quantifier_offset */
++    offsetof(Sr__EventNotifReplayReq, start_time),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "stop_time",
++    3,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_UINT64,
++    0,   /* quantifier_offset */
++    offsetof(Sr__EventNotifReplayReq, stop_time),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "subscriber_address",
++    10,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__EventNotifReplayReq, subscriber_address),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "subscription_id",
++    11,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_UINT32,
++    0,   /* quantifier_offset */
++    offsetof(Sr__EventNotifReplayReq, subscription_id),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "api_variant",
++    12,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_ENUM,
++    0,   /* quantifier_offset */
++    offsetof(Sr__EventNotifReplayReq, api_variant),
++    &sr__api_variant__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__event_notif_replay_req__field_indices_by_name[] = {
++  5,   /* field[5] = api_variant */
++  1,   /* field[1] = start_time */
++  2,   /* field[2] = stop_time */
++  3,   /* field[3] = subscriber_address */
++  4,   /* field[4] = subscription_id */
++  0,   /* field[0] = xpath */
++};
++static const ProtobufCIntRange sr__event_notif_replay_req__number_ranges[2 + 1] =
++{
++  { 1, 0 },
++  { 10, 3 },
++  { 0, 6 }
++};
++const ProtobufCMessageDescriptor sr__event_notif_replay_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.EventNotifReplayReq",
++  "EventNotifReplayReq",
++  "Sr__EventNotifReplayReq",
++  "sr",
++  sizeof(Sr__EventNotifReplayReq),
++  6,
++  sr__event_notif_replay_req__field_descriptors,
++  sr__event_notif_replay_req__field_indices_by_name,
++  2,  sr__event_notif_replay_req__number_ranges,
++  (ProtobufCMessageInit) sr__event_notif_replay_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++#define sr__event_notif_replay_resp__field_descriptors NULL
++#define sr__event_notif_replay_resp__field_indices_by_name NULL
++#define sr__event_notif_replay_resp__number_ranges NULL
++const ProtobufCMessageDescriptor sr__event_notif_replay_resp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.EventNotifReplayResp",
++  "EventNotifReplayResp",
++  "Sr__EventNotifReplayResp",
++  "sr",
++  sizeof(Sr__EventNotifReplayResp),
++  0,
++  sr__event_notif_replay_resp__field_descriptors,
++  sr__event_notif_replay_resp__field_indices_by_name,
++  0,  sr__event_notif_replay_resp__number_ranges,
++  (ProtobufCMessageInit) sr__event_notif_replay_resp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__data_provide_req__field_descriptors[4] =
++{
++  {
++    "xpath",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__DataProvideReq, xpath),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "subscriber_address",
++    10,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__DataProvideReq, subscriber_address),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "subscription_id",
++    11,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_UINT32,
++    0,   /* quantifier_offset */
++    offsetof(Sr__DataProvideReq, subscription_id),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "request_id",
++    20,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_UINT64,
++    0,   /* quantifier_offset */
++    offsetof(Sr__DataProvideReq, request_id),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__data_provide_req__field_indices_by_name[] = {
++  3,   /* field[3] = request_id */
++  1,   /* field[1] = subscriber_address */
++  2,   /* field[2] = subscription_id */
++  0,   /* field[0] = xpath */
++};
++static const ProtobufCIntRange sr__data_provide_req__number_ranges[3 + 1] =
++{
++  { 1, 0 },
++  { 10, 1 },
++  { 20, 3 },
++  { 0, 4 }
++};
++const ProtobufCMessageDescriptor sr__data_provide_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.DataProvideReq",
++  "DataProvideReq",
++  "Sr__DataProvideReq",
++  "sr",
++  sizeof(Sr__DataProvideReq),
++  4,
++  sr__data_provide_req__field_descriptors,
++  sr__data_provide_req__field_indices_by_name,
++  3,  sr__data_provide_req__number_ranges,
++  (ProtobufCMessageInit) sr__data_provide_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__data_provide_resp__field_descriptors[3] =
++{
++  {
++    "xpath",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__DataProvideResp, xpath),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "values",
++    2,
++    PROTOBUF_C_LABEL_REPEATED,
++    PROTOBUF_C_TYPE_MESSAGE,
++    offsetof(Sr__DataProvideResp, n_values),
++    offsetof(Sr__DataProvideResp, values),
++    &sr__value__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "request_id",
++    10,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_UINT64,
++    0,   /* quantifier_offset */
++    offsetof(Sr__DataProvideResp, request_id),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__data_provide_resp__field_indices_by_name[] = {
++  2,   /* field[2] = request_id */
++  1,   /* field[1] = values */
++  0,   /* field[0] = xpath */
++};
++static const ProtobufCIntRange sr__data_provide_resp__number_ranges[2 + 1] =
++{
++  { 1, 0 },
++  { 10, 2 },
++  { 0, 3 }
++};
++const ProtobufCMessageDescriptor sr__data_provide_resp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.DataProvideResp",
++  "DataProvideResp",
++  "Sr__DataProvideResp",
++  "sr",
++  sizeof(Sr__DataProvideResp),
++  3,
++  sr__data_provide_resp__field_descriptors,
++  sr__data_provide_resp__field_indices_by_name,
++  2,  sr__data_provide_resp__number_ranges,
++  (ProtobufCMessageInit) sr__data_provide_resp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__module_install_req__field_descriptors[4] =
++{
++  {
++    "module_name",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__ModuleInstallReq, module_name),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "revision",
++    2,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__ModuleInstallReq, revision),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "file_name",
++    3,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__ModuleInstallReq, file_name),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "installed",
++    4,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_BOOL,
++    0,   /* quantifier_offset */
++    offsetof(Sr__ModuleInstallReq, installed),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__module_install_req__field_indices_by_name[] = {
++  2,   /* field[2] = file_name */
++  3,   /* field[3] = installed */
++  0,   /* field[0] = module_name */
++  1,   /* field[1] = revision */
++};
++static const ProtobufCIntRange sr__module_install_req__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 4 }
++};
++const ProtobufCMessageDescriptor sr__module_install_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.ModuleInstallReq",
++  "ModuleInstallReq",
++  "Sr__ModuleInstallReq",
++  "sr",
++  sizeof(Sr__ModuleInstallReq),
++  4,
++  sr__module_install_req__field_descriptors,
++  sr__module_install_req__field_indices_by_name,
++  1,  sr__module_install_req__number_ranges,
++  (ProtobufCMessageInit) sr__module_install_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++#define sr__module_install_resp__field_descriptors NULL
++#define sr__module_install_resp__field_indices_by_name NULL
++#define sr__module_install_resp__number_ranges NULL
++const ProtobufCMessageDescriptor sr__module_install_resp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.ModuleInstallResp",
++  "ModuleInstallResp",
++  "Sr__ModuleInstallResp",
++  "sr",
++  sizeof(Sr__ModuleInstallResp),
++  0,
++  sr__module_install_resp__field_descriptors,
++  sr__module_install_resp__field_indices_by_name,
++  0,  sr__module_install_resp__number_ranges,
++  (ProtobufCMessageInit) sr__module_install_resp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__feature_enable_req__field_descriptors[3] =
++{
++  {
++    "module_name",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__FeatureEnableReq, module_name),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "feature_name",
++    2,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__FeatureEnableReq, feature_name),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "enabled",
++    3,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_BOOL,
++    0,   /* quantifier_offset */
++    offsetof(Sr__FeatureEnableReq, enabled),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__feature_enable_req__field_indices_by_name[] = {
++  2,   /* field[2] = enabled */
++  1,   /* field[1] = feature_name */
++  0,   /* field[0] = module_name */
++};
++static const ProtobufCIntRange sr__feature_enable_req__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 3 }
++};
++const ProtobufCMessageDescriptor sr__feature_enable_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.FeatureEnableReq",
++  "FeatureEnableReq",
++  "Sr__FeatureEnableReq",
++  "sr",
++  sizeof(Sr__FeatureEnableReq),
++  3,
++  sr__feature_enable_req__field_descriptors,
++  sr__feature_enable_req__field_indices_by_name,
++  1,  sr__feature_enable_req__number_ranges,
++  (ProtobufCMessageInit) sr__feature_enable_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++#define sr__feature_enable_resp__field_descriptors NULL
++#define sr__feature_enable_resp__field_indices_by_name NULL
++#define sr__feature_enable_resp__number_ranges NULL
++const ProtobufCMessageDescriptor sr__feature_enable_resp__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.FeatureEnableResp",
++  "FeatureEnableResp",
++  "Sr__FeatureEnableResp",
++  "sr",
++  sizeof(Sr__FeatureEnableResp),
++  0,
++  sr__feature_enable_resp__field_descriptors,
++  sr__feature_enable_resp__field_indices_by_name,
++  0,  sr__feature_enable_resp__number_ranges,
++  (ProtobufCMessageInit) sr__feature_enable_resp__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__unsubscribe_destination_req__field_descriptors[1] =
++{
++  {
++    "destination",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__UnsubscribeDestinationReq, destination),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__unsubscribe_destination_req__field_indices_by_name[] = {
++  0,   /* field[0] = destination */
++};
++static const ProtobufCIntRange sr__unsubscribe_destination_req__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 1 }
++};
++const ProtobufCMessageDescriptor sr__unsubscribe_destination_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.UnsubscribeDestinationReq",
++  "UnsubscribeDestinationReq",
++  "Sr__UnsubscribeDestinationReq",
++  "sr",
++  sizeof(Sr__UnsubscribeDestinationReq),
++  1,
++  sr__unsubscribe_destination_req__field_descriptors,
++  sr__unsubscribe_destination_req__field_indices_by_name,
++  1,  sr__unsubscribe_destination_req__number_ranges,
++  (ProtobufCMessageInit) sr__unsubscribe_destination_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__commit_timeout_req__field_descriptors[2] =
++{
++  {
++    "commit_id",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_UINT32,
++    0,   /* quantifier_offset */
++    offsetof(Sr__CommitTimeoutReq, commit_id),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "expired",
++    2,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_BOOL,
++    0,   /* quantifier_offset */
++    offsetof(Sr__CommitTimeoutReq, expired),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__commit_timeout_req__field_indices_by_name[] = {
++  0,   /* field[0] = commit_id */
++  1,   /* field[1] = expired */
++};
++static const ProtobufCIntRange sr__commit_timeout_req__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 2 }
++};
++const ProtobufCMessageDescriptor sr__commit_timeout_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.CommitTimeoutReq",
++  "CommitTimeoutReq",
++  "Sr__CommitTimeoutReq",
++  "sr",
++  sizeof(Sr__CommitTimeoutReq),
++  2,
++  sr__commit_timeout_req__field_descriptors,
++  sr__commit_timeout_req__field_indices_by_name,
++  1,  sr__commit_timeout_req__number_ranges,
++  (ProtobufCMessageInit) sr__commit_timeout_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__oper_data_timeout_req__field_descriptors[1] =
++{
++  {
++    "request_id",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_UINT64,
++    0,   /* quantifier_offset */
++    offsetof(Sr__OperDataTimeoutReq, request_id),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__oper_data_timeout_req__field_indices_by_name[] = {
++  0,   /* field[0] = request_id */
++};
++static const ProtobufCIntRange sr__oper_data_timeout_req__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 1 }
++};
++const ProtobufCMessageDescriptor sr__oper_data_timeout_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.OperDataTimeoutReq",
++  "OperDataTimeoutReq",
++  "Sr__OperDataTimeoutReq",
++  "sr",
++  sizeof(Sr__OperDataTimeoutReq),
++  1,
++  sr__oper_data_timeout_req__field_descriptors,
++  sr__oper_data_timeout_req__field_indices_by_name,
++  1,  sr__oper_data_timeout_req__number_ranges,
++  (ProtobufCMessageInit) sr__oper_data_timeout_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__internal_state_data_req__field_descriptors[2] =
++{
++  {
++    "request_id",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_UINT64,
++    0,   /* quantifier_offset */
++    offsetof(Sr__InternalStateDataReq, request_id),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "xpath",
++    2,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__InternalStateDataReq, xpath),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__internal_state_data_req__field_indices_by_name[] = {
++  0,   /* field[0] = request_id */
++  1,   /* field[1] = xpath */
++};
++static const ProtobufCIntRange sr__internal_state_data_req__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 2 }
++};
++const ProtobufCMessageDescriptor sr__internal_state_data_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.InternalStateDataReq",
++  "InternalStateDataReq",
++  "Sr__InternalStateDataReq",
++  "sr",
++  sizeof(Sr__InternalStateDataReq),
++  2,
++  sr__internal_state_data_req__field_descriptors,
++  sr__internal_state_data_req__field_indices_by_name,
++  1,  sr__internal_state_data_req__number_ranges,
++  (ProtobufCMessageInit) sr__internal_state_data_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++#define sr__notif_store_cleanup_req__field_descriptors NULL
++#define sr__notif_store_cleanup_req__field_indices_by_name NULL
++#define sr__notif_store_cleanup_req__number_ranges NULL
++const ProtobufCMessageDescriptor sr__notif_store_cleanup_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.NotifStoreCleanupReq",
++  "NotifStoreCleanupReq",
++  "Sr__NotifStoreCleanupReq",
++  "sr",
++  sizeof(Sr__NotifStoreCleanupReq),
++  0,
++  sr__notif_store_cleanup_req__field_descriptors,
++  sr__notif_store_cleanup_req__field_indices_by_name,
++  0,  sr__notif_store_cleanup_req__number_ranges,
++  (ProtobufCMessageInit) sr__notif_store_cleanup_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__delayed_msg_req__field_descriptors[1] =
++{
++  {
++    "message",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__DelayedMsgReq, message),
++    &sr__msg__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__delayed_msg_req__field_indices_by_name[] = {
++  0,   /* field[0] = message */
++};
++static const ProtobufCIntRange sr__delayed_msg_req__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 1 }
++};
++const ProtobufCMessageDescriptor sr__delayed_msg_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.DelayedMsgReq",
++  "DelayedMsgReq",
++  "Sr__DelayedMsgReq",
++  "sr",
++  sizeof(Sr__DelayedMsgReq),
++  1,
++  sr__delayed_msg_req__field_descriptors,
++  sr__delayed_msg_req__field_indices_by_name,
++  1,  sr__delayed_msg_req__number_ranges,
++  (ProtobufCMessageInit) sr__delayed_msg_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++#define sr__nacm_reload_req__field_descriptors NULL
++#define sr__nacm_reload_req__field_indices_by_name NULL
++#define sr__nacm_reload_req__number_ranges NULL
++const ProtobufCMessageDescriptor sr__nacm_reload_req__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.NacmReloadReq",
++  "NacmReloadReq",
++  "Sr__NacmReloadReq",
++  "sr",
++  sizeof(Sr__NacmReloadReq),
++  0,
++  sr__nacm_reload_req__field_descriptors,
++  sr__nacm_reload_req__field_indices_by_name,
++  0,  sr__nacm_reload_req__number_ranges,
++  (ProtobufCMessageInit) sr__nacm_reload_req__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__request__field_descriptors[37] =
++{
++  {
++    "_id",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_UINT64,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, _id),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "operation",
++    2,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_ENUM,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, operation),
++    &sr__operation__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "session_start_req",
++    10,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, session_start_req),
++    &sr__session_start_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "session_stop_req",
++    11,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, session_stop_req),
++    &sr__session_stop_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "session_refresh_req",
++    12,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, session_refresh_req),
++    &sr__session_refresh_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "session_check_req",
++    13,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, session_check_req),
++    &sr__session_check_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "session_switch_ds_req",
++    14,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, session_switch_ds_req),
++    &sr__session_switch_ds_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "session_set_opts_req",
++    15,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, session_set_opts_req),
++    &sr__session_set_opts_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "version_verify_req",
++    16,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, version_verify_req),
++    &sr__version_verify_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "list_schemas_req",
++    20,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, list_schemas_req),
++    &sr__list_schemas_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "get_schema_req",
++    21,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, get_schema_req),
++    &sr__get_schema_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "module_install_req",
++    22,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, module_install_req),
++    &sr__module_install_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "feature_enable_req",
++    23,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, feature_enable_req),
++    &sr__feature_enable_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "get_item_req",
++    30,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, get_item_req),
++    &sr__get_item_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "get_items_req",
++    31,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, get_items_req),
++    &sr__get_items_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "get_subtree_req",
++    32,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, get_subtree_req),
++    &sr__get_subtree_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "get_subtrees_req",
++    33,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, get_subtrees_req),
++    &sr__get_subtrees_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "get_subtree_chunk_req",
++    34,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, get_subtree_chunk_req),
++    &sr__get_subtree_chunk_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "set_item_req",
++    40,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, set_item_req),
++    &sr__set_item_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "delete_item_req",
++    41,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, delete_item_req),
++    &sr__delete_item_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "move_item_req",
++    42,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, move_item_req),
++    &sr__move_item_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "set_item_str_req",
++    43,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, set_item_str_req),
++    &sr__set_item_str_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "validate_req",
++    50,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, validate_req),
++    &sr__validate_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "commit_req",
++    51,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, commit_req),
++    &sr__commit_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "discard_changes_req",
++    52,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, discard_changes_req),
++    &sr__discard_changes_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "copy_config_req",
++    53,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, copy_config_req),
++    &sr__copy_config_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "lock_req",
++    60,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, lock_req),
++    &sr__lock_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "unlock_req",
++    61,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, unlock_req),
++    &sr__unlock_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "subscribe_req",
++    70,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, subscribe_req),
++    &sr__subscribe_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "unsubscribe_req",
++    71,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, unsubscribe_req),
++    &sr__unsubscribe_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "check_enabled_running_req",
++    72,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, check_enabled_running_req),
++    &sr__check_enabled_running_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "get_changes_req",
++    73,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, get_changes_req),
++    &sr__get_changes_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "data_provide_req",
++    80,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, data_provide_req),
++    &sr__data_provide_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "check_exec_perm_req",
++    81,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, check_exec_perm_req),
++    &sr__check_exec_perm_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "rpc_req",
++    82,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, rpc_req),
++    &sr__rpcreq__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "event_notif_req",
++    83,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, event_notif_req),
++    &sr__event_notif_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "event_notif_replay_req",
++    84,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Request, event_notif_replay_req),
++    &sr__event_notif_replay_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__request__field_indices_by_name[] = {
++  0,   /* field[0] = _id */
++  30,   /* field[30] = check_enabled_running_req */
++  33,   /* field[33] = check_exec_perm_req */
++  23,   /* field[23] = commit_req */
++  25,   /* field[25] = copy_config_req */
++  32,   /* field[32] = data_provide_req */
++  19,   /* field[19] = delete_item_req */
++  24,   /* field[24] = discard_changes_req */
++  36,   /* field[36] = event_notif_replay_req */
++  35,   /* field[35] = event_notif_req */
++  12,   /* field[12] = feature_enable_req */
++  31,   /* field[31] = get_changes_req */
++  13,   /* field[13] = get_item_req */
++  14,   /* field[14] = get_items_req */
++  10,   /* field[10] = get_schema_req */
++  17,   /* field[17] = get_subtree_chunk_req */
++  15,   /* field[15] = get_subtree_req */
++  16,   /* field[16] = get_subtrees_req */
++  9,   /* field[9] = list_schemas_req */
++  26,   /* field[26] = lock_req */
++  11,   /* field[11] = module_install_req */
++  20,   /* field[20] = move_item_req */
++  1,   /* field[1] = operation */
++  34,   /* field[34] = rpc_req */
++  5,   /* field[5] = session_check_req */
++  4,   /* field[4] = session_refresh_req */
++  7,   /* field[7] = session_set_opts_req */
++  2,   /* field[2] = session_start_req */
++  3,   /* field[3] = session_stop_req */
++  6,   /* field[6] = session_switch_ds_req */
++  18,   /* field[18] = set_item_req */
++  21,   /* field[21] = set_item_str_req */
++  28,   /* field[28] = subscribe_req */
++  27,   /* field[27] = unlock_req */
++  29,   /* field[29] = unsubscribe_req */
++  22,   /* field[22] = validate_req */
++  8,   /* field[8] = version_verify_req */
++};
++static const ProtobufCIntRange sr__request__number_ranges[9 + 1] =
++{
++  { 1, 0 },
++  { 10, 2 },
++  { 20, 9 },
++  { 30, 13 },
++  { 40, 18 },
++  { 50, 22 },
++  { 60, 26 },
++  { 70, 28 },
++  { 80, 32 },
++  { 0, 37 }
++};
++const ProtobufCMessageDescriptor sr__request__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.Request",
++  "Request",
++  "Sr__Request",
++  "sr",
++  sizeof(Sr__Request),
++  37,
++  sr__request__field_descriptors,
++  sr__request__field_indices_by_name,
++  9,  sr__request__number_ranges,
++  (ProtobufCMessageInit) sr__request__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__response__field_descriptors[38] =
++{
++  {
++    "operation",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_ENUM,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, operation),
++    &sr__operation__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "result",
++    2,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_UINT32,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, result),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "error",
++    3,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, error),
++    &sr__error__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "session_start_resp",
++    10,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, session_start_resp),
++    &sr__session_start_resp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "session_stop_resp",
++    11,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, session_stop_resp),
++    &sr__session_stop_resp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "session_refresh_resp",
++    12,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, session_refresh_resp),
++    &sr__session_refresh_resp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "session_check_resp",
++    13,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, session_check_resp),
++    &sr__session_check_resp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "session_switch_ds_resp",
++    14,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, session_switch_ds_resp),
++    &sr__session_switch_ds_resp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "session_set_opts_resp",
++    15,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, session_set_opts_resp),
++    &sr__session_set_opts_resp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "version_verify_resp",
++    16,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, version_verify_resp),
++    &sr__version_verify_resp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "list_schemas_resp",
++    20,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, list_schemas_resp),
++    &sr__list_schemas_resp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "get_schema_resp",
++    21,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, get_schema_resp),
++    &sr__get_schema_resp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "module_install_resp",
++    22,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, module_install_resp),
++    &sr__module_install_resp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "feature_enable_resp",
++    23,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, feature_enable_resp),
++    &sr__feature_enable_resp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "get_item_resp",
++    30,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, get_item_resp),
++    &sr__get_item_resp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "get_items_resp",
++    31,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, get_items_resp),
++    &sr__get_items_resp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "get_subtree_resp",
++    32,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, get_subtree_resp),
++    &sr__get_subtree_resp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "get_subtrees_resp",
++    33,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, get_subtrees_resp),
++    &sr__get_subtrees_resp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "get_subtree_chunk_resp",
++    34,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, get_subtree_chunk_resp),
++    &sr__get_subtree_chunk_resp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "set_item_resp",
++    40,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, set_item_resp),
++    &sr__set_item_resp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "delete_item_resp",
++    41,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, delete_item_resp),
++    &sr__delete_item_resp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "move_item_resp",
++    42,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, move_item_resp),
++    &sr__move_item_resp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "set_item_str_resp",
++    43,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, set_item_str_resp),
++    &sr__set_item_str_resp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "validate_resp",
++    50,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, validate_resp),
++    &sr__validate_resp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "commit_resp",
++    51,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, commit_resp),
++    &sr__commit_resp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "discard_changes_resp",
++    52,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, discard_changes_resp),
++    &sr__discard_changes_resp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "copy_config_resp",
++    53,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, copy_config_resp),
++    &sr__copy_config_resp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "lock_resp",
++    60,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, lock_resp),
++    &sr__lock_resp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "unlock_resp",
++    61,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, unlock_resp),
++    &sr__unlock_resp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "subscribe_resp",
++    70,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, subscribe_resp),
++    &sr__subscribe_resp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "unsubscribe_resp",
++    71,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, unsubscribe_resp),
++    &sr__unsubscribe_resp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "check_enabled_running_resp",
++    72,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, check_enabled_running_resp),
++    &sr__check_enabled_running_resp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "get_changes_resp",
++    73,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, get_changes_resp),
++    &sr__get_changes_resp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "data_provide_resp",
++    80,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, data_provide_resp),
++    &sr__data_provide_resp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "check_exec_perm_resp",
++    81,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, check_exec_perm_resp),
++    &sr__check_exec_perm_resp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "rpc_resp",
++    82,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, rpc_resp),
++    &sr__rpcresp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "event_notif_resp",
++    83,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, event_notif_resp),
++    &sr__event_notif_resp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "event_notif_replay_resp",
++    84,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Response, event_notif_replay_resp),
++    &sr__event_notif_replay_resp__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__response__field_indices_by_name[] = {
++  31,   /* field[31] = check_enabled_running_resp */
++  34,   /* field[34] = check_exec_perm_resp */
++  24,   /* field[24] = commit_resp */
++  26,   /* field[26] = copy_config_resp */
++  33,   /* field[33] = data_provide_resp */
++  20,   /* field[20] = delete_item_resp */
++  25,   /* field[25] = discard_changes_resp */
++  2,   /* field[2] = error */
++  37,   /* field[37] = event_notif_replay_resp */
++  36,   /* field[36] = event_notif_resp */
++  13,   /* field[13] = feature_enable_resp */
++  32,   /* field[32] = get_changes_resp */
++  14,   /* field[14] = get_item_resp */
++  15,   /* field[15] = get_items_resp */
++  11,   /* field[11] = get_schema_resp */
++  18,   /* field[18] = get_subtree_chunk_resp */
++  16,   /* field[16] = get_subtree_resp */
++  17,   /* field[17] = get_subtrees_resp */
++  10,   /* field[10] = list_schemas_resp */
++  27,   /* field[27] = lock_resp */
++  12,   /* field[12] = module_install_resp */
++  21,   /* field[21] = move_item_resp */
++  0,   /* field[0] = operation */
++  1,   /* field[1] = result */
++  35,   /* field[35] = rpc_resp */
++  6,   /* field[6] = session_check_resp */
++  5,   /* field[5] = session_refresh_resp */
++  8,   /* field[8] = session_set_opts_resp */
++  3,   /* field[3] = session_start_resp */
++  4,   /* field[4] = session_stop_resp */
++  7,   /* field[7] = session_switch_ds_resp */
++  19,   /* field[19] = set_item_resp */
++  22,   /* field[22] = set_item_str_resp */
++  29,   /* field[29] = subscribe_resp */
++  28,   /* field[28] = unlock_resp */
++  30,   /* field[30] = unsubscribe_resp */
++  23,   /* field[23] = validate_resp */
++  9,   /* field[9] = version_verify_resp */
++};
++static const ProtobufCIntRange sr__response__number_ranges[9 + 1] =
++{
++  { 1, 0 },
++  { 10, 3 },
++  { 20, 10 },
++  { 30, 14 },
++  { 40, 19 },
++  { 50, 23 },
++  { 60, 27 },
++  { 70, 29 },
++  { 80, 33 },
++  { 0, 38 }
++};
++const ProtobufCMessageDescriptor sr__response__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.Response",
++  "Response",
++  "Sr__Response",
++  "sr",
++  sizeof(Sr__Response),
++  38,
++  sr__response__field_descriptors,
++  sr__response__field_indices_by_name,
++  9,  sr__response__number_ranges,
++  (ProtobufCMessageInit) sr__response__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__notification__field_descriptors[10] =
++{
++  {
++    "type",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_ENUM,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Notification, type),
++    &sr__subscription_type__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "destination_address",
++    2,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Notification, destination_address),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "source_address",
++    3,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_STRING,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Notification, source_address),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "source_pid",
++    4,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_UINT32,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Notification, source_pid),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "subscription_id",
++    5,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_UINT32,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Notification, subscription_id),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "commit_id",
++    6,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_UINT32,
++    offsetof(Sr__Notification, has_commit_id),
++    offsetof(Sr__Notification, commit_id),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "module_install_notif",
++    10,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Notification, module_install_notif),
++    &sr__module_install_notification__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "feature_enable_notif",
++    11,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Notification, feature_enable_notif),
++    &sr__feature_enable_notification__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "module_change_notif",
++    12,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Notification, module_change_notif),
++    &sr__module_change_notification__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "subtree_change_notif",
++    13,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Notification, subtree_change_notif),
++    &sr__subtree_change_notification__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__notification__field_indices_by_name[] = {
++  5,   /* field[5] = commit_id */
++  1,   /* field[1] = destination_address */
++  7,   /* field[7] = feature_enable_notif */
++  8,   /* field[8] = module_change_notif */
++  6,   /* field[6] = module_install_notif */
++  2,   /* field[2] = source_address */
++  3,   /* field[3] = source_pid */
++  4,   /* field[4] = subscription_id */
++  9,   /* field[9] = subtree_change_notif */
++  0,   /* field[0] = type */
++};
++static const ProtobufCIntRange sr__notification__number_ranges[2 + 1] =
++{
++  { 1, 0 },
++  { 10, 6 },
++  { 0, 10 }
++};
++const ProtobufCMessageDescriptor sr__notification__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.Notification",
++  "Notification",
++  "Sr__Notification",
++  "sr",
++  sizeof(Sr__Notification),
++  10,
++  sr__notification__field_descriptors,
++  sr__notification__field_indices_by_name,
++  2,  sr__notification__number_ranges,
++  (ProtobufCMessageInit) sr__notification__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__notification_ack__field_descriptors[4] =
++{
++  {
++    "notif",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__NotificationAck, notif),
++    &sr__notification__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "result",
++    2,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_UINT32,
++    0,   /* quantifier_offset */
++    offsetof(Sr__NotificationAck, result),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "error",
++    3,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__NotificationAck, error),
++    &sr__error__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "do_not_send_abort",
++    4,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_BOOL,
++    0,   /* quantifier_offset */
++    offsetof(Sr__NotificationAck, do_not_send_abort),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__notification_ack__field_indices_by_name[] = {
++  3,   /* field[3] = do_not_send_abort */
++  2,   /* field[2] = error */
++  0,   /* field[0] = notif */
++  1,   /* field[1] = result */
++};
++static const ProtobufCIntRange sr__notification_ack__number_ranges[1 + 1] =
++{
++  { 1, 0 },
++  { 0, 4 }
++};
++const ProtobufCMessageDescriptor sr__notification_ack__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.NotificationAck",
++  "NotificationAck",
++  "Sr__NotificationAck",
++  "sr",
++  sizeof(Sr__NotificationAck),
++  4,
++  sr__notification_ack__field_descriptors,
++  sr__notification_ack__field_indices_by_name,
++  1,  sr__notification_ack__number_ranges,
++  (ProtobufCMessageInit) sr__notification_ack__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCFieldDescriptor sr__internal_request__field_descriptors[9] =
++{
++  {
++    "operation",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_ENUM,
++    0,   /* quantifier_offset */
++    offsetof(Sr__InternalRequest, operation),
++    &sr__operation__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "postpone_timeout",
++    2,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_UINT32,
++    offsetof(Sr__InternalRequest, has_postpone_timeout),
++    offsetof(Sr__InternalRequest, postpone_timeout),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "unsubscribe_dst_req",
++    10,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__InternalRequest, unsubscribe_dst_req),
++    &sr__unsubscribe_destination_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "commit_timeout_req",
++    11,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__InternalRequest, commit_timeout_req),
++    &sr__commit_timeout_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "oper_data_timeout_req",
++    12,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__InternalRequest, oper_data_timeout_req),
++    &sr__oper_data_timeout_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "internal_state_data_req",
++    13,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__InternalRequest, internal_state_data_req),
++    &sr__internal_state_data_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "notif_store_cleanup_req",
++    14,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__InternalRequest, notif_store_cleanup_req),
++    &sr__notif_store_cleanup_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "delayed_msg_req",
++    15,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__InternalRequest, delayed_msg_req),
++    &sr__delayed_msg_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "nacm_reload_req",
++    16,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__InternalRequest, nacm_reload_req),
++    &sr__nacm_reload_req__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__internal_request__field_indices_by_name[] = {
++  3,   /* field[3] = commit_timeout_req */
++  7,   /* field[7] = delayed_msg_req */
++  5,   /* field[5] = internal_state_data_req */
++  8,   /* field[8] = nacm_reload_req */
++  6,   /* field[6] = notif_store_cleanup_req */
++  4,   /* field[4] = oper_data_timeout_req */
++  0,   /* field[0] = operation */
++  1,   /* field[1] = postpone_timeout */
++  2,   /* field[2] = unsubscribe_dst_req */
++};
++static const ProtobufCIntRange sr__internal_request__number_ranges[2 + 1] =
++{
++  { 1, 0 },
++  { 10, 2 },
++  { 0, 9 }
++};
++const ProtobufCMessageDescriptor sr__internal_request__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.InternalRequest",
++  "InternalRequest",
++  "Sr__InternalRequest",
++  "sr",
++  sizeof(Sr__InternalRequest),
++  9,
++  sr__internal_request__field_descriptors,
++  sr__internal_request__field_indices_by_name,
++  2,  sr__internal_request__number_ranges,
++  (ProtobufCMessageInit) sr__internal_request__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCEnumValue sr__msg__msg_type__enum_values_by_number[5] =
++{
++  { "REQUEST", "SR__MSG__MSG_TYPE__REQUEST", 1 },
++  { "RESPONSE", "SR__MSG__MSG_TYPE__RESPONSE", 2 },
++  { "NOTIFICATION", "SR__MSG__MSG_TYPE__NOTIFICATION", 3 },
++  { "NOTIFICATION_ACK", "SR__MSG__MSG_TYPE__NOTIFICATION_ACK", 4 },
++  { "INTERNAL_REQUEST", "SR__MSG__MSG_TYPE__INTERNAL_REQUEST", 5 },
++};
++static const ProtobufCIntRange sr__msg__msg_type__value_ranges[] = {
++{1, 0},{0, 5}
++};
++static const ProtobufCEnumValueIndex sr__msg__msg_type__enum_values_by_name[5] =
++{
++  { "INTERNAL_REQUEST", 4 },
++  { "NOTIFICATION", 2 },
++  { "NOTIFICATION_ACK", 3 },
++  { "REQUEST", 0 },
++  { "RESPONSE", 1 },
++};
++const ProtobufCEnumDescriptor sr__msg__msg_type__descriptor =
++{
++  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
++  "sr.Msg.MsgType",
++  "MsgType",
++  "Sr__Msg__MsgType",
++  "sr",
++  5,
++  sr__msg__msg_type__enum_values_by_number,
++  5,
++  sr__msg__msg_type__enum_values_by_name,
++  1,
++  sr__msg__msg_type__value_ranges,
++  NULL,NULL,NULL,NULL   /* reserved[1234] */
++};
++static const ProtobufCFieldDescriptor sr__msg__field_descriptors[8] =
++{
++  {
++    "type",
++    1,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_ENUM,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Msg, type),
++    &sr__msg__msg_type__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "session_id",
++    2,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_UINT32,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Msg, session_id),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "request",
++    3,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Msg, request),
++    &sr__request__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "response",
++    4,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Msg, response),
++    &sr__response__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "notification",
++    5,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Msg, notification),
++    &sr__notification__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "notification_ack",
++    6,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Msg, notification_ack),
++    &sr__notification_ack__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "internal_request",
++    7,
++    PROTOBUF_C_LABEL_OPTIONAL,
++    PROTOBUF_C_TYPE_MESSAGE,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Msg, internal_request),
++    &sr__internal_request__descriptor,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++  {
++    "_sysrepo_mem_ctx",
++    20,
++    PROTOBUF_C_LABEL_REQUIRED,
++    PROTOBUF_C_TYPE_UINT64,
++    0,   /* quantifier_offset */
++    offsetof(Sr__Msg, _sysrepo_mem_ctx),
++    NULL,
++    NULL,
++    0,             /* flags */
++    0,NULL,NULL    /* reserved1,reserved2, etc */
++  },
++};
++static const unsigned sr__msg__field_indices_by_name[] = {
++  7,   /* field[7] = _sysrepo_mem_ctx */
++  6,   /* field[6] = internal_request */
++  4,   /* field[4] = notification */
++  5,   /* field[5] = notification_ack */
++  2,   /* field[2] = request */
++  3,   /* field[3] = response */
++  1,   /* field[1] = session_id */
++  0,   /* field[0] = type */
++};
++static const ProtobufCIntRange sr__msg__number_ranges[2 + 1] =
++{
++  { 1, 0 },
++  { 20, 7 },
++  { 0, 8 }
++};
++const ProtobufCMessageDescriptor sr__msg__descriptor =
++{
++  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
++  "sr.Msg",
++  "Msg",
++  "Sr__Msg",
++  "sr",
++  sizeof(Sr__Msg),
++  8,
++  sr__msg__field_descriptors,
++  sr__msg__field_indices_by_name,
++  2,  sr__msg__number_ranges,
++  (ProtobufCMessageInit) sr__msg__init,
++  NULL,NULL,NULL    /* reserved[123] */
++};
++static const ProtobufCEnumValue sr__api_variant__enum_values_by_number[2] =
++{
++  { "VALUES", "SR__API_VARIANT__VALUES", 1 },
++  { "TREES", "SR__API_VARIANT__TREES", 2 },
++};
++static const ProtobufCIntRange sr__api_variant__value_ranges[] = {
++{1, 0},{0, 2}
++};
++static const ProtobufCEnumValueIndex sr__api_variant__enum_values_by_name[2] =
++{
++  { "TREES", 1 },
++  { "VALUES", 0 },
++};
++const ProtobufCEnumDescriptor sr__api_variant__descriptor =
++{
++  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
++  "sr.ApiVariant",
++  "ApiVariant",
++  "Sr__ApiVariant",
++  "sr",
++  2,
++  sr__api_variant__enum_values_by_number,
++  2,
++  sr__api_variant__enum_values_by_name,
++  1,
++  sr__api_variant__value_ranges,
++  NULL,NULL,NULL,NULL   /* reserved[1234] */
++};
++static const ProtobufCEnumValue sr__data_store__enum_values_by_number[3] =
++{
++  { "STARTUP", "SR__DATA_STORE__STARTUP", 1 },
++  { "RUNNING", "SR__DATA_STORE__RUNNING", 2 },
++  { "CANDIDATE", "SR__DATA_STORE__CANDIDATE", 3 },
++};
++static const ProtobufCIntRange sr__data_store__value_ranges[] = {
++{1, 0},{0, 3}
++};
++static const ProtobufCEnumValueIndex sr__data_store__enum_values_by_name[3] =
++{
++  { "CANDIDATE", 2 },
++  { "RUNNING", 1 },
++  { "STARTUP", 0 },
++};
++const ProtobufCEnumDescriptor sr__data_store__descriptor =
++{
++  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
++  "sr.DataStore",
++  "DataStore",
++  "Sr__DataStore",
++  "sr",
++  3,
++  sr__data_store__enum_values_by_number,
++  3,
++  sr__data_store__enum_values_by_name,
++  1,
++  sr__data_store__value_ranges,
++  NULL,NULL,NULL,NULL   /* reserved[1234] */
++};
++static const ProtobufCEnumValue sr__session_flags__enum_values_by_number[4] =
++{
++  { "SESS_DEFAULT", "SR__SESSION_FLAGS__SESS_DEFAULT", 0 },
++  { "SESS_CONFIG_ONLY", "SR__SESSION_FLAGS__SESS_CONFIG_ONLY", 1 },
++  { "SESS_ENABLE_NACM", "SR__SESSION_FLAGS__SESS_ENABLE_NACM", 2 },
++  { "SESS_NOTIFICATION", "SR__SESSION_FLAGS__SESS_NOTIFICATION", 1024 },
++};
++static const ProtobufCIntRange sr__session_flags__value_ranges[] = {
++{0, 0},{1024, 3},{0, 4}
++};
++static const ProtobufCEnumValueIndex sr__session_flags__enum_values_by_name[4] =
++{
++  { "SESS_CONFIG_ONLY", 1 },
++  { "SESS_DEFAULT", 0 },
++  { "SESS_ENABLE_NACM", 2 },
++  { "SESS_NOTIFICATION", 3 },
++};
++const ProtobufCEnumDescriptor sr__session_flags__descriptor =
++{
++  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
++  "sr.SessionFlags",
++  "SessionFlags",
++  "Sr__SessionFlags",
++  "sr",
++  4,
++  sr__session_flags__enum_values_by_number,
++  4,
++  sr__session_flags__enum_values_by_name,
++  2,
++  sr__session_flags__value_ranges,
++  NULL,NULL,NULL,NULL   /* reserved[1234] */
++};
++static const ProtobufCEnumValue sr__edit_flags__enum_values_by_number[3] =
++{
++  { "EDIT_DEFAULT", "SR__EDIT_FLAGS__EDIT_DEFAULT", 0 },
++  { "EDIT_NON_RECURSIVE", "SR__EDIT_FLAGS__EDIT_NON_RECURSIVE", 1 },
++  { "EDIT_STRICT", "SR__EDIT_FLAGS__EDIT_STRICT", 2 },
++};
++static const ProtobufCIntRange sr__edit_flags__value_ranges[] = {
++{0, 0},{0, 3}
++};
++static const ProtobufCEnumValueIndex sr__edit_flags__enum_values_by_name[3] =
++{
++  { "EDIT_DEFAULT", 0 },
++  { "EDIT_NON_RECURSIVE", 1 },
++  { "EDIT_STRICT", 2 },
++};
++const ProtobufCEnumDescriptor sr__edit_flags__descriptor =
++{
++  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
++  "sr.EditFlags",
++  "EditFlags",
++  "Sr__EditFlags",
++  "sr",
++  3,
++  sr__edit_flags__enum_values_by_number,
++  3,
++  sr__edit_flags__enum_values_by_name,
++  1,
++  sr__edit_flags__value_ranges,
++  NULL,NULL,NULL,NULL   /* reserved[1234] */
++};
++static const ProtobufCEnumValue sr__subscription_type__enum_values_by_number[10] =
++{
++  { "MODULE_INSTALL_SUBS", "SR__SUBSCRIPTION_TYPE__MODULE_INSTALL_SUBS", 1 },
++  { "FEATURE_ENABLE_SUBS", "SR__SUBSCRIPTION_TYPE__FEATURE_ENABLE_SUBS", 2 },
++  { "MODULE_CHANGE_SUBS", "SR__SUBSCRIPTION_TYPE__MODULE_CHANGE_SUBS", 10 },
++  { "SUBTREE_CHANGE_SUBS", "SR__SUBSCRIPTION_TYPE__SUBTREE_CHANGE_SUBS", 11 },
++  { "DP_GET_ITEMS_SUBS", "SR__SUBSCRIPTION_TYPE__DP_GET_ITEMS_SUBS", 20 },
++  { "RPC_SUBS", "SR__SUBSCRIPTION_TYPE__RPC_SUBS", 30 },
++  { "ACTION_SUBS", "SR__SUBSCRIPTION_TYPE__ACTION_SUBS", 31 },
++  { "EVENT_NOTIF_SUBS", "SR__SUBSCRIPTION_TYPE__EVENT_NOTIF_SUBS", 40 },
++  { "HELLO_SUBS", "SR__SUBSCRIPTION_TYPE__HELLO_SUBS", 50 },
++  { "COMMIT_END_SUBS", "SR__SUBSCRIPTION_TYPE__COMMIT_END_SUBS", 51 },
++};
++static const ProtobufCIntRange sr__subscription_type__value_ranges[] = {
++{1, 0},{10, 2},{20, 4},{30, 5},{40, 7},{50, 8},{0, 10}
++};
++static const ProtobufCEnumValueIndex sr__subscription_type__enum_values_by_name[10] =
++{
++  { "ACTION_SUBS", 6 },
++  { "COMMIT_END_SUBS", 9 },
++  { "DP_GET_ITEMS_SUBS", 4 },
++  { "EVENT_NOTIF_SUBS", 7 },
++  { "FEATURE_ENABLE_SUBS", 1 },
++  { "HELLO_SUBS", 8 },
++  { "MODULE_CHANGE_SUBS", 2 },
++  { "MODULE_INSTALL_SUBS", 0 },
++  { "RPC_SUBS", 5 },
++  { "SUBTREE_CHANGE_SUBS", 3 },
++};
++const ProtobufCEnumDescriptor sr__subscription_type__descriptor =
++{
++  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
++  "sr.SubscriptionType",
++  "SubscriptionType",
++  "Sr__SubscriptionType",
++  "sr",
++  10,
++  sr__subscription_type__enum_values_by_number,
++  10,
++  sr__subscription_type__enum_values_by_name,
++  6,
++  sr__subscription_type__value_ranges,
++  NULL,NULL,NULL,NULL   /* reserved[1234] */
++};
++static const ProtobufCEnumValue sr__notification_event__enum_values_by_number[4] =
++{
++  { "VERIFY_EV", "SR__NOTIFICATION_EVENT__VERIFY_EV", 1 },
++  { "APPLY_EV", "SR__NOTIFICATION_EVENT__APPLY_EV", 2 },
++  { "ABORT_EV", "SR__NOTIFICATION_EVENT__ABORT_EV", 3 },
++  { "ENABLED_EV", "SR__NOTIFICATION_EVENT__ENABLED_EV", 4 },
++};
++static const ProtobufCIntRange sr__notification_event__value_ranges[] = {
++{1, 0},{0, 4}
++};
++static const ProtobufCEnumValueIndex sr__notification_event__enum_values_by_name[4] =
++{
++  { "ABORT_EV", 2 },
++  { "APPLY_EV", 1 },
++  { "ENABLED_EV", 3 },
++  { "VERIFY_EV", 0 },
++};
++const ProtobufCEnumDescriptor sr__notification_event__descriptor =
++{
++  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
++  "sr.NotificationEvent",
++  "NotificationEvent",
++  "Sr__NotificationEvent",
++  "sr",
++  4,
++  sr__notification_event__enum_values_by_number,
++  4,
++  sr__notification_event__enum_values_by_name,
++  1,
++  sr__notification_event__value_ranges,
++  NULL,NULL,NULL,NULL   /* reserved[1234] */
++};
++static const ProtobufCEnumValue sr__module_state__enum_values_by_number[3] =
++{
++  { "UNINSTALLED", "SR__MODULE_STATE__UNINSTALLED", 1 },
++  { "IMPORTED", "SR__MODULE_STATE__IMPORTED", 2 },
++  { "IMPLEMENTED", "SR__MODULE_STATE__IMPLEMENTED", 3 },
++};
++static const ProtobufCIntRange sr__module_state__value_ranges[] = {
++{1, 0},{0, 3}
++};
++static const ProtobufCEnumValueIndex sr__module_state__enum_values_by_name[3] =
++{
++  { "IMPLEMENTED", 2 },
++  { "IMPORTED", 1 },
++  { "UNINSTALLED", 0 },
++};
++const ProtobufCEnumDescriptor sr__module_state__descriptor =
++{
++  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
++  "sr.ModuleState",
++  "ModuleState",
++  "Sr__ModuleState",
++  "sr",
++  3,
++  sr__module_state__enum_values_by_number,
++  3,
++  sr__module_state__enum_values_by_name,
++  1,
++  sr__module_state__value_ranges,
++  NULL,NULL,NULL,NULL   /* reserved[1234] */
++};
++static const ProtobufCEnumValue sr__change_operation__enum_values_by_number[4] =
++{
++  { "CREATED", "SR__CHANGE_OPERATION__CREATED", 1 },
++  { "MODIFIED", "SR__CHANGE_OPERATION__MODIFIED", 2 },
++  { "DELETED", "SR__CHANGE_OPERATION__DELETED", 3 },
++  { "MOVED", "SR__CHANGE_OPERATION__MOVED", 4 },
++};
++static const ProtobufCIntRange sr__change_operation__value_ranges[] = {
++{1, 0},{0, 4}
++};
++static const ProtobufCEnumValueIndex sr__change_operation__enum_values_by_name[4] =
++{
++  { "CREATED", 0 },
++  { "DELETED", 2 },
++  { "MODIFIED", 1 },
++  { "MOVED", 3 },
++};
++const ProtobufCEnumDescriptor sr__change_operation__descriptor =
++{
++  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
++  "sr.ChangeOperation",
++  "ChangeOperation",
++  "Sr__ChangeOperation",
++  "sr",
++  4,
++  sr__change_operation__enum_values_by_number,
++  4,
++  sr__change_operation__enum_values_by_name,
++  1,
++  sr__change_operation__value_ranges,
++  NULL,NULL,NULL,NULL   /* reserved[1234] */
++};
++static const ProtobufCEnumValue sr__operation__enum_values_by_number[43] =
++{
++  { "SESSION_START", "SR__OPERATION__SESSION_START", 10 },
++  { "SESSION_STOP", "SR__OPERATION__SESSION_STOP", 11 },
++  { "SESSION_REFRESH", "SR__OPERATION__SESSION_REFRESH", 12 },
++  { "SESSION_CHECK", "SR__OPERATION__SESSION_CHECK", 13 },
++  { "SESSION_SWITCH_DS", "SR__OPERATION__SESSION_SWITCH_DS", 14 },
++  { "SESSION_SET_OPTS", "SR__OPERATION__SESSION_SET_OPTS", 15 },
++  { "VERSION_VERIFY", "SR__OPERATION__VERSION_VERIFY", 16 },
++  { "LIST_SCHEMAS", "SR__OPERATION__LIST_SCHEMAS", 20 },
++  { "GET_SCHEMA", "SR__OPERATION__GET_SCHEMA", 21 },
++  { "MODULE_INSTALL", "SR__OPERATION__MODULE_INSTALL", 22 },
++  { "FEATURE_ENABLE", "SR__OPERATION__FEATURE_ENABLE", 23 },
++  { "GET_ITEM", "SR__OPERATION__GET_ITEM", 30 },
++  { "GET_ITEMS", "SR__OPERATION__GET_ITEMS", 31 },
++  { "GET_SUBTREE", "SR__OPERATION__GET_SUBTREE", 32 },
++  { "GET_SUBTREES", "SR__OPERATION__GET_SUBTREES", 33 },
++  { "GET_SUBTREE_CHUNK", "SR__OPERATION__GET_SUBTREE_CHUNK", 34 },
++  { "SET_ITEM", "SR__OPERATION__SET_ITEM", 40 },
++  { "DELETE_ITEM", "SR__OPERATION__DELETE_ITEM", 41 },
++  { "MOVE_ITEM", "SR__OPERATION__MOVE_ITEM", 42 },
++  { "SET_ITEM_STR", "SR__OPERATION__SET_ITEM_STR", 43 },
++  { "VALIDATE", "SR__OPERATION__VALIDATE", 50 },
++  { "COMMIT", "SR__OPERATION__COMMIT", 51 },
++  { "DISCARD_CHANGES", "SR__OPERATION__DISCARD_CHANGES", 52 },
++  { "COPY_CONFIG", "SR__OPERATION__COPY_CONFIG", 53 },
++  { "LOCK", "SR__OPERATION__LOCK", 60 },
++  { "UNLOCK", "SR__OPERATION__UNLOCK", 61 },
++  { "SUBSCRIBE", "SR__OPERATION__SUBSCRIBE", 70 },
++  { "UNSUBSCRIBE", "SR__OPERATION__UNSUBSCRIBE", 71 },
++  { "CHECK_ENABLED_RUNNING", "SR__OPERATION__CHECK_ENABLED_RUNNING", 72 },
++  { "GET_CHANGES", "SR__OPERATION__GET_CHANGES", 73 },
++  { "DATA_PROVIDE", "SR__OPERATION__DATA_PROVIDE", 80 },
++  { "CHECK_EXEC_PERMISSION", "SR__OPERATION__CHECK_EXEC_PERMISSION", 81 },
++  { "RPC", "SR__OPERATION__RPC", 82 },
++  { "ACTION", "SR__OPERATION__ACTION", 83 },
++  { "EVENT_NOTIF", "SR__OPERATION__EVENT_NOTIF", 84 },
++  { "EVENT_NOTIF_REPLAY", "SR__OPERATION__EVENT_NOTIF_REPLAY", 85 },
++  { "UNSUBSCRIBE_DESTINATION", "SR__OPERATION__UNSUBSCRIBE_DESTINATION", 101 },
++  { "COMMIT_TIMEOUT", "SR__OPERATION__COMMIT_TIMEOUT", 102 },
++  { "OPER_DATA_TIMEOUT", "SR__OPERATION__OPER_DATA_TIMEOUT", 103 },
++  { "INTERNAL_STATE_DATA", "SR__OPERATION__INTERNAL_STATE_DATA", 104 },
++  { "NOTIF_STORE_CLEANUP", "SR__OPERATION__NOTIF_STORE_CLEANUP", 105 },
++  { "DELAYED_MSG", "SR__OPERATION__DELAYED_MSG", 106 },
++  { "NACM_RELOAD", "SR__OPERATION__NACM_RELOAD", 107 },
++};
++static const ProtobufCIntRange sr__operation__value_ranges[] = {
++{10, 0},{20, 7},{30, 11},{40, 16},{50, 20},{60, 24},{70, 26},{80, 30},{101, 36},{0, 43}
++};
++static const ProtobufCEnumValueIndex sr__operation__enum_values_by_name[43] =
++{
++  { "ACTION", 33 },
++  { "CHECK_ENABLED_RUNNING", 28 },
++  { "CHECK_EXEC_PERMISSION", 31 },
++  { "COMMIT", 21 },
++  { "COMMIT_TIMEOUT", 37 },
++  { "COPY_CONFIG", 23 },
++  { "DATA_PROVIDE", 30 },
++  { "DELAYED_MSG", 41 },
++  { "DELETE_ITEM", 17 },
++  { "DISCARD_CHANGES", 22 },
++  { "EVENT_NOTIF", 34 },
++  { "EVENT_NOTIF_REPLAY", 35 },
++  { "FEATURE_ENABLE", 10 },
++  { "GET_CHANGES", 29 },
++  { "GET_ITEM", 11 },
++  { "GET_ITEMS", 12 },
++  { "GET_SCHEMA", 8 },
++  { "GET_SUBTREE", 13 },
++  { "GET_SUBTREES", 14 },
++  { "GET_SUBTREE_CHUNK", 15 },
++  { "INTERNAL_STATE_DATA", 39 },
++  { "LIST_SCHEMAS", 7 },
++  { "LOCK", 24 },
++  { "MODULE_INSTALL", 9 },
++  { "MOVE_ITEM", 18 },
++  { "NACM_RELOAD", 42 },
++  { "NOTIF_STORE_CLEANUP", 40 },
++  { "OPER_DATA_TIMEOUT", 38 },
++  { "RPC", 32 },
++  { "SESSION_CHECK", 3 },
++  { "SESSION_REFRESH", 2 },
++  { "SESSION_SET_OPTS", 5 },
++  { "SESSION_START", 0 },
++  { "SESSION_STOP", 1 },
++  { "SESSION_SWITCH_DS", 4 },
++  { "SET_ITEM", 16 },
++  { "SET_ITEM_STR", 19 },
++  { "SUBSCRIBE", 26 },
++  { "UNLOCK", 25 },
++  { "UNSUBSCRIBE", 27 },
++  { "UNSUBSCRIBE_DESTINATION", 36 },
++  { "VALIDATE", 20 },
++  { "VERSION_VERIFY", 6 },
++};
++const ProtobufCEnumDescriptor sr__operation__descriptor =
++{
++  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
++  "sr.Operation",
++  "Operation",
++  "Sr__Operation",
++  "sr",
++  43,
++  sr__operation__enum_values_by_number,
++  43,
++  sr__operation__enum_values_by_name,
++  9,
++  sr__operation__value_ranges,
++  NULL,NULL,NULL,NULL   /* reserved[1234] */
++};
+Index: sysrepo-0.7.5/src/common/sysrepo.pb-c.h
+===================================================================
+--- /dev/null
++++ sysrepo-0.7.5/src/common/sysrepo.pb-c.h
+@@ -0,0 +1,4238 @@
++/* Generated by the protocol buffer compiler.  DO NOT EDIT! */
++/* Generated from: sysrepo.proto */
++
++#ifndef PROTOBUF_C_sysrepo_2eproto__INCLUDED
++#define PROTOBUF_C_sysrepo_2eproto__INCLUDED
++
++#include <protobuf-c/protobuf-c.h>
++
++PROTOBUF_C__BEGIN_DECLS
++
++#if PROTOBUF_C_VERSION_NUMBER < 1000000
++# error This file was generated by a newer version of protoc-c which is incompatible with your libprotobuf-c headers. Please update your headers.
++#elif 1002001 < PROTOBUF_C_MIN_COMPILER_VERSION
++# error This file was generated by an older version of protoc-c which is incompatible with your libprotobuf-c headers. Please regenerate this file with a newer version of protoc-c.
++#endif
++
++
++typedef struct _Sr__Value Sr__Value;
++typedef struct _Sr__Node Sr__Node;
++typedef struct _Sr__Error Sr__Error;
++typedef struct _Sr__SessionStartReq Sr__SessionStartReq;
++typedef struct _Sr__SessionStartResp Sr__SessionStartResp;
++typedef struct _Sr__SessionStopReq Sr__SessionStopReq;
++typedef struct _Sr__SessionStopResp Sr__SessionStopResp;
++typedef struct _Sr__SessionRefreshReq Sr__SessionRefreshReq;
++typedef struct _Sr__SessionRefreshResp Sr__SessionRefreshResp;
++typedef struct _Sr__SessionCheckReq Sr__SessionCheckReq;
++typedef struct _Sr__SessionCheckResp Sr__SessionCheckResp;
++typedef struct _Sr__SessionSwitchDsReq Sr__SessionSwitchDsReq;
++typedef struct _Sr__SessionSwitchDsResp Sr__SessionSwitchDsResp;
++typedef struct _Sr__SessionSetOptsReq Sr__SessionSetOptsReq;
++typedef struct _Sr__SessionSetOptsResp Sr__SessionSetOptsResp;
++typedef struct _Sr__VersionVerifyReq Sr__VersionVerifyReq;
++typedef struct _Sr__VersionVerifyResp Sr__VersionVerifyResp;
++typedef struct _Sr__SchemaRevision Sr__SchemaRevision;
++typedef struct _Sr__SchemaSubmodule Sr__SchemaSubmodule;
++typedef struct _Sr__Schema Sr__Schema;
++typedef struct _Sr__ListSchemasReq Sr__ListSchemasReq;
++typedef struct _Sr__ListSchemasResp Sr__ListSchemasResp;
++typedef struct _Sr__GetSchemaReq Sr__GetSchemaReq;
++typedef struct _Sr__GetSchemaResp Sr__GetSchemaResp;
++typedef struct _Sr__GetItemReq Sr__GetItemReq;
++typedef struct _Sr__GetItemResp Sr__GetItemResp;
++typedef struct _Sr__GetItemsReq Sr__GetItemsReq;
++typedef struct _Sr__GetItemsResp Sr__GetItemsResp;
++typedef struct _Sr__GetSubtreeReq Sr__GetSubtreeReq;
++typedef struct _Sr__GetSubtreeResp Sr__GetSubtreeResp;
++typedef struct _Sr__GetSubtreesReq Sr__GetSubtreesReq;
++typedef struct _Sr__GetSubtreesResp Sr__GetSubtreesResp;
++typedef struct _Sr__GetSubtreeChunkReq Sr__GetSubtreeChunkReq;
++typedef struct _Sr__GetSubtreeChunkResp Sr__GetSubtreeChunkResp;
++typedef struct _Sr__SetItemReq Sr__SetItemReq;
++typedef struct _Sr__SetItemResp Sr__SetItemResp;
++typedef struct _Sr__SetItemStrReq Sr__SetItemStrReq;
++typedef struct _Sr__SetItemStrResp Sr__SetItemStrResp;
++typedef struct _Sr__DeleteItemReq Sr__DeleteItemReq;
++typedef struct _Sr__DeleteItemResp Sr__DeleteItemResp;
++typedef struct _Sr__MoveItemReq Sr__MoveItemReq;
++typedef struct _Sr__MoveItemResp Sr__MoveItemResp;
++typedef struct _Sr__ValidateReq Sr__ValidateReq;
++typedef struct _Sr__ValidateResp Sr__ValidateResp;
++typedef struct _Sr__CommitReq Sr__CommitReq;
++typedef struct _Sr__CommitResp Sr__CommitResp;
++typedef struct _Sr__DiscardChangesReq Sr__DiscardChangesReq;
++typedef struct _Sr__DiscardChangesResp Sr__DiscardChangesResp;
++typedef struct _Sr__CopyConfigReq Sr__CopyConfigReq;
++typedef struct _Sr__CopyConfigResp Sr__CopyConfigResp;
++typedef struct _Sr__LockReq Sr__LockReq;
++typedef struct _Sr__LockResp Sr__LockResp;
++typedef struct _Sr__UnlockReq Sr__UnlockReq;
++typedef struct _Sr__UnlockResp Sr__UnlockResp;
++typedef struct _Sr__SubscribeReq Sr__SubscribeReq;
++typedef struct _Sr__SubscribeResp Sr__SubscribeResp;
++typedef struct _Sr__UnsubscribeReq Sr__UnsubscribeReq;
++typedef struct _Sr__UnsubscribeResp Sr__UnsubscribeResp;
++typedef struct _Sr__CheckEnabledRunningReq Sr__CheckEnabledRunningReq;
++typedef struct _Sr__CheckEnabledRunningResp Sr__CheckEnabledRunningResp;
++typedef struct _Sr__ModuleInstallNotification Sr__ModuleInstallNotification;
++typedef struct _Sr__FeatureEnableNotification Sr__FeatureEnableNotification;
++typedef struct _Sr__ModuleChangeNotification Sr__ModuleChangeNotification;
++typedef struct _Sr__SubtreeChangeNotification Sr__SubtreeChangeNotification;
++typedef struct _Sr__Change Sr__Change;
++typedef struct _Sr__GetChangesReq Sr__GetChangesReq;
++typedef struct _Sr__GetChangesResp Sr__GetChangesResp;
++typedef struct _Sr__CheckExecPermReq Sr__CheckExecPermReq;
++typedef struct _Sr__CheckExecPermResp Sr__CheckExecPermResp;
++typedef struct _Sr__RPCReq Sr__RPCReq;
++typedef struct _Sr__RPCResp Sr__RPCResp;
++typedef struct _Sr__EventNotifReq Sr__EventNotifReq;
++typedef struct _Sr__EventNotifResp Sr__EventNotifResp;
++typedef struct _Sr__EventNotifReplayReq Sr__EventNotifReplayReq;
++typedef struct _Sr__EventNotifReplayResp Sr__EventNotifReplayResp;
++typedef struct _Sr__DataProvideReq Sr__DataProvideReq;
++typedef struct _Sr__DataProvideResp Sr__DataProvideResp;
++typedef struct _Sr__ModuleInstallReq Sr__ModuleInstallReq;
++typedef struct _Sr__ModuleInstallResp Sr__ModuleInstallResp;
++typedef struct _Sr__FeatureEnableReq Sr__FeatureEnableReq;
++typedef struct _Sr__FeatureEnableResp Sr__FeatureEnableResp;
++typedef struct _Sr__UnsubscribeDestinationReq Sr__UnsubscribeDestinationReq;
++typedef struct _Sr__CommitTimeoutReq Sr__CommitTimeoutReq;
++typedef struct _Sr__OperDataTimeoutReq Sr__OperDataTimeoutReq;
++typedef struct _Sr__InternalStateDataReq Sr__InternalStateDataReq;
++typedef struct _Sr__NotifStoreCleanupReq Sr__NotifStoreCleanupReq;
++typedef struct _Sr__DelayedMsgReq Sr__DelayedMsgReq;
++typedef struct _Sr__NacmReloadReq Sr__NacmReloadReq;
++typedef struct _Sr__Request Sr__Request;
++typedef struct _Sr__Response Sr__Response;
++typedef struct _Sr__Notification Sr__Notification;
++typedef struct _Sr__NotificationAck Sr__NotificationAck;
++typedef struct _Sr__InternalRequest Sr__InternalRequest;
++typedef struct _Sr__Msg Sr__Msg;
++
++
++/* --- enums --- */
++
++typedef enum _Sr__Value__Types {
++  SR__VALUE__TYPES__LIST = 1,
++  SR__VALUE__TYPES__CONTAINER = 2,
++  SR__VALUE__TYPES__CONTAINER_PRESENCE = 3,
++  SR__VALUE__TYPES__LEAF_EMPTY = 4,
++  SR__VALUE__TYPES__BINARY = 10,
++  SR__VALUE__TYPES__BITS = 11,
++  SR__VALUE__TYPES__BOOL = 12,
++  SR__VALUE__TYPES__DECIMAL64 = 13,
++  SR__VALUE__TYPES__ENUM = 14,
++  SR__VALUE__TYPES__IDENTITYREF = 15,
++  SR__VALUE__TYPES__INSTANCEID = 16,
++  SR__VALUE__TYPES__INT8 = 17,
++  SR__VALUE__TYPES__INT16 = 18,
++  SR__VALUE__TYPES__INT32 = 19,
++  SR__VALUE__TYPES__INT64 = 20,
++  SR__VALUE__TYPES__STRING = 21,
++  SR__VALUE__TYPES__UINT8 = 22,
++  SR__VALUE__TYPES__UINT16 = 23,
++  SR__VALUE__TYPES__UINT32 = 24,
++  SR__VALUE__TYPES__UINT64 = 25,
++  SR__VALUE__TYPES__ANYXML = 26,
++  SR__VALUE__TYPES__ANYDATA = 27
++    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(SR__VALUE__TYPES)
++} Sr__Value__Types;
++typedef enum _Sr__MoveItemReq__MovePosition {
++  SR__MOVE_ITEM_REQ__MOVE_POSITION__BEFORE = 1,
++  SR__MOVE_ITEM_REQ__MOVE_POSITION__AFTER = 2,
++  SR__MOVE_ITEM_REQ__MOVE_POSITION__FIRST = 3,
++  SR__MOVE_ITEM_REQ__MOVE_POSITION__LAST = 4
++    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(SR__MOVE_ITEM_REQ__MOVE_POSITION)
++} Sr__MoveItemReq__MovePosition;
++/*
++ **
++ * @brief Type of the event notification.
++ */
++typedef enum _Sr__EventNotifReq__NotifType {
++  SR__EVENT_NOTIF_REQ__NOTIF_TYPE__REALTIME = 1,
++  SR__EVENT_NOTIF_REQ__NOTIF_TYPE__REPLAY = 2,
++  SR__EVENT_NOTIF_REQ__NOTIF_TYPE__REPLAY_COMPLETE = 3,
++  SR__EVENT_NOTIF_REQ__NOTIF_TYPE__REPLAY_STOP = 4
++    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(SR__EVENT_NOTIF_REQ__NOTIF_TYPE)
++} Sr__EventNotifReq__NotifType;
++/*
++ **
++ * @brief Flags used to override default session handling.
++ */
++typedef enum _Sr__EventNotifReq__NotifFlags {
++  /*
++   **< Notification will be handled normally. 
++   */
++  SR__EVENT_NOTIF_REQ__NOTIF_FLAGS__DEFAULT = 0,
++  /*
++   **< Notification will not be stored in the notification store. 
++   */
++  SR__EVENT_NOTIF_REQ__NOTIF_FLAGS__EPHEMERAL = 1
++    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(SR__EVENT_NOTIF_REQ__NOTIF_FLAGS)
++} Sr__EventNotifReq__NotifFlags;
++/*
++ **
++ * @brief Type of the message.
++ */
++typedef enum _Sr__Msg__MsgType {
++  /*
++   **< The message is a request. 
++   */
++  SR__MSG__MSG_TYPE__REQUEST = 1,
++  /*
++   **< The message is a response to the request. 
++   */
++  SR__MSG__MSG_TYPE__RESPONSE = 2,
++  /*
++   **< The message is a notification. 
++   */
++  SR__MSG__MSG_TYPE__NOTIFICATION = 3,
++  /*
++   **< The message is a notification acknowledgment. 
++   */
++  SR__MSG__MSG_TYPE__NOTIFICATION_ACK = 4,
++  /*
++   **< The message is an internal request, should not be used from the public API. 
++   */
++  SR__MSG__MSG_TYPE__INTERNAL_REQUEST = 5
++    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(SR__MSG__MSG_TYPE)
++} Sr__Msg__MsgType;
++/*
++ **
++ * @brief Variant of the API. Currently only values (sr_val_t) vs. trees (sr_node_t).
++ */
++typedef enum _Sr__ApiVariant {
++  SR__API_VARIANT__VALUES = 1,
++  SR__API_VARIANT__TREES = 2
++    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(SR__API_VARIANT)
++} Sr__ApiVariant;
++/*
++ **
++ * @brief Datastore on which the configuration session will operate.
++ */
++typedef enum _Sr__DataStore {
++  SR__DATA_STORE__STARTUP = 1,
++  SR__DATA_STORE__RUNNING = 2,
++  SR__DATA_STORE__CANDIDATE = 3
++    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(SR__DATA_STORE)
++} Sr__DataStore;
++/*
++ **
++ * @brief Flags used to override default session handling.
++ */
++typedef enum _Sr__SessionFlags {
++  /*
++   **< Default (normal) session behavior. 
++   */
++  SR__SESSION_FLAGS__SESS_DEFAULT = 0,
++  /*
++   **< Session will process only configuration data (e.g. sysrepo won't
++   *return any state data by ::sr_get_items / ::sr_get_items_iter calls). 
++   */
++  SR__SESSION_FLAGS__SESS_CONFIG_ONLY = 1,
++  /*
++   **< Enable NETCONF access control for this session. 
++   */
++  SR__SESSION_FLAGS__SESS_ENABLE_NACM = 2,
++  /*
++   **< Notification session (internal type of session). 
++   */
++  SR__SESSION_FLAGS__SESS_NOTIFICATION = 1024
++    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(SR__SESSION_FLAGS)
++} Sr__SessionFlags;
++/*
++ **
++ * @brief Flags used to override default behavior of data manipulation calls.
++ */
++typedef enum _Sr__EditFlags {
++  /*
++   **< Default behavior - recursive and non-strict. 
++   */
++  SR__EDIT_FLAGS__EDIT_DEFAULT = 0,
++  /*
++   **< Non-recursive behavior:
++   *by ::SetItemReq, all preceding nodes (parents) of the identified element must exist,
++   *by ::DeleteItemReq xpath must not identify an non-empty list or non-empty container. 
++   */
++  SR__EDIT_FLAGS__EDIT_NON_RECURSIVE = 1,
++  /*
++   **< Strict behavior:
++   *by ::SetItemReq the identified element must not exist (similar to netconf create operation),
++   *by ::DeleteItemReq the identified element must exist (similar to netconf delete operation). 
++   */
++  SR__EDIT_FLAGS__EDIT_STRICT = 2
++    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(SR__EDIT_FLAGS)
++} Sr__EditFlags;
++typedef enum _Sr__SubscriptionType {
++  SR__SUBSCRIPTION_TYPE__MODULE_INSTALL_SUBS = 1,
++  SR__SUBSCRIPTION_TYPE__FEATURE_ENABLE_SUBS = 2,
++  SR__SUBSCRIPTION_TYPE__MODULE_CHANGE_SUBS = 10,
++  SR__SUBSCRIPTION_TYPE__SUBTREE_CHANGE_SUBS = 11,
++  SR__SUBSCRIPTION_TYPE__DP_GET_ITEMS_SUBS = 20,
++  SR__SUBSCRIPTION_TYPE__RPC_SUBS = 30,
++  SR__SUBSCRIPTION_TYPE__ACTION_SUBS = 31,
++  SR__SUBSCRIPTION_TYPE__EVENT_NOTIF_SUBS = 40,
++  /*
++   **< Used only internally to test for inactive notification subscriptions. 
++   */
++  SR__SUBSCRIPTION_TYPE__HELLO_SUBS = 50,
++  /*
++   **< Used only internally to notify about the end of the commit process. 
++   */
++  SR__SUBSCRIPTION_TYPE__COMMIT_END_SUBS = 51
++    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(SR__SUBSCRIPTION_TYPE)
++} Sr__SubscriptionType;
++typedef enum _Sr__NotificationEvent {
++  SR__NOTIFICATION_EVENT__VERIFY_EV = 1,
++  SR__NOTIFICATION_EVENT__APPLY_EV = 2,
++  SR__NOTIFICATION_EVENT__ABORT_EV = 3,
++  SR__NOTIFICATION_EVENT__ENABLED_EV = 4
++    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(SR__NOTIFICATION_EVENT)
++} Sr__NotificationEvent;
++typedef enum _Sr__ModuleState {
++  SR__MODULE_STATE__UNINSTALLED = 1,
++  SR__MODULE_STATE__IMPORTED = 2,
++  SR__MODULE_STATE__IMPLEMENTED = 3
++    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(SR__MODULE_STATE)
++} Sr__ModuleState;
++typedef enum _Sr__ChangeOperation {
++  SR__CHANGE_OPERATION__CREATED = 1,
++  SR__CHANGE_OPERATION__MODIFIED = 2,
++  SR__CHANGE_OPERATION__DELETED = 3,
++  SR__CHANGE_OPERATION__MOVED = 4
++    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(SR__CHANGE_OPERATION)
++} Sr__ChangeOperation;
++/*
++ **
++ * @brief Requested operation.
++ */
++typedef enum _Sr__Operation {
++  SR__OPERATION__SESSION_START = 10,
++  SR__OPERATION__SESSION_STOP = 11,
++  SR__OPERATION__SESSION_REFRESH = 12,
++  SR__OPERATION__SESSION_CHECK = 13,
++  SR__OPERATION__SESSION_SWITCH_DS = 14,
++  SR__OPERATION__SESSION_SET_OPTS = 15,
++  SR__OPERATION__VERSION_VERIFY = 16,
++  SR__OPERATION__LIST_SCHEMAS = 20,
++  SR__OPERATION__GET_SCHEMA = 21,
++  SR__OPERATION__MODULE_INSTALL = 22,
++  SR__OPERATION__FEATURE_ENABLE = 23,
++  SR__OPERATION__GET_ITEM = 30,
++  SR__OPERATION__GET_ITEMS = 31,
++  SR__OPERATION__GET_SUBTREE = 32,
++  SR__OPERATION__GET_SUBTREES = 33,
++  SR__OPERATION__GET_SUBTREE_CHUNK = 34,
++  SR__OPERATION__SET_ITEM = 40,
++  SR__OPERATION__DELETE_ITEM = 41,
++  SR__OPERATION__MOVE_ITEM = 42,
++  SR__OPERATION__SET_ITEM_STR = 43,
++  SR__OPERATION__VALIDATE = 50,
++  SR__OPERATION__COMMIT = 51,
++  SR__OPERATION__DISCARD_CHANGES = 52,
++  SR__OPERATION__COPY_CONFIG = 53,
++  SR__OPERATION__LOCK = 60,
++  SR__OPERATION__UNLOCK = 61,
++  SR__OPERATION__SUBSCRIBE = 70,
++  SR__OPERATION__UNSUBSCRIBE = 71,
++  SR__OPERATION__CHECK_ENABLED_RUNNING = 72,
++  SR__OPERATION__GET_CHANGES = 73,
++  SR__OPERATION__DATA_PROVIDE = 80,
++  SR__OPERATION__CHECK_EXEC_PERMISSION = 81,
++  SR__OPERATION__RPC = 82,
++  SR__OPERATION__ACTION = 83,
++  SR__OPERATION__EVENT_NOTIF = 84,
++  SR__OPERATION__EVENT_NOTIF_REPLAY = 85,
++  SR__OPERATION__UNSUBSCRIBE_DESTINATION = 101,
++  SR__OPERATION__COMMIT_TIMEOUT = 102,
++  SR__OPERATION__OPER_DATA_TIMEOUT = 103,
++  SR__OPERATION__INTERNAL_STATE_DATA = 104,
++  SR__OPERATION__NOTIF_STORE_CLEANUP = 105,
++  SR__OPERATION__DELAYED_MSG = 106,
++  SR__OPERATION__NACM_RELOAD = 107
++    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(SR__OPERATION)
++} Sr__Operation;
++
++/* --- messages --- */
++
++/*
++ **
++ * @brief Value of an item stored (or to be stored) in the datastore.
++ * Can be mapped to sr_val_t data structure from sysrepo library API.
++ */
++struct  _Sr__Value
++{
++  ProtobufCMessage base;
++  char *xpath;
++  Sr__Value__Types type;
++  protobuf_c_boolean dflt;
++  char *binary_val;
++  char *bits_val;
++  protobuf_c_boolean has_bool_val;
++  protobuf_c_boolean bool_val;
++  protobuf_c_boolean has_decimal64_val;
++  double decimal64_val;
++  char *enum_val;
++  char *identityref_val;
++  char *instanceid_val;
++  protobuf_c_boolean has_int8_val;
++  int32_t int8_val;
++  protobuf_c_boolean has_int16_val;
++  int32_t int16_val;
++  protobuf_c_boolean has_int32_val;
++  int32_t int32_val;
++  protobuf_c_boolean has_int64_val;
++  int64_t int64_val;
++  char *string_val;
++  protobuf_c_boolean has_uint8_val;
++  uint32_t uint8_val;
++  protobuf_c_boolean has_uint16_val;
++  uint32_t uint16_val;
++  protobuf_c_boolean has_uint32_val;
++  uint32_t uint32_val;
++  protobuf_c_boolean has_uint64_val;
++  uint64_t uint64_val;
++  char *anyxml_val;
++  char *anydata_val;
++};
++#define SR__VALUE__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__value__descriptor) \
++    , NULL, 0, 0, NULL, NULL, 0,0, 0,0, NULL, NULL, NULL, 0,0, 0,0, 0,0, 0,0, NULL, 0,0, 0,0, 0,0, 0,0, NULL, NULL }
++
++
++/*
++ **
++ * @brief Item stored (or to be stored) in the datastore represented as a tree node
++ * reflecting module schema. Can be mapped to sr_node_t data structure from sysrepo library API.
++ */
++struct  _Sr__Node
++{
++  ProtobufCMessage base;
++  /*
++   **< Value of the node; member *xpath* is used to store node's name. 
++   */
++  Sr__Value *value;
++  /*
++   **< Name of the module that defines scheme of this node. 
++   */
++  char *module_name;
++  /*
++   **< Direct descendands of this node. 
++   */
++  size_t n_children;
++  Sr__Node **children;
++};
++#define SR__NODE__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__node__descriptor) \
++    , NULL, NULL, 0,NULL }
++
++
++/*
++ **
++ * @brief Error message retuned from the Sysrepo Engine.
++ */
++struct  _Sr__Error
++{
++  ProtobufCMessage base;
++  char *message;
++  char *xpath;
++};
++#define SR__ERROR__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__error__descriptor) \
++    , NULL, NULL }
++
++
++/*
++ **
++ * @brief Request for starting a session. Sent by sr_session_start API call.
++ */
++struct  _Sr__SessionStartReq
++{
++  ProtobufCMessage base;
++  Sr__DataStore datastore;
++  char *user_name;
++  /*
++   **< Bitwise OR of SessionFlags. 
++   */
++  uint32_t options;
++  /*
++   **< Applicable if SESS_NOTIFICATION was specified. 
++   */
++  protobuf_c_boolean has_commit_id;
++  uint32_t commit_id;
++};
++#define SR__SESSION_START_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__session_start_req__descriptor) \
++    , 0, NULL, 0, 0,0 }
++
++
++/*
++ **
++ * @brief Response to session_start request.
++ */
++struct  _Sr__SessionStartResp
++{
++  ProtobufCMessage base;
++  uint32_t session_id;
++};
++#define SR__SESSION_START_RESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__session_start_resp__descriptor) \
++    , 0 }
++
++
++/*
++ **
++ * @brief Request for stopping the session. Sent by sr_session_stop API call.
++ */
++struct  _Sr__SessionStopReq
++{
++  ProtobufCMessage base;
++  uint32_t session_id;
++};
++#define SR__SESSION_STOP_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__session_stop_req__descriptor) \
++    , 0 }
++
++
++/*
++ **
++ * @brief Response to session_stop request.
++ */
++struct  _Sr__SessionStopResp
++{
++  ProtobufCMessage base;
++  uint32_t session_id;
++};
++#define SR__SESSION_STOP_RESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__session_stop_resp__descriptor) \
++    , 0 }
++
++
++/*
++ **
++ * @brief Refreshes configuration data cached within the session.
++ * Sent by sr_session_refresh API call.
++ */
++struct  _Sr__SessionRefreshReq
++{
++  ProtobufCMessage base;
++};
++#define SR__SESSION_REFRESH_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__session_refresh_req__descriptor) \
++     }
++
++
++/*
++ **
++ * @brief Response to sr_session_refresh request.
++ */
++struct  _Sr__SessionRefreshResp
++{
++  ProtobufCMessage base;
++  size_t n_errors;
++  Sr__Error **errors;
++};
++#define SR__SESSION_REFRESH_RESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__session_refresh_resp__descriptor) \
++    , 0,NULL }
++
++
++/*
++ **
++ * @brief Checks aliveness and validity of the session & connection tied to it.
++ * Sent by sr_session_check API call.
++ */
++struct  _Sr__SessionCheckReq
++{
++  ProtobufCMessage base;
++};
++#define SR__SESSION_CHECK_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__session_check_req__descriptor) \
++     }
++
++
++/*
++ **
++ * @brief Response to sr_session_check request.
++ */
++struct  _Sr__SessionCheckResp
++{
++  ProtobufCMessage base;
++  size_t n_errors;
++  Sr__Error **errors;
++};
++#define SR__SESSION_CHECK_RESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__session_check_resp__descriptor) \
++    , 0,NULL }
++
++
++/*
++ **
++ * @brief Changes the datastore to which the session is tied to.
++ */
++struct  _Sr__SessionSwitchDsReq
++{
++  ProtobufCMessage base;
++  Sr__DataStore datastore;
++};
++#define SR__SESSION_SWITCH_DS_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__session_switch_ds_req__descriptor) \
++    , 0 }
++
++
++/*
++ **
++ * @brief Response to sr_session_switch_ds request.
++ */
++struct  _Sr__SessionSwitchDsResp
++{
++  ProtobufCMessage base;
++};
++#define SR__SESSION_SWITCH_DS_RESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__session_switch_ds_resp__descriptor) \
++     }
++
++
++/*
++ **
++ * @brief Request for modification of session options.
++ */
++struct  _Sr__SessionSetOptsReq
++{
++  ProtobufCMessage base;
++  uint32_t options;
++};
++#define SR__SESSION_SET_OPTS_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__session_set_opts_req__descriptor) \
++    , 0 }
++
++
++/*
++ **
++ * @brief Response to sr_session_set_options.
++ */
++struct  _Sr__SessionSetOptsResp
++{
++  ProtobufCMessage base;
++};
++#define SR__SESSION_SET_OPTS_RESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__session_set_opts_resp__descriptor) \
++     }
++
++
++/*
++ **
++ * @brief Request to verify version compatibility.
++ */
++struct  _Sr__VersionVerifyReq
++{
++  ProtobufCMessage base;
++  char *soname;
++};
++#define SR__VERSION_VERIFY_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__version_verify_req__descriptor) \
++    , NULL }
++
++
++/*
++ **
++ * @brief Response to version verification.
++ */
++struct  _Sr__VersionVerifyResp
++{
++  ProtobufCMessage base;
++  /*
++   **< server-side SONAME version in case of versions incompatibility. 
++   */
++  char *soname;
++};
++#define SR__VERSION_VERIFY_RESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__version_verify_resp__descriptor) \
++    , NULL }
++
++
++/*
++ **
++ * @brief Schema revision details.
++ */
++struct  _Sr__SchemaRevision
++{
++  ProtobufCMessage base;
++  /*
++   **< Latest revision date of the module. 
++   */
++  char *revision;
++  /*
++   **< Absolute path to file where the schema is stored (YANG format). 
++   */
++  char *file_path_yang;
++  /*
++   **< Absolute path to file where the schema is stored (.yin format). 
++   */
++  char *file_path_yin;
++};
++#define SR__SCHEMA_REVISION__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__schema_revision__descriptor) \
++    , NULL, NULL, NULL }
++
++
++/*
++ **
++ * @brief Schema submodule information.
++ */
++struct  _Sr__SchemaSubmodule
++{
++  ProtobufCMessage base;
++  /*
++   **< Submodule name 
++   */
++  char *submodule_name;
++  /*
++   **< Revision of the submodule 
++   */
++  Sr__SchemaRevision *revision;
++};
++#define SR__SCHEMA_SUBMODULE__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__schema_submodule__descriptor) \
++    , NULL, NULL }
++
++
++/*
++ **
++ * @brief Information about a schema installed in sysrepo datastore.
++ */
++struct  _Sr__Schema
++{
++  ProtobufCMessage base;
++  /*
++   **< Name of the module. 
++   */
++  char *module_name;
++  /*
++   **< Namespace of the module. 
++   */
++  char *ns;
++  /*
++   **< Prefix of he module. 
++   */
++  char *prefix;
++  /*
++   **< TRUE only for explicitly installed modules (those are always implemented). 
++   */
++  protobuf_c_boolean installed;
++  /*
++   **< TRUE for implemented modules (do not have to be installed if they have augments,
++   *deviations or are targets for leafrefs of other implemented modules). 
++   */
++  protobuf_c_boolean implemented;
++  /*
++   **< Revision of the module
++   */
++  Sr__SchemaRevision *revision;
++  /*
++   **< Submodules 
++   */
++  size_t n_submodules;
++  Sr__SchemaSubmodule **submodules;
++  /*
++   **< Features enabled for the module 
++   */
++  size_t n_enabled_features;
++  char **enabled_features;
++};
++#define SR__SCHEMA__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__schema__descriptor) \
++    , NULL, NULL, NULL, 0, 0, NULL, 0,NULL, 0,NULL }
++
++
++/*
++ **
++ * @brief Retrieves an array of schemas installed in the sysrepo datastore.
++ * Sent by sr_list_schemas API call.
++ */
++struct  _Sr__ListSchemasReq
++{
++  ProtobufCMessage base;
++};
++#define SR__LIST_SCHEMAS_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__list_schemas_req__descriptor) \
++     }
++
++
++/*
++ **
++ * @brief Response to sr_list_schemas request.
++ */
++struct  _Sr__ListSchemasResp
++{
++  ProtobufCMessage base;
++  size_t n_schemas;
++  Sr__Schema **schemas;
++};
++#define SR__LIST_SCHEMAS_RESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__list_schemas_resp__descriptor) \
++    , 0,NULL }
++
++
++/*
++ **
++ * @brief Retrieves the content of specified schema file.
++ * Sent by sr_get_schema API call.
++ */
++struct  _Sr__GetSchemaReq
++{
++  ProtobufCMessage base;
++  char *module_name;
++  char *revision;
++  char *submodule_name;
++  char *submodule_revision;
++  protobuf_c_boolean yang_format;
++};
++#define SR__GET_SCHEMA_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__get_schema_req__descriptor) \
++    , NULL, NULL, NULL, NULL, 0 }
++
++
++/*
++ **
++ * @brief Response to sr_get_schema request.
++ */
++struct  _Sr__GetSchemaResp
++{
++  ProtobufCMessage base;
++  char *schema_content;
++};
++#define SR__GET_SCHEMA_RESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__get_schema_resp__descriptor) \
++    , NULL }
++
++
++/*
++ **
++ * @brief Retrieves a single data element stored under provided path.
++ * Sent by sr_get_item API call.
++ */
++struct  _Sr__GetItemReq
++{
++  ProtobufCMessage base;
++  char *xpath;
++};
++#define SR__GET_ITEM_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__get_item_req__descriptor) \
++    , NULL }
++
++
++/*
++ **
++ * @brief Response to get_item request.
++ */
++struct  _Sr__GetItemResp
++{
++  ProtobufCMessage base;
++  Sr__Value *value;
++};
++#define SR__GET_ITEM_RESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__get_item_resp__descriptor) \
++    , NULL }
++
++
++/*
++ **
++ * @brief Retrieves an array of data elements stored under provided path.
++ * Sent by sr_get_items and sr_get_items_iter API calls.
++ */
++struct  _Sr__GetItemsReq
++{
++  ProtobufCMessage base;
++  char *xpath;
++  /*
++   * The options below are applicable only for sr_get_items_iter
++   * (not set by sr_get_items).
++   */
++  protobuf_c_boolean has_limit;
++  uint32_t limit;
++  protobuf_c_boolean has_offset;
++  uint32_t offset;
++};
++#define SR__GET_ITEMS_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__get_items_req__descriptor) \
++    , NULL, 0,0, 0,0 }
++
++
++/*
++ **
++ * @brief Response to get_items / sr_get_items_iter request.
++ */
++struct  _Sr__GetItemsResp
++{
++  ProtobufCMessage base;
++  size_t n_values;
++  Sr__Value **values;
++};
++#define SR__GET_ITEMS_RESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__get_items_resp__descriptor) \
++    , 0,NULL }
++
++
++/*
++ **
++ * @brief Retrieves a single subtree whose root is stored under provided path.
++ * Sent by sr_get_subtree API call.
++ */
++struct  _Sr__GetSubtreeReq
++{
++  ProtobufCMessage base;
++  char *xpath;
++};
++#define SR__GET_SUBTREE_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__get_subtree_req__descriptor) \
++    , NULL }
++
++
++/*
++ **
++ * @brief Response to sr_get_subtree request.
++ */
++struct  _Sr__GetSubtreeResp
++{
++  ProtobufCMessage base;
++  Sr__Node *tree;
++};
++#define SR__GET_SUBTREE_RESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__get_subtree_resp__descriptor) \
++    , NULL }
++
++
++/*
++ **
++ * @brief Retrieves an array of subtrees whose root nodes match provided path.
++ * Sent by sr_get_subtrees API call.
++ */
++struct  _Sr__GetSubtreesReq
++{
++  ProtobufCMessage base;
++  char *xpath;
++};
++#define SR__GET_SUBTREES_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__get_subtrees_req__descriptor) \
++    , NULL }
++
++
++/*
++ **
++ * @brief Response to sr_get_subtrees request.
++ */
++struct  _Sr__GetSubtreesResp
++{
++  ProtobufCMessage base;
++  size_t n_trees;
++  Sr__Node **trees;
++};
++#define SR__GET_SUBTREES_RESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__get_subtrees_resp__descriptor) \
++    , 0,NULL }
++
++
++/*
++ **
++ * @brief Retrieves a chunk of a single or multiple subtrees.
++ * A subtree chunk is also a tree, where the root node is the node referenced by XPath,
++ * the next level consists of its children skipping the first "slice_offset" nodes and including
++ * at most "slice_limit" nodes, while the remaining (depth_limit-2) levels always start with
++ * the first child (slice_offset is ignored) and include at most "child_limit" nodes.
++ * The chunk consists of at most "depth_limit" levels.
++ * @note Order of child nodes depends on the libyang implementation.
++ */
++struct  _Sr__GetSubtreeChunkReq
++{
++  ProtobufCMessage base;
++  char *xpath;
++  protobuf_c_boolean single;
++  uint32_t slice_offset;
++  uint32_t slice_width;
++  uint32_t child_limit;
++  uint32_t depth_limit;
++};
++#define SR__GET_SUBTREE_CHUNK_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__get_subtree_chunk_req__descriptor) \
++    , NULL, 0, 0, 0, 0, 0 }
++
++
++/*
++ **
++ * @brief Response to sr_get_subtree_chunk request.
++ */
++struct  _Sr__GetSubtreeChunkResp
++{
++  ProtobufCMessage base;
++  /*
++   **< JSON node-id of the root node for each subtree chunk 
++   */
++  size_t n_xpath;
++  char **xpath;
++  /*
++   **< first chunk may carry mutliple trees 
++   */
++  size_t n_chunk;
++  Sr__Node **chunk;
++};
++#define SR__GET_SUBTREE_CHUNK_RESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__get_subtree_chunk_resp__descriptor) \
++    , 0,NULL, 0,NULL }
++
++
++/*
++ **
++ * @brief Sets the value of the leaf, leaf-list or presence container.
++ * Sent by sr_set_item API call.
++ */
++struct  _Sr__SetItemReq
++{
++  ProtobufCMessage base;
++  char *xpath;
++  Sr__Value *value;
++  /*
++   **< Bitwise OR of EditFlags 
++   */
++  uint32_t options;
++};
++#define SR__SET_ITEM_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__set_item_req__descriptor) \
++    , NULL, NULL, 0 }
++
++
++/*
++ **
++ * @brief Response to sr_set_item request.
++ */
++struct  _Sr__SetItemResp
++{
++  ProtobufCMessage base;
++};
++#define SR__SET_ITEM_RESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__set_item_resp__descriptor) \
++     }
++
++
++/*
++ **
++ * @brief Sets the value of the leaf, leaf-list or presence container.
++ * The value is transferred as string.
++ * Sent by sr_set_item_str API call.
++ */
++struct  _Sr__SetItemStrReq
++{
++  ProtobufCMessage base;
++  char *xpath;
++  char *value;
++  /*
++   **< Bitwise OR of EditFlags 
++   */
++  uint32_t options;
++};
++#define SR__SET_ITEM_STR_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__set_item_str_req__descriptor) \
++    , NULL, NULL, 0 }
++
++
++/*
++ **
++ * @brief Response to sr_set_item_str request.
++ */
++struct  _Sr__SetItemStrResp
++{
++  ProtobufCMessage base;
++};
++#define SR__SET_ITEM_STR_RESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__set_item_str_resp__descriptor) \
++     }
++
++
++/*
++ **
++ * @brief Deletes the nodes under the specified xpath.
++ * Sent by sr_delete_item API call.
++ */
++struct  _Sr__DeleteItemReq
++{
++  ProtobufCMessage base;
++  char *xpath;
++  /*
++   **< Bitwise OR of EditFlags 
++   */
++  uint32_t options;
++};
++#define SR__DELETE_ITEM_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__delete_item_req__descriptor) \
++    , NULL, 0 }
++
++
++/*
++ **
++ * @brief Response to sr_delete_item request.
++ */
++struct  _Sr__DeleteItemResp
++{
++  ProtobufCMessage base;
++};
++#define SR__DELETE_ITEM_RESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__delete_item_resp__descriptor) \
++     }
++
++
++/*
++ **
++ * @brief Move the instance of an ordered list in specified direction.
++ * Sent by sr_move_item API call.
++ */
++struct  _Sr__MoveItemReq
++{
++  ProtobufCMessage base;
++  char *xpath;
++  Sr__MoveItemReq__MovePosition position;
++  char *relative_item;
++};
++#define SR__MOVE_ITEM_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__move_item_req__descriptor) \
++    , NULL, 0, NULL }
++
++
++/*
++ **
++ * @brief Response to sr_move_item request.
++ */
++struct  _Sr__MoveItemResp
++{
++  ProtobufCMessage base;
++};
++#define SR__MOVE_ITEM_RESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__move_item_resp__descriptor) \
++     }
++
++
++/*
++ **
++ * @brief Perform the validation of changes made in current session, but do not
++ * commit nor discard them. Sent by sr_validate API call.
++ */
++struct  _Sr__ValidateReq
++{
++  ProtobufCMessage base;
++};
++#define SR__VALIDATE_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__validate_req__descriptor) \
++     }
++
++
++/*
++ **
++ * @brief Response to sr_validate request.
++ */
++struct  _Sr__ValidateResp
++{
++  ProtobufCMessage base;
++  size_t n_errors;
++  Sr__Error **errors;
++};
++#define SR__VALIDATE_RESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__validate_resp__descriptor) \
++    , 0,NULL }
++
++
++/*
++ **
++ * @brief Apply changes made in current session.
++ * Sent by sr_commit API call.
++ */
++struct  _Sr__CommitReq
++{
++  ProtobufCMessage base;
++};
++#define SR__COMMIT_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__commit_req__descriptor) \
++     }
++
++
++/*
++ **
++ * @brief Response to sr_commit request.
++ */
++struct  _Sr__CommitResp
++{
++  ProtobufCMessage base;
++  size_t n_errors;
++  Sr__Error **errors;
++};
++#define SR__COMMIT_RESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__commit_resp__descriptor) \
++    , 0,NULL }
++
++
++/*
++ **
++ * @brief Discard non-committed changes made in current session.
++ * Sent by sr_discard_changes API call.
++ */
++struct  _Sr__DiscardChangesReq
++{
++  ProtobufCMessage base;
++};
++#define SR__DISCARD_CHANGES_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__discard_changes_req__descriptor) \
++     }
++
++
++/*
++ **
++ * @brief Response to sr_discard_changes request.
++ */
++struct  _Sr__DiscardChangesResp
++{
++  ProtobufCMessage base;
++};
++#define SR__DISCARD_CHANGES_RESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__discard_changes_resp__descriptor) \
++     }
++
++
++/*
++ **
++ * @brief Replaces an entire configuration datastore  with the contents of
++ * another complete configuration datastore. Sent by sr_copy_config request.
++ */
++struct  _Sr__CopyConfigReq
++{
++  ProtobufCMessage base;
++  Sr__DataStore src_datastore;
++  Sr__DataStore dst_datastore;
++  /*
++   **< If not specified, the operation is performed on all
++   *modules that are currently active in the source datastore 
++   */
++  char *module_name;
++};
++#define SR__COPY_CONFIG_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__copy_config_req__descriptor) \
++    , 0, 0, NULL }
++
++
++/*
++ **
++ * @brief Response to sr_copy_config request.
++ */
++struct  _Sr__CopyConfigResp
++{
++  ProtobufCMessage base;
++  size_t n_errors;
++  Sr__Error **errors;
++};
++#define SR__COPY_CONFIG_RESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__copy_config_resp__descriptor) \
++    , 0,NULL }
++
++
++/*
++ **
++ * @brief Locks specified data model or the datastore which the session is tied to.
++ * Sent by sr_lock_datastore and sr_lock_model API calls.
++ */
++struct  _Sr__LockReq
++{
++  ProtobufCMessage base;
++  /*
++   **< If module name is not set, LockReq locks whole datastore. 
++   */
++  char *module_name;
++};
++#define SR__LOCK_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__lock_req__descriptor) \
++    , NULL }
++
++
++/*
++ **
++ * @brief Response to sr_lock_datastore or sr_lock_model request.
++ */
++struct  _Sr__LockResp
++{
++  ProtobufCMessage base;
++};
++#define SR__LOCK_RESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__lock_resp__descriptor) \
++     }
++
++
++/*
++ **
++ * @brief Unlocks specified data model or the datastore which the session is tied to.
++ * Sent by sr_unlock_datastore and sr_unlock_model API calls.
++ */
++struct  _Sr__UnlockReq
++{
++  ProtobufCMessage base;
++  /*
++   **< If module name is not set, UnlockReq unlocks whole datastore. 
++   */
++  char *module_name;
++};
++#define SR__UNLOCK_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__unlock_req__descriptor) \
++    , NULL }
++
++
++/*
++ **
++ * @brief Response to sr_lock_datastore or sr_lock_model request.
++ */
++struct  _Sr__UnlockResp
++{
++  ProtobufCMessage base;
++};
++#define SR__UNLOCK_RESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__unlock_resp__descriptor) \
++     }
++
++
++struct  _Sr__SubscribeReq
++{
++  ProtobufCMessage base;
++  Sr__SubscriptionType type;
++  char *destination;
++  uint32_t subscription_id;
++  char *module_name;
++  char *xpath;
++  protobuf_c_boolean has_notif_event;
++  Sr__NotificationEvent notif_event;
++  protobuf_c_boolean has_priority;
++  uint32_t priority;
++  protobuf_c_boolean has_enable_running;
++  protobuf_c_boolean enable_running;
++  protobuf_c_boolean has_enable_event;
++  protobuf_c_boolean enable_event;
++  Sr__ApiVariant api_variant;
++};
++#define SR__SUBSCRIBE_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__subscribe_req__descriptor) \
++    , 0, NULL, 0, NULL, NULL, 0,0, 0,0, 0,0, 0,0, 0 }
++
++
++struct  _Sr__SubscribeResp
++{
++  ProtobufCMessage base;
++};
++#define SR__SUBSCRIBE_RESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__subscribe_resp__descriptor) \
++     }
++
++
++struct  _Sr__UnsubscribeReq
++{
++  ProtobufCMessage base;
++  Sr__SubscriptionType type;
++  char *destination;
++  uint32_t subscription_id;
++  char *module_name;
++};
++#define SR__UNSUBSCRIBE_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__unsubscribe_req__descriptor) \
++    , 0, NULL, 0, NULL }
++
++
++struct  _Sr__UnsubscribeResp
++{
++  ProtobufCMessage base;
++};
++#define SR__UNSUBSCRIBE_RESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__unsubscribe_resp__descriptor) \
++     }
++
++
++/*
++ **
++ * @brief Checks whether the module has any enabled subtree.
++ * Sent by sr_check_enabled_running.
++ */
++struct  _Sr__CheckEnabledRunningReq
++{
++  ProtobufCMessage base;
++  char *module_name;
++};
++#define SR__CHECK_ENABLED_RUNNING_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__check_enabled_running_req__descriptor) \
++    , NULL }
++
++
++struct  _Sr__CheckEnabledRunningResp
++{
++  ProtobufCMessage base;
++  protobuf_c_boolean enabled;
++};
++#define SR__CHECK_ENABLED_RUNNING_RESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__check_enabled_running_resp__descriptor) \
++    , 0 }
++
++
++struct  _Sr__ModuleInstallNotification
++{
++  ProtobufCMessage base;
++  char *module_name;
++  char *revision;
++  Sr__ModuleState state;
++};
++#define SR__MODULE_INSTALL_NOTIFICATION__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__module_install_notification__descriptor) \
++    , NULL, NULL, 0 }
++
++
++struct  _Sr__FeatureEnableNotification
++{
++  ProtobufCMessage base;
++  char *module_name;
++  char *feature_name;
++  protobuf_c_boolean enabled;
++};
++#define SR__FEATURE_ENABLE_NOTIFICATION__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__feature_enable_notification__descriptor) \
++    , NULL, NULL, 0 }
++
++
++struct  _Sr__ModuleChangeNotification
++{
++  ProtobufCMessage base;
++  Sr__NotificationEvent event;
++  char *module_name;
++};
++#define SR__MODULE_CHANGE_NOTIFICATION__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__module_change_notification__descriptor) \
++    , 0, NULL }
++
++
++struct  _Sr__SubtreeChangeNotification
++{
++  ProtobufCMessage base;
++  Sr__NotificationEvent event;
++  char *xpath;
++};
++#define SR__SUBTREE_CHANGE_NOTIFICATION__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__subtree_change_notification__descriptor) \
++    , 0, NULL }
++
++
++struct  _Sr__Change
++{
++  ProtobufCMessage base;
++  Sr__ChangeOperation changeoperation;
++  Sr__Value *new_value;
++  Sr__Value *old_value;
++};
++#define SR__CHANGE__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__change__descriptor) \
++    , 0, NULL, NULL }
++
++
++/*
++ **
++ * @brief Retrieves an array of changes made under provided path.
++ * Sent by sr_get_changes_iter or sr_get_change_next API calls.
++ */
++struct  _Sr__GetChangesReq
++{
++  ProtobufCMessage base;
++  char *xpath;
++  uint32_t limit;
++  uint32_t offset;
++};
++#define SR__GET_CHANGES_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__get_changes_req__descriptor) \
++    , NULL, 0, 0 }
++
++
++/*
++ **
++ * @brief Response to get_changes request.
++ */
++struct  _Sr__GetChangesResp
++{
++  ProtobufCMessage base;
++  size_t n_changes;
++  Sr__Change **changes;
++};
++#define SR__GET_CHANGES_RESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__get_changes_resp__descriptor) \
++    , 0,NULL }
++
++
++/*
++ **
++ * @brief Sends a request to check if the owner of this session is authorized to invoke
++ * the protocol operation referenced by the xpath.
++ * Sent by sr_check_exec_permission.
++ */
++struct  _Sr__CheckExecPermReq
++{
++  ProtobufCMessage base;
++  char *xpath;
++};
++#define SR__CHECK_EXEC_PERM_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__check_exec_perm_req__descriptor) \
++    , NULL }
++
++
++/*
++ **
++ * @brief Response to sr_check_exec_permission request.
++ */
++struct  _Sr__CheckExecPermResp
++{
++  ProtobufCMessage base;
++  protobuf_c_boolean permitted;
++};
++#define SR__CHECK_EXEC_PERM_RESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__check_exec_perm_resp__descriptor) \
++    , 0 }
++
++
++/*
++ **
++ * @brief Sends a RPC / action request into the datastore, will be delivered to the RPC subscriber.
++ * Sent by sr_rpc_send / sr_rpc_send_tree and sr_action_send / sr_action_send_tree API calls.
++ */
++struct  _Sr__RPCReq
++{
++  ProtobufCMessage base;
++  protobuf_c_boolean action;
++  char *xpath;
++  /*
++   **< which API variant was used to send RPC req. 
++   */
++  Sr__ApiVariant orig_api_variant;
++  size_t n_input;
++  Sr__Value **input;
++  size_t n_input_tree;
++  Sr__Node **input_tree;
++  char *subscriber_address;
++  protobuf_c_boolean has_subscription_id;
++  uint32_t subscription_id;
++};
++#define SR__RPCREQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__rpcreq__descriptor) \
++    , 0, NULL, 0, 0,NULL, 0,NULL, NULL, 0,0 }
++
++
++/*
++ **
++ * @brief Response to sr_rpc_send / sr_rpc_send_tree or sr_action_send / sr_action_send_tree request.
++ */
++struct  _Sr__RPCResp
++{
++  ProtobufCMessage base;
++  protobuf_c_boolean action;
++  char *xpath;
++  /*
++   **< which API variant was used to send RPC req. 
++   */
++  Sr__ApiVariant orig_api_variant;
++  size_t n_output;
++  Sr__Value **output;
++  size_t n_output_tree;
++  Sr__Node **output_tree;
++};
++#define SR__RPCRESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__rpcresp__descriptor) \
++    , 0, NULL, 0, 0,NULL, 0,NULL }
++
++
++/*
++ **
++ * @brief Sends an event notification into the datastore, will be delivered to all notification subscribers.
++ * Sent by sr_event_notif_send API call.
++ */
++struct  _Sr__EventNotifReq
++{
++  ProtobufCMessage base;
++  Sr__EventNotifReq__NotifType type;
++  /*
++   **< Bitwise OR of NotifFlags. 
++   */
++  uint32_t options;
++  char *xpath;
++  size_t n_values;
++  Sr__Value **values;
++  size_t n_trees;
++  Sr__Node **trees;
++  uint64_t timestamp;
++  char *subscriber_address;
++  protobuf_c_boolean has_subscription_id;
++  uint32_t subscription_id;
++  protobuf_c_boolean do_not_send_reply;
++};
++#define SR__EVENT_NOTIF_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__event_notif_req__descriptor) \
++    , 0, 0, NULL, 0,NULL, 0,NULL, 0, NULL, 0,0, 0 }
++
++
++/*
++ **
++ * @brief Response to sr_event_notif_send request.
++ */
++struct  _Sr__EventNotifResp
++{
++  ProtobufCMessage base;
++};
++#define SR__EVENT_NOTIF_RESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__event_notif_resp__descriptor) \
++     }
++
++
++/*
++ **
++ * @brief Sends a request to replay event notifications stored in the datastore.
++ * Sent by sr_event_notif_replay API call.
++ */
++struct  _Sr__EventNotifReplayReq
++{
++  ProtobufCMessage base;
++  char *xpath;
++  uint64_t start_time;
++  uint64_t stop_time;
++  char *subscriber_address;
++  uint32_t subscription_id;
++  Sr__ApiVariant api_variant;
++};
++#define SR__EVENT_NOTIF_REPLAY_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__event_notif_replay_req__descriptor) \
++    , NULL, 0, 0, NULL, 0, 0 }
++
++
++/*
++ **
++ * @brief Response to sr_event_notif_replay request.
++ */
++struct  _Sr__EventNotifReplayResp
++{
++  ProtobufCMessage base;
++};
++#define SR__EVENT_NOTIF_REPLAY_RESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__event_notif_replay_resp__descriptor) \
++     }
++
++
++/*
++ **
++ * @brief Requests operational data under given path form an operational data
++ * provider.
++ */
++struct  _Sr__DataProvideReq
++{
++  ProtobufCMessage base;
++  char *xpath;
++  char *subscriber_address;
++  uint32_t subscription_id;
++  uint64_t request_id;
++};
++#define SR__DATA_PROVIDE_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__data_provide_req__descriptor) \
++    , NULL, NULL, 0, 0 }
++
++
++/*
++ **
++ * @brief Response to a request of operational data under given path form an
++ * operational data provider.
++ */
++struct  _Sr__DataProvideResp
++{
++  ProtobufCMessage base;
++  char *xpath;
++  size_t n_values;
++  Sr__Value **values;
++  uint64_t request_id;
++};
++#define SR__DATA_PROVIDE_RESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__data_provide_resp__descriptor) \
++    , NULL, 0,NULL, 0 }
++
++
++/*
++ **
++ * @brief Requests installation / uinstallation of specified YANG model.
++ * Sent by sr_module_install internal API calls.
++ */
++struct  _Sr__ModuleInstallReq
++{
++  ProtobufCMessage base;
++  char *module_name;
++  char *revision;
++  char *file_name;
++  protobuf_c_boolean installed;
++};
++#define SR__MODULE_INSTALL_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__module_install_req__descriptor) \
++    , NULL, NULL, NULL, 0 }
++
++
++/*
++ **
++ * @brief Response to sr_module_install request.
++ */
++struct  _Sr__ModuleInstallResp
++{
++  ProtobufCMessage base;
++};
++#define SR__MODULE_INSTALL_RESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__module_install_resp__descriptor) \
++     }
++
++
++/*
++ **
++ * @brief Requests enabling / disabling of specified YANG feature within the
++ * YANG model. Sent by sr_feature_enable internal API calls.
++ */
++struct  _Sr__FeatureEnableReq
++{
++  ProtobufCMessage base;
++  char *module_name;
++  char *feature_name;
++  protobuf_c_boolean enabled;
++};
++#define SR__FEATURE_ENABLE_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__feature_enable_req__descriptor) \
++    , NULL, NULL, 0 }
++
++
++/*
++ **
++ * @brief Response to sr_feature_enable request.
++ */
++struct  _Sr__FeatureEnableResp
++{
++  ProtobufCMessage base;
++};
++#define SR__FEATURE_ENABLE_RESP__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__feature_enable_resp__descriptor) \
++     }
++
++
++/*
++ **
++ * @brief Internal request to unsubscribe all subscriptions of a subscriber on given destination address.
++ */
++struct  _Sr__UnsubscribeDestinationReq
++{
++  ProtobufCMessage base;
++  char *destination;
++};
++#define SR__UNSUBSCRIBE_DESTINATION_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__unsubscribe_destination_req__descriptor) \
++    , NULL }
++
++
++/*
++ **
++ * @brief Internal request to timeout a commit, if it hasn't been terminated yet.
++ */
++struct  _Sr__CommitTimeoutReq
++{
++  ProtobufCMessage base;
++  uint32_t commit_id;
++  protobuf_c_boolean expired;
++};
++#define SR__COMMIT_TIMEOUT_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__commit_timeout_req__descriptor) \
++    , 0, 0 }
++
++
++/*
++ **
++ * @brief Internal request to timeout a request for operational data, if it hasn't been terminated yet.
++ */
++struct  _Sr__OperDataTimeoutReq
++{
++  ProtobufCMessage base;
++  uint64_t request_id;
++};
++#define SR__OPER_DATA_TIMEOUT_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__oper_data_timeout_req__descriptor) \
++    , 0 }
++
++
++/*
++ **
++ * @brief Internal request for internal state data (state data provided by Sysrepo Engine itself).
++ */
++struct  _Sr__InternalStateDataReq
++{
++  ProtobufCMessage base;
++  uint64_t request_id;
++  char *xpath;
++};
++#define SR__INTERNAL_STATE_DATA_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__internal_state_data_req__descriptor) \
++    , 0, NULL }
++
++
++/*
++ **
++ * @brief Internal request to cleanup aged notifications in the Notification Store.
++ */
++struct  _Sr__NotifStoreCleanupReq
++{
++  ProtobufCMessage base;
++};
++#define SR__NOTIF_STORE_CLEANUP_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__notif_store_cleanup_req__descriptor) \
++     }
++
++
++/*
++ **
++ * @brief Message to be delivered to the client after some timeout.
++ */
++struct  _Sr__DelayedMsgReq
++{
++  ProtobufCMessage base;
++  Sr__Msg *message;
++};
++#define SR__DELAYED_MSG_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__delayed_msg_req__descriptor) \
++    , NULL }
++
++
++/*
++ **
++ * @brief Internal request to reload NACM configuration from the running datastore.
++ */
++struct  _Sr__NacmReloadReq
++{
++  ProtobufCMessage base;
++};
++#define SR__NACM_RELOAD_REQ__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__nacm_reload_req__descriptor) \
++     }
++
++
++/*
++ **
++ * @brief Request for an operation.
++ */
++struct  _Sr__Request
++{
++  ProtobufCMessage base;
++  /*
++   * Request ID used internally by sysrepo 
++   */
++  uint64_t _id;
++  Sr__Operation operation;
++  Sr__SessionStartReq *session_start_req;
++  Sr__SessionStopReq *session_stop_req;
++  Sr__SessionRefreshReq *session_refresh_req;
++  Sr__SessionCheckReq *session_check_req;
++  Sr__SessionSwitchDsReq *session_switch_ds_req;
++  Sr__SessionSetOptsReq *session_set_opts_req;
++  Sr__VersionVerifyReq *version_verify_req;
++  Sr__ListSchemasReq *list_schemas_req;
++  Sr__GetSchemaReq *get_schema_req;
++  Sr__ModuleInstallReq *module_install_req;
++  Sr__FeatureEnableReq *feature_enable_req;
++  Sr__GetItemReq *get_item_req;
++  Sr__GetItemsReq *get_items_req;
++  Sr__GetSubtreeReq *get_subtree_req;
++  Sr__GetSubtreesReq *get_subtrees_req;
++  Sr__GetSubtreeChunkReq *get_subtree_chunk_req;
++  Sr__SetItemReq *set_item_req;
++  Sr__DeleteItemReq *delete_item_req;
++  Sr__MoveItemReq *move_item_req;
++  Sr__SetItemStrReq *set_item_str_req;
++  Sr__ValidateReq *validate_req;
++  Sr__CommitReq *commit_req;
++  Sr__DiscardChangesReq *discard_changes_req;
++  Sr__CopyConfigReq *copy_config_req;
++  Sr__LockReq *lock_req;
++  Sr__UnlockReq *unlock_req;
++  Sr__SubscribeReq *subscribe_req;
++  Sr__UnsubscribeReq *unsubscribe_req;
++  Sr__CheckEnabledRunningReq *check_enabled_running_req;
++  Sr__GetChangesReq *get_changes_req;
++  Sr__DataProvideReq *data_provide_req;
++  Sr__CheckExecPermReq *check_exec_perm_req;
++  Sr__RPCReq *rpc_req;
++  Sr__EventNotifReq *event_notif_req;
++  Sr__EventNotifReplayReq *event_notif_replay_req;
++};
++#define SR__REQUEST__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__request__descriptor) \
++    , 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }
++
++
++/*
++ **
++ * @brief Response to the received request.
++ */
++struct  _Sr__Response
++{
++  ProtobufCMessage base;
++  Sr__Operation operation;
++  /*
++   **< Result of the operation. 0 on success, non-zero values map to sr_error_t enum in sysrepo.h. 
++   */
++  uint32_t result;
++  /*
++   **< Additional error information. 
++   */
++  Sr__Error *error;
++  Sr__SessionStartResp *session_start_resp;
++  Sr__SessionStopResp *session_stop_resp;
++  Sr__SessionRefreshResp *session_refresh_resp;
++  Sr__SessionCheckResp *session_check_resp;
++  Sr__SessionSwitchDsResp *session_switch_ds_resp;
++  Sr__SessionSetOptsResp *session_set_opts_resp;
++  Sr__VersionVerifyResp *version_verify_resp;
++  Sr__ListSchemasResp *list_schemas_resp;
++  Sr__GetSchemaResp *get_schema_resp;
++  Sr__ModuleInstallResp *module_install_resp;
++  Sr__FeatureEnableResp *feature_enable_resp;
++  Sr__GetItemResp *get_item_resp;
++  Sr__GetItemsResp *get_items_resp;
++  Sr__GetSubtreeResp *get_subtree_resp;
++  Sr__GetSubtreesResp *get_subtrees_resp;
++  Sr__GetSubtreeChunkResp *get_subtree_chunk_resp;
++  Sr__SetItemResp *set_item_resp;
++  Sr__DeleteItemResp *delete_item_resp;
++  Sr__MoveItemResp *move_item_resp;
++  Sr__SetItemStrResp *set_item_str_resp;
++  Sr__ValidateResp *validate_resp;
++  Sr__CommitResp *commit_resp;
++  Sr__DiscardChangesResp *discard_changes_resp;
++  Sr__CopyConfigResp *copy_config_resp;
++  Sr__LockResp *lock_resp;
++  Sr__UnlockResp *unlock_resp;
++  Sr__SubscribeResp *subscribe_resp;
++  Sr__UnsubscribeResp *unsubscribe_resp;
++  Sr__CheckEnabledRunningResp *check_enabled_running_resp;
++  Sr__GetChangesResp *get_changes_resp;
++  Sr__DataProvideResp *data_provide_resp;
++  Sr__CheckExecPermResp *check_exec_perm_resp;
++  Sr__RPCResp *rpc_resp;
++  Sr__EventNotifResp *event_notif_resp;
++  Sr__EventNotifReplayResp *event_notif_replay_resp;
++};
++#define SR__RESPONSE__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__response__descriptor) \
++    , 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }
++
++
++/*
++ **
++ * @brief Notification about an event that occurred in the datastore.
++ */
++struct  _Sr__Notification
++{
++  ProtobufCMessage base;
++  Sr__SubscriptionType type;
++  char *destination_address;
++  char *source_address;
++  uint32_t source_pid;
++  uint32_t subscription_id;
++  protobuf_c_boolean has_commit_id;
++  uint32_t commit_id;
++  Sr__ModuleInstallNotification *module_install_notif;
++  Sr__FeatureEnableNotification *feature_enable_notif;
++  Sr__ModuleChangeNotification *module_change_notif;
++  Sr__SubtreeChangeNotification *subtree_change_notif;
++};
++#define SR__NOTIFICATION__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__notification__descriptor) \
++    , 0, NULL, NULL, 0, 0, 0,0, NULL, NULL, NULL, NULL }
++
++
++/*
++ **
++ * @brief Notification Acknowledgment.
++ */
++struct  _Sr__NotificationAck
++{
++  ProtobufCMessage base;
++  /*
++   **< Original notification. 
++   */
++  Sr__Notification *notif;
++  /*
++   **< Result of the notification (success / error code). 
++   */
++  uint32_t result;
++  /*
++   **< Additional error information. 
++   */
++  Sr__Error *error;
++  /*
++   **< If the result is error and this flag is set to true abort notification
++   * will not be delivered to this subscriber
++   * (Subscriber doesn't want notification about changes that he refused). 
++   */
++  protobuf_c_boolean do_not_send_abort;
++};
++#define SR__NOTIFICATION_ACK__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__notification_ack__descriptor) \
++    , NULL, 0, NULL, 0 }
++
++
++/*
++ **
++ * @brief Internal request sent by sysrepo. Should not be used from the public API.
++ */
++struct  _Sr__InternalRequest
++{
++  ProtobufCMessage base;
++  Sr__Operation operation;
++  protobuf_c_boolean has_postpone_timeout;
++  uint32_t postpone_timeout;
++  Sr__UnsubscribeDestinationReq *unsubscribe_dst_req;
++  Sr__CommitTimeoutReq *commit_timeout_req;
++  Sr__OperDataTimeoutReq *oper_data_timeout_req;
++  Sr__InternalStateDataReq *internal_state_data_req;
++  Sr__NotifStoreCleanupReq *notif_store_cleanup_req;
++  Sr__DelayedMsgReq *delayed_msg_req;
++  Sr__NacmReloadReq *nacm_reload_req;
++};
++#define SR__INTERNAL_REQUEST__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__internal_request__descriptor) \
++    , 0, 0,0, NULL, NULL, NULL, NULL, NULL, NULL, NULL }
++
++
++/*
++ **
++ * @brief Umbrella sysrepo message used for communication between sysrepo
++ * engine and client library.
++ */
++struct  _Sr__Msg
++{
++  ProtobufCMessage base;
++  /*
++   **< Indicates type of the message. 
++   */
++  Sr__Msg__MsgType type;
++  /*
++   **< Session identifier. Can be 0 (value is ignored) for session_start and version_verify requests. 
++   */
++  uint32_t session_id;
++  /*
++   **< Filled in in case of type == REQUEST. 
++   */
++  Sr__Request *request;
++  /*
++   **< Filled in in case of type == RESPONSE. 
++   */
++  Sr__Response *response;
++  /*
++   **< Filled in in case of type == NOTIFICATION. 
++   */
++  Sr__Notification *notification;
++  /*
++   **< Filled in in case of type == NOTIFICATION_ACK 
++   */
++  Sr__NotificationAck *notification_ack;
++  /*
++   **< Filled in in case of type == INTERNAL. 
++   */
++  Sr__InternalRequest *internal_request;
++  /*
++   **< Not part of the protocol. Used internally by Sysrepo to store a pointer to memory context. 
++   */
++  uint64_t _sysrepo_mem_ctx;
++};
++#define SR__MSG__INIT \
++ { PROTOBUF_C_MESSAGE_INIT (&sr__msg__descriptor) \
++    , 0, 0, NULL, NULL, NULL, NULL, NULL, 0 }
++
++
++/* Sr__Value methods */
++void   sr__value__init
++                     (Sr__Value         *message);
++size_t sr__value__get_packed_size
++                     (const Sr__Value   *message);
++size_t sr__value__pack
++                     (const Sr__Value   *message,
++                      uint8_t             *out);
++size_t sr__value__pack_to_buffer
++                     (const Sr__Value   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__Value *
++       sr__value__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__value__free_unpacked
++                     (Sr__Value *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__Node methods */
++void   sr__node__init
++                     (Sr__Node         *message);
++size_t sr__node__get_packed_size
++                     (const Sr__Node   *message);
++size_t sr__node__pack
++                     (const Sr__Node   *message,
++                      uint8_t             *out);
++size_t sr__node__pack_to_buffer
++                     (const Sr__Node   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__Node *
++       sr__node__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__node__free_unpacked
++                     (Sr__Node *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__Error methods */
++void   sr__error__init
++                     (Sr__Error         *message);
++size_t sr__error__get_packed_size
++                     (const Sr__Error   *message);
++size_t sr__error__pack
++                     (const Sr__Error   *message,
++                      uint8_t             *out);
++size_t sr__error__pack_to_buffer
++                     (const Sr__Error   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__Error *
++       sr__error__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__error__free_unpacked
++                     (Sr__Error *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__SessionStartReq methods */
++void   sr__session_start_req__init
++                     (Sr__SessionStartReq         *message);
++size_t sr__session_start_req__get_packed_size
++                     (const Sr__SessionStartReq   *message);
++size_t sr__session_start_req__pack
++                     (const Sr__SessionStartReq   *message,
++                      uint8_t             *out);
++size_t sr__session_start_req__pack_to_buffer
++                     (const Sr__SessionStartReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__SessionStartReq *
++       sr__session_start_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__session_start_req__free_unpacked
++                     (Sr__SessionStartReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__SessionStartResp methods */
++void   sr__session_start_resp__init
++                     (Sr__SessionStartResp         *message);
++size_t sr__session_start_resp__get_packed_size
++                     (const Sr__SessionStartResp   *message);
++size_t sr__session_start_resp__pack
++                     (const Sr__SessionStartResp   *message,
++                      uint8_t             *out);
++size_t sr__session_start_resp__pack_to_buffer
++                     (const Sr__SessionStartResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__SessionStartResp *
++       sr__session_start_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__session_start_resp__free_unpacked
++                     (Sr__SessionStartResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__SessionStopReq methods */
++void   sr__session_stop_req__init
++                     (Sr__SessionStopReq         *message);
++size_t sr__session_stop_req__get_packed_size
++                     (const Sr__SessionStopReq   *message);
++size_t sr__session_stop_req__pack
++                     (const Sr__SessionStopReq   *message,
++                      uint8_t             *out);
++size_t sr__session_stop_req__pack_to_buffer
++                     (const Sr__SessionStopReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__SessionStopReq *
++       sr__session_stop_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__session_stop_req__free_unpacked
++                     (Sr__SessionStopReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__SessionStopResp methods */
++void   sr__session_stop_resp__init
++                     (Sr__SessionStopResp         *message);
++size_t sr__session_stop_resp__get_packed_size
++                     (const Sr__SessionStopResp   *message);
++size_t sr__session_stop_resp__pack
++                     (const Sr__SessionStopResp   *message,
++                      uint8_t             *out);
++size_t sr__session_stop_resp__pack_to_buffer
++                     (const Sr__SessionStopResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__SessionStopResp *
++       sr__session_stop_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__session_stop_resp__free_unpacked
++                     (Sr__SessionStopResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__SessionRefreshReq methods */
++void   sr__session_refresh_req__init
++                     (Sr__SessionRefreshReq         *message);
++size_t sr__session_refresh_req__get_packed_size
++                     (const Sr__SessionRefreshReq   *message);
++size_t sr__session_refresh_req__pack
++                     (const Sr__SessionRefreshReq   *message,
++                      uint8_t             *out);
++size_t sr__session_refresh_req__pack_to_buffer
++                     (const Sr__SessionRefreshReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__SessionRefreshReq *
++       sr__session_refresh_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__session_refresh_req__free_unpacked
++                     (Sr__SessionRefreshReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__SessionRefreshResp methods */
++void   sr__session_refresh_resp__init
++                     (Sr__SessionRefreshResp         *message);
++size_t sr__session_refresh_resp__get_packed_size
++                     (const Sr__SessionRefreshResp   *message);
++size_t sr__session_refresh_resp__pack
++                     (const Sr__SessionRefreshResp   *message,
++                      uint8_t             *out);
++size_t sr__session_refresh_resp__pack_to_buffer
++                     (const Sr__SessionRefreshResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__SessionRefreshResp *
++       sr__session_refresh_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__session_refresh_resp__free_unpacked
++                     (Sr__SessionRefreshResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__SessionCheckReq methods */
++void   sr__session_check_req__init
++                     (Sr__SessionCheckReq         *message);
++size_t sr__session_check_req__get_packed_size
++                     (const Sr__SessionCheckReq   *message);
++size_t sr__session_check_req__pack
++                     (const Sr__SessionCheckReq   *message,
++                      uint8_t             *out);
++size_t sr__session_check_req__pack_to_buffer
++                     (const Sr__SessionCheckReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__SessionCheckReq *
++       sr__session_check_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__session_check_req__free_unpacked
++                     (Sr__SessionCheckReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__SessionCheckResp methods */
++void   sr__session_check_resp__init
++                     (Sr__SessionCheckResp         *message);
++size_t sr__session_check_resp__get_packed_size
++                     (const Sr__SessionCheckResp   *message);
++size_t sr__session_check_resp__pack
++                     (const Sr__SessionCheckResp   *message,
++                      uint8_t             *out);
++size_t sr__session_check_resp__pack_to_buffer
++                     (const Sr__SessionCheckResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__SessionCheckResp *
++       sr__session_check_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__session_check_resp__free_unpacked
++                     (Sr__SessionCheckResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__SessionSwitchDsReq methods */
++void   sr__session_switch_ds_req__init
++                     (Sr__SessionSwitchDsReq         *message);
++size_t sr__session_switch_ds_req__get_packed_size
++                     (const Sr__SessionSwitchDsReq   *message);
++size_t sr__session_switch_ds_req__pack
++                     (const Sr__SessionSwitchDsReq   *message,
++                      uint8_t             *out);
++size_t sr__session_switch_ds_req__pack_to_buffer
++                     (const Sr__SessionSwitchDsReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__SessionSwitchDsReq *
++       sr__session_switch_ds_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__session_switch_ds_req__free_unpacked
++                     (Sr__SessionSwitchDsReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__SessionSwitchDsResp methods */
++void   sr__session_switch_ds_resp__init
++                     (Sr__SessionSwitchDsResp         *message);
++size_t sr__session_switch_ds_resp__get_packed_size
++                     (const Sr__SessionSwitchDsResp   *message);
++size_t sr__session_switch_ds_resp__pack
++                     (const Sr__SessionSwitchDsResp   *message,
++                      uint8_t             *out);
++size_t sr__session_switch_ds_resp__pack_to_buffer
++                     (const Sr__SessionSwitchDsResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__SessionSwitchDsResp *
++       sr__session_switch_ds_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__session_switch_ds_resp__free_unpacked
++                     (Sr__SessionSwitchDsResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__SessionSetOptsReq methods */
++void   sr__session_set_opts_req__init
++                     (Sr__SessionSetOptsReq         *message);
++size_t sr__session_set_opts_req__get_packed_size
++                     (const Sr__SessionSetOptsReq   *message);
++size_t sr__session_set_opts_req__pack
++                     (const Sr__SessionSetOptsReq   *message,
++                      uint8_t             *out);
++size_t sr__session_set_opts_req__pack_to_buffer
++                     (const Sr__SessionSetOptsReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__SessionSetOptsReq *
++       sr__session_set_opts_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__session_set_opts_req__free_unpacked
++                     (Sr__SessionSetOptsReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__SessionSetOptsResp methods */
++void   sr__session_set_opts_resp__init
++                     (Sr__SessionSetOptsResp         *message);
++size_t sr__session_set_opts_resp__get_packed_size
++                     (const Sr__SessionSetOptsResp   *message);
++size_t sr__session_set_opts_resp__pack
++                     (const Sr__SessionSetOptsResp   *message,
++                      uint8_t             *out);
++size_t sr__session_set_opts_resp__pack_to_buffer
++                     (const Sr__SessionSetOptsResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__SessionSetOptsResp *
++       sr__session_set_opts_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__session_set_opts_resp__free_unpacked
++                     (Sr__SessionSetOptsResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__VersionVerifyReq methods */
++void   sr__version_verify_req__init
++                     (Sr__VersionVerifyReq         *message);
++size_t sr__version_verify_req__get_packed_size
++                     (const Sr__VersionVerifyReq   *message);
++size_t sr__version_verify_req__pack
++                     (const Sr__VersionVerifyReq   *message,
++                      uint8_t             *out);
++size_t sr__version_verify_req__pack_to_buffer
++                     (const Sr__VersionVerifyReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__VersionVerifyReq *
++       sr__version_verify_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__version_verify_req__free_unpacked
++                     (Sr__VersionVerifyReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__VersionVerifyResp methods */
++void   sr__version_verify_resp__init
++                     (Sr__VersionVerifyResp         *message);
++size_t sr__version_verify_resp__get_packed_size
++                     (const Sr__VersionVerifyResp   *message);
++size_t sr__version_verify_resp__pack
++                     (const Sr__VersionVerifyResp   *message,
++                      uint8_t             *out);
++size_t sr__version_verify_resp__pack_to_buffer
++                     (const Sr__VersionVerifyResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__VersionVerifyResp *
++       sr__version_verify_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__version_verify_resp__free_unpacked
++                     (Sr__VersionVerifyResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__SchemaRevision methods */
++void   sr__schema_revision__init
++                     (Sr__SchemaRevision         *message);
++size_t sr__schema_revision__get_packed_size
++                     (const Sr__SchemaRevision   *message);
++size_t sr__schema_revision__pack
++                     (const Sr__SchemaRevision   *message,
++                      uint8_t             *out);
++size_t sr__schema_revision__pack_to_buffer
++                     (const Sr__SchemaRevision   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__SchemaRevision *
++       sr__schema_revision__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__schema_revision__free_unpacked
++                     (Sr__SchemaRevision *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__SchemaSubmodule methods */
++void   sr__schema_submodule__init
++                     (Sr__SchemaSubmodule         *message);
++size_t sr__schema_submodule__get_packed_size
++                     (const Sr__SchemaSubmodule   *message);
++size_t sr__schema_submodule__pack
++                     (const Sr__SchemaSubmodule   *message,
++                      uint8_t             *out);
++size_t sr__schema_submodule__pack_to_buffer
++                     (const Sr__SchemaSubmodule   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__SchemaSubmodule *
++       sr__schema_submodule__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__schema_submodule__free_unpacked
++                     (Sr__SchemaSubmodule *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__Schema methods */
++void   sr__schema__init
++                     (Sr__Schema         *message);
++size_t sr__schema__get_packed_size
++                     (const Sr__Schema   *message);
++size_t sr__schema__pack
++                     (const Sr__Schema   *message,
++                      uint8_t             *out);
++size_t sr__schema__pack_to_buffer
++                     (const Sr__Schema   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__Schema *
++       sr__schema__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__schema__free_unpacked
++                     (Sr__Schema *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__ListSchemasReq methods */
++void   sr__list_schemas_req__init
++                     (Sr__ListSchemasReq         *message);
++size_t sr__list_schemas_req__get_packed_size
++                     (const Sr__ListSchemasReq   *message);
++size_t sr__list_schemas_req__pack
++                     (const Sr__ListSchemasReq   *message,
++                      uint8_t             *out);
++size_t sr__list_schemas_req__pack_to_buffer
++                     (const Sr__ListSchemasReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__ListSchemasReq *
++       sr__list_schemas_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__list_schemas_req__free_unpacked
++                     (Sr__ListSchemasReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__ListSchemasResp methods */
++void   sr__list_schemas_resp__init
++                     (Sr__ListSchemasResp         *message);
++size_t sr__list_schemas_resp__get_packed_size
++                     (const Sr__ListSchemasResp   *message);
++size_t sr__list_schemas_resp__pack
++                     (const Sr__ListSchemasResp   *message,
++                      uint8_t             *out);
++size_t sr__list_schemas_resp__pack_to_buffer
++                     (const Sr__ListSchemasResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__ListSchemasResp *
++       sr__list_schemas_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__list_schemas_resp__free_unpacked
++                     (Sr__ListSchemasResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__GetSchemaReq methods */
++void   sr__get_schema_req__init
++                     (Sr__GetSchemaReq         *message);
++size_t sr__get_schema_req__get_packed_size
++                     (const Sr__GetSchemaReq   *message);
++size_t sr__get_schema_req__pack
++                     (const Sr__GetSchemaReq   *message,
++                      uint8_t             *out);
++size_t sr__get_schema_req__pack_to_buffer
++                     (const Sr__GetSchemaReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__GetSchemaReq *
++       sr__get_schema_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__get_schema_req__free_unpacked
++                     (Sr__GetSchemaReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__GetSchemaResp methods */
++void   sr__get_schema_resp__init
++                     (Sr__GetSchemaResp         *message);
++size_t sr__get_schema_resp__get_packed_size
++                     (const Sr__GetSchemaResp   *message);
++size_t sr__get_schema_resp__pack
++                     (const Sr__GetSchemaResp   *message,
++                      uint8_t             *out);
++size_t sr__get_schema_resp__pack_to_buffer
++                     (const Sr__GetSchemaResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__GetSchemaResp *
++       sr__get_schema_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__get_schema_resp__free_unpacked
++                     (Sr__GetSchemaResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__GetItemReq methods */
++void   sr__get_item_req__init
++                     (Sr__GetItemReq         *message);
++size_t sr__get_item_req__get_packed_size
++                     (const Sr__GetItemReq   *message);
++size_t sr__get_item_req__pack
++                     (const Sr__GetItemReq   *message,
++                      uint8_t             *out);
++size_t sr__get_item_req__pack_to_buffer
++                     (const Sr__GetItemReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__GetItemReq *
++       sr__get_item_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__get_item_req__free_unpacked
++                     (Sr__GetItemReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__GetItemResp methods */
++void   sr__get_item_resp__init
++                     (Sr__GetItemResp         *message);
++size_t sr__get_item_resp__get_packed_size
++                     (const Sr__GetItemResp   *message);
++size_t sr__get_item_resp__pack
++                     (const Sr__GetItemResp   *message,
++                      uint8_t             *out);
++size_t sr__get_item_resp__pack_to_buffer
++                     (const Sr__GetItemResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__GetItemResp *
++       sr__get_item_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__get_item_resp__free_unpacked
++                     (Sr__GetItemResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__GetItemsReq methods */
++void   sr__get_items_req__init
++                     (Sr__GetItemsReq         *message);
++size_t sr__get_items_req__get_packed_size
++                     (const Sr__GetItemsReq   *message);
++size_t sr__get_items_req__pack
++                     (const Sr__GetItemsReq   *message,
++                      uint8_t             *out);
++size_t sr__get_items_req__pack_to_buffer
++                     (const Sr__GetItemsReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__GetItemsReq *
++       sr__get_items_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__get_items_req__free_unpacked
++                     (Sr__GetItemsReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__GetItemsResp methods */
++void   sr__get_items_resp__init
++                     (Sr__GetItemsResp         *message);
++size_t sr__get_items_resp__get_packed_size
++                     (const Sr__GetItemsResp   *message);
++size_t sr__get_items_resp__pack
++                     (const Sr__GetItemsResp   *message,
++                      uint8_t             *out);
++size_t sr__get_items_resp__pack_to_buffer
++                     (const Sr__GetItemsResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__GetItemsResp *
++       sr__get_items_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__get_items_resp__free_unpacked
++                     (Sr__GetItemsResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__GetSubtreeReq methods */
++void   sr__get_subtree_req__init
++                     (Sr__GetSubtreeReq         *message);
++size_t sr__get_subtree_req__get_packed_size
++                     (const Sr__GetSubtreeReq   *message);
++size_t sr__get_subtree_req__pack
++                     (const Sr__GetSubtreeReq   *message,
++                      uint8_t             *out);
++size_t sr__get_subtree_req__pack_to_buffer
++                     (const Sr__GetSubtreeReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__GetSubtreeReq *
++       sr__get_subtree_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__get_subtree_req__free_unpacked
++                     (Sr__GetSubtreeReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__GetSubtreeResp methods */
++void   sr__get_subtree_resp__init
++                     (Sr__GetSubtreeResp         *message);
++size_t sr__get_subtree_resp__get_packed_size
++                     (const Sr__GetSubtreeResp   *message);
++size_t sr__get_subtree_resp__pack
++                     (const Sr__GetSubtreeResp   *message,
++                      uint8_t             *out);
++size_t sr__get_subtree_resp__pack_to_buffer
++                     (const Sr__GetSubtreeResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__GetSubtreeResp *
++       sr__get_subtree_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__get_subtree_resp__free_unpacked
++                     (Sr__GetSubtreeResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__GetSubtreesReq methods */
++void   sr__get_subtrees_req__init
++                     (Sr__GetSubtreesReq         *message);
++size_t sr__get_subtrees_req__get_packed_size
++                     (const Sr__GetSubtreesReq   *message);
++size_t sr__get_subtrees_req__pack
++                     (const Sr__GetSubtreesReq   *message,
++                      uint8_t             *out);
++size_t sr__get_subtrees_req__pack_to_buffer
++                     (const Sr__GetSubtreesReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__GetSubtreesReq *
++       sr__get_subtrees_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__get_subtrees_req__free_unpacked
++                     (Sr__GetSubtreesReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__GetSubtreesResp methods */
++void   sr__get_subtrees_resp__init
++                     (Sr__GetSubtreesResp         *message);
++size_t sr__get_subtrees_resp__get_packed_size
++                     (const Sr__GetSubtreesResp   *message);
++size_t sr__get_subtrees_resp__pack
++                     (const Sr__GetSubtreesResp   *message,
++                      uint8_t             *out);
++size_t sr__get_subtrees_resp__pack_to_buffer
++                     (const Sr__GetSubtreesResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__GetSubtreesResp *
++       sr__get_subtrees_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__get_subtrees_resp__free_unpacked
++                     (Sr__GetSubtreesResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__GetSubtreeChunkReq methods */
++void   sr__get_subtree_chunk_req__init
++                     (Sr__GetSubtreeChunkReq         *message);
++size_t sr__get_subtree_chunk_req__get_packed_size
++                     (const Sr__GetSubtreeChunkReq   *message);
++size_t sr__get_subtree_chunk_req__pack
++                     (const Sr__GetSubtreeChunkReq   *message,
++                      uint8_t             *out);
++size_t sr__get_subtree_chunk_req__pack_to_buffer
++                     (const Sr__GetSubtreeChunkReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__GetSubtreeChunkReq *
++       sr__get_subtree_chunk_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__get_subtree_chunk_req__free_unpacked
++                     (Sr__GetSubtreeChunkReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__GetSubtreeChunkResp methods */
++void   sr__get_subtree_chunk_resp__init
++                     (Sr__GetSubtreeChunkResp         *message);
++size_t sr__get_subtree_chunk_resp__get_packed_size
++                     (const Sr__GetSubtreeChunkResp   *message);
++size_t sr__get_subtree_chunk_resp__pack
++                     (const Sr__GetSubtreeChunkResp   *message,
++                      uint8_t             *out);
++size_t sr__get_subtree_chunk_resp__pack_to_buffer
++                     (const Sr__GetSubtreeChunkResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__GetSubtreeChunkResp *
++       sr__get_subtree_chunk_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__get_subtree_chunk_resp__free_unpacked
++                     (Sr__GetSubtreeChunkResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__SetItemReq methods */
++void   sr__set_item_req__init
++                     (Sr__SetItemReq         *message);
++size_t sr__set_item_req__get_packed_size
++                     (const Sr__SetItemReq   *message);
++size_t sr__set_item_req__pack
++                     (const Sr__SetItemReq   *message,
++                      uint8_t             *out);
++size_t sr__set_item_req__pack_to_buffer
++                     (const Sr__SetItemReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__SetItemReq *
++       sr__set_item_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__set_item_req__free_unpacked
++                     (Sr__SetItemReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__SetItemResp methods */
++void   sr__set_item_resp__init
++                     (Sr__SetItemResp         *message);
++size_t sr__set_item_resp__get_packed_size
++                     (const Sr__SetItemResp   *message);
++size_t sr__set_item_resp__pack
++                     (const Sr__SetItemResp   *message,
++                      uint8_t             *out);
++size_t sr__set_item_resp__pack_to_buffer
++                     (const Sr__SetItemResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__SetItemResp *
++       sr__set_item_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__set_item_resp__free_unpacked
++                     (Sr__SetItemResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__SetItemStrReq methods */
++void   sr__set_item_str_req__init
++                     (Sr__SetItemStrReq         *message);
++size_t sr__set_item_str_req__get_packed_size
++                     (const Sr__SetItemStrReq   *message);
++size_t sr__set_item_str_req__pack
++                     (const Sr__SetItemStrReq   *message,
++                      uint8_t             *out);
++size_t sr__set_item_str_req__pack_to_buffer
++                     (const Sr__SetItemStrReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__SetItemStrReq *
++       sr__set_item_str_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__set_item_str_req__free_unpacked
++                     (Sr__SetItemStrReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__SetItemStrResp methods */
++void   sr__set_item_str_resp__init
++                     (Sr__SetItemStrResp         *message);
++size_t sr__set_item_str_resp__get_packed_size
++                     (const Sr__SetItemStrResp   *message);
++size_t sr__set_item_str_resp__pack
++                     (const Sr__SetItemStrResp   *message,
++                      uint8_t             *out);
++size_t sr__set_item_str_resp__pack_to_buffer
++                     (const Sr__SetItemStrResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__SetItemStrResp *
++       sr__set_item_str_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__set_item_str_resp__free_unpacked
++                     (Sr__SetItemStrResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__DeleteItemReq methods */
++void   sr__delete_item_req__init
++                     (Sr__DeleteItemReq         *message);
++size_t sr__delete_item_req__get_packed_size
++                     (const Sr__DeleteItemReq   *message);
++size_t sr__delete_item_req__pack
++                     (const Sr__DeleteItemReq   *message,
++                      uint8_t             *out);
++size_t sr__delete_item_req__pack_to_buffer
++                     (const Sr__DeleteItemReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__DeleteItemReq *
++       sr__delete_item_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__delete_item_req__free_unpacked
++                     (Sr__DeleteItemReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__DeleteItemResp methods */
++void   sr__delete_item_resp__init
++                     (Sr__DeleteItemResp         *message);
++size_t sr__delete_item_resp__get_packed_size
++                     (const Sr__DeleteItemResp   *message);
++size_t sr__delete_item_resp__pack
++                     (const Sr__DeleteItemResp   *message,
++                      uint8_t             *out);
++size_t sr__delete_item_resp__pack_to_buffer
++                     (const Sr__DeleteItemResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__DeleteItemResp *
++       sr__delete_item_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__delete_item_resp__free_unpacked
++                     (Sr__DeleteItemResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__MoveItemReq methods */
++void   sr__move_item_req__init
++                     (Sr__MoveItemReq         *message);
++size_t sr__move_item_req__get_packed_size
++                     (const Sr__MoveItemReq   *message);
++size_t sr__move_item_req__pack
++                     (const Sr__MoveItemReq   *message,
++                      uint8_t             *out);
++size_t sr__move_item_req__pack_to_buffer
++                     (const Sr__MoveItemReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__MoveItemReq *
++       sr__move_item_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__move_item_req__free_unpacked
++                     (Sr__MoveItemReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__MoveItemResp methods */
++void   sr__move_item_resp__init
++                     (Sr__MoveItemResp         *message);
++size_t sr__move_item_resp__get_packed_size
++                     (const Sr__MoveItemResp   *message);
++size_t sr__move_item_resp__pack
++                     (const Sr__MoveItemResp   *message,
++                      uint8_t             *out);
++size_t sr__move_item_resp__pack_to_buffer
++                     (const Sr__MoveItemResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__MoveItemResp *
++       sr__move_item_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__move_item_resp__free_unpacked
++                     (Sr__MoveItemResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__ValidateReq methods */
++void   sr__validate_req__init
++                     (Sr__ValidateReq         *message);
++size_t sr__validate_req__get_packed_size
++                     (const Sr__ValidateReq   *message);
++size_t sr__validate_req__pack
++                     (const Sr__ValidateReq   *message,
++                      uint8_t             *out);
++size_t sr__validate_req__pack_to_buffer
++                     (const Sr__ValidateReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__ValidateReq *
++       sr__validate_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__validate_req__free_unpacked
++                     (Sr__ValidateReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__ValidateResp methods */
++void   sr__validate_resp__init
++                     (Sr__ValidateResp         *message);
++size_t sr__validate_resp__get_packed_size
++                     (const Sr__ValidateResp   *message);
++size_t sr__validate_resp__pack
++                     (const Sr__ValidateResp   *message,
++                      uint8_t             *out);
++size_t sr__validate_resp__pack_to_buffer
++                     (const Sr__ValidateResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__ValidateResp *
++       sr__validate_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__validate_resp__free_unpacked
++                     (Sr__ValidateResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__CommitReq methods */
++void   sr__commit_req__init
++                     (Sr__CommitReq         *message);
++size_t sr__commit_req__get_packed_size
++                     (const Sr__CommitReq   *message);
++size_t sr__commit_req__pack
++                     (const Sr__CommitReq   *message,
++                      uint8_t             *out);
++size_t sr__commit_req__pack_to_buffer
++                     (const Sr__CommitReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__CommitReq *
++       sr__commit_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__commit_req__free_unpacked
++                     (Sr__CommitReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__CommitResp methods */
++void   sr__commit_resp__init
++                     (Sr__CommitResp         *message);
++size_t sr__commit_resp__get_packed_size
++                     (const Sr__CommitResp   *message);
++size_t sr__commit_resp__pack
++                     (const Sr__CommitResp   *message,
++                      uint8_t             *out);
++size_t sr__commit_resp__pack_to_buffer
++                     (const Sr__CommitResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__CommitResp *
++       sr__commit_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__commit_resp__free_unpacked
++                     (Sr__CommitResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__DiscardChangesReq methods */
++void   sr__discard_changes_req__init
++                     (Sr__DiscardChangesReq         *message);
++size_t sr__discard_changes_req__get_packed_size
++                     (const Sr__DiscardChangesReq   *message);
++size_t sr__discard_changes_req__pack
++                     (const Sr__DiscardChangesReq   *message,
++                      uint8_t             *out);
++size_t sr__discard_changes_req__pack_to_buffer
++                     (const Sr__DiscardChangesReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__DiscardChangesReq *
++       sr__discard_changes_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__discard_changes_req__free_unpacked
++                     (Sr__DiscardChangesReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__DiscardChangesResp methods */
++void   sr__discard_changes_resp__init
++                     (Sr__DiscardChangesResp         *message);
++size_t sr__discard_changes_resp__get_packed_size
++                     (const Sr__DiscardChangesResp   *message);
++size_t sr__discard_changes_resp__pack
++                     (const Sr__DiscardChangesResp   *message,
++                      uint8_t             *out);
++size_t sr__discard_changes_resp__pack_to_buffer
++                     (const Sr__DiscardChangesResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__DiscardChangesResp *
++       sr__discard_changes_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__discard_changes_resp__free_unpacked
++                     (Sr__DiscardChangesResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__CopyConfigReq methods */
++void   sr__copy_config_req__init
++                     (Sr__CopyConfigReq         *message);
++size_t sr__copy_config_req__get_packed_size
++                     (const Sr__CopyConfigReq   *message);
++size_t sr__copy_config_req__pack
++                     (const Sr__CopyConfigReq   *message,
++                      uint8_t             *out);
++size_t sr__copy_config_req__pack_to_buffer
++                     (const Sr__CopyConfigReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__CopyConfigReq *
++       sr__copy_config_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__copy_config_req__free_unpacked
++                     (Sr__CopyConfigReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__CopyConfigResp methods */
++void   sr__copy_config_resp__init
++                     (Sr__CopyConfigResp         *message);
++size_t sr__copy_config_resp__get_packed_size
++                     (const Sr__CopyConfigResp   *message);
++size_t sr__copy_config_resp__pack
++                     (const Sr__CopyConfigResp   *message,
++                      uint8_t             *out);
++size_t sr__copy_config_resp__pack_to_buffer
++                     (const Sr__CopyConfigResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__CopyConfigResp *
++       sr__copy_config_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__copy_config_resp__free_unpacked
++                     (Sr__CopyConfigResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__LockReq methods */
++void   sr__lock_req__init
++                     (Sr__LockReq         *message);
++size_t sr__lock_req__get_packed_size
++                     (const Sr__LockReq   *message);
++size_t sr__lock_req__pack
++                     (const Sr__LockReq   *message,
++                      uint8_t             *out);
++size_t sr__lock_req__pack_to_buffer
++                     (const Sr__LockReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__LockReq *
++       sr__lock_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__lock_req__free_unpacked
++                     (Sr__LockReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__LockResp methods */
++void   sr__lock_resp__init
++                     (Sr__LockResp         *message);
++size_t sr__lock_resp__get_packed_size
++                     (const Sr__LockResp   *message);
++size_t sr__lock_resp__pack
++                     (const Sr__LockResp   *message,
++                      uint8_t             *out);
++size_t sr__lock_resp__pack_to_buffer
++                     (const Sr__LockResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__LockResp *
++       sr__lock_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__lock_resp__free_unpacked
++                     (Sr__LockResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__UnlockReq methods */
++void   sr__unlock_req__init
++                     (Sr__UnlockReq         *message);
++size_t sr__unlock_req__get_packed_size
++                     (const Sr__UnlockReq   *message);
++size_t sr__unlock_req__pack
++                     (const Sr__UnlockReq   *message,
++                      uint8_t             *out);
++size_t sr__unlock_req__pack_to_buffer
++                     (const Sr__UnlockReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__UnlockReq *
++       sr__unlock_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__unlock_req__free_unpacked
++                     (Sr__UnlockReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__UnlockResp methods */
++void   sr__unlock_resp__init
++                     (Sr__UnlockResp         *message);
++size_t sr__unlock_resp__get_packed_size
++                     (const Sr__UnlockResp   *message);
++size_t sr__unlock_resp__pack
++                     (const Sr__UnlockResp   *message,
++                      uint8_t             *out);
++size_t sr__unlock_resp__pack_to_buffer
++                     (const Sr__UnlockResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__UnlockResp *
++       sr__unlock_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__unlock_resp__free_unpacked
++                     (Sr__UnlockResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__SubscribeReq methods */
++void   sr__subscribe_req__init
++                     (Sr__SubscribeReq         *message);
++size_t sr__subscribe_req__get_packed_size
++                     (const Sr__SubscribeReq   *message);
++size_t sr__subscribe_req__pack
++                     (const Sr__SubscribeReq   *message,
++                      uint8_t             *out);
++size_t sr__subscribe_req__pack_to_buffer
++                     (const Sr__SubscribeReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__SubscribeReq *
++       sr__subscribe_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__subscribe_req__free_unpacked
++                     (Sr__SubscribeReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__SubscribeResp methods */
++void   sr__subscribe_resp__init
++                     (Sr__SubscribeResp         *message);
++size_t sr__subscribe_resp__get_packed_size
++                     (const Sr__SubscribeResp   *message);
++size_t sr__subscribe_resp__pack
++                     (const Sr__SubscribeResp   *message,
++                      uint8_t             *out);
++size_t sr__subscribe_resp__pack_to_buffer
++                     (const Sr__SubscribeResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__SubscribeResp *
++       sr__subscribe_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__subscribe_resp__free_unpacked
++                     (Sr__SubscribeResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__UnsubscribeReq methods */
++void   sr__unsubscribe_req__init
++                     (Sr__UnsubscribeReq         *message);
++size_t sr__unsubscribe_req__get_packed_size
++                     (const Sr__UnsubscribeReq   *message);
++size_t sr__unsubscribe_req__pack
++                     (const Sr__UnsubscribeReq   *message,
++                      uint8_t             *out);
++size_t sr__unsubscribe_req__pack_to_buffer
++                     (const Sr__UnsubscribeReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__UnsubscribeReq *
++       sr__unsubscribe_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__unsubscribe_req__free_unpacked
++                     (Sr__UnsubscribeReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__UnsubscribeResp methods */
++void   sr__unsubscribe_resp__init
++                     (Sr__UnsubscribeResp         *message);
++size_t sr__unsubscribe_resp__get_packed_size
++                     (const Sr__UnsubscribeResp   *message);
++size_t sr__unsubscribe_resp__pack
++                     (const Sr__UnsubscribeResp   *message,
++                      uint8_t             *out);
++size_t sr__unsubscribe_resp__pack_to_buffer
++                     (const Sr__UnsubscribeResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__UnsubscribeResp *
++       sr__unsubscribe_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__unsubscribe_resp__free_unpacked
++                     (Sr__UnsubscribeResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__CheckEnabledRunningReq methods */
++void   sr__check_enabled_running_req__init
++                     (Sr__CheckEnabledRunningReq         *message);
++size_t sr__check_enabled_running_req__get_packed_size
++                     (const Sr__CheckEnabledRunningReq   *message);
++size_t sr__check_enabled_running_req__pack
++                     (const Sr__CheckEnabledRunningReq   *message,
++                      uint8_t             *out);
++size_t sr__check_enabled_running_req__pack_to_buffer
++                     (const Sr__CheckEnabledRunningReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__CheckEnabledRunningReq *
++       sr__check_enabled_running_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__check_enabled_running_req__free_unpacked
++                     (Sr__CheckEnabledRunningReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__CheckEnabledRunningResp methods */
++void   sr__check_enabled_running_resp__init
++                     (Sr__CheckEnabledRunningResp         *message);
++size_t sr__check_enabled_running_resp__get_packed_size
++                     (const Sr__CheckEnabledRunningResp   *message);
++size_t sr__check_enabled_running_resp__pack
++                     (const Sr__CheckEnabledRunningResp   *message,
++                      uint8_t             *out);
++size_t sr__check_enabled_running_resp__pack_to_buffer
++                     (const Sr__CheckEnabledRunningResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__CheckEnabledRunningResp *
++       sr__check_enabled_running_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__check_enabled_running_resp__free_unpacked
++                     (Sr__CheckEnabledRunningResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__ModuleInstallNotification methods */
++void   sr__module_install_notification__init
++                     (Sr__ModuleInstallNotification         *message);
++size_t sr__module_install_notification__get_packed_size
++                     (const Sr__ModuleInstallNotification   *message);
++size_t sr__module_install_notification__pack
++                     (const Sr__ModuleInstallNotification   *message,
++                      uint8_t             *out);
++size_t sr__module_install_notification__pack_to_buffer
++                     (const Sr__ModuleInstallNotification   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__ModuleInstallNotification *
++       sr__module_install_notification__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__module_install_notification__free_unpacked
++                     (Sr__ModuleInstallNotification *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__FeatureEnableNotification methods */
++void   sr__feature_enable_notification__init
++                     (Sr__FeatureEnableNotification         *message);
++size_t sr__feature_enable_notification__get_packed_size
++                     (const Sr__FeatureEnableNotification   *message);
++size_t sr__feature_enable_notification__pack
++                     (const Sr__FeatureEnableNotification   *message,
++                      uint8_t             *out);
++size_t sr__feature_enable_notification__pack_to_buffer
++                     (const Sr__FeatureEnableNotification   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__FeatureEnableNotification *
++       sr__feature_enable_notification__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__feature_enable_notification__free_unpacked
++                     (Sr__FeatureEnableNotification *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__ModuleChangeNotification methods */
++void   sr__module_change_notification__init
++                     (Sr__ModuleChangeNotification         *message);
++size_t sr__module_change_notification__get_packed_size
++                     (const Sr__ModuleChangeNotification   *message);
++size_t sr__module_change_notification__pack
++                     (const Sr__ModuleChangeNotification   *message,
++                      uint8_t             *out);
++size_t sr__module_change_notification__pack_to_buffer
++                     (const Sr__ModuleChangeNotification   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__ModuleChangeNotification *
++       sr__module_change_notification__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__module_change_notification__free_unpacked
++                     (Sr__ModuleChangeNotification *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__SubtreeChangeNotification methods */
++void   sr__subtree_change_notification__init
++                     (Sr__SubtreeChangeNotification         *message);
++size_t sr__subtree_change_notification__get_packed_size
++                     (const Sr__SubtreeChangeNotification   *message);
++size_t sr__subtree_change_notification__pack
++                     (const Sr__SubtreeChangeNotification   *message,
++                      uint8_t             *out);
++size_t sr__subtree_change_notification__pack_to_buffer
++                     (const Sr__SubtreeChangeNotification   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__SubtreeChangeNotification *
++       sr__subtree_change_notification__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__subtree_change_notification__free_unpacked
++                     (Sr__SubtreeChangeNotification *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__Change methods */
++void   sr__change__init
++                     (Sr__Change         *message);
++size_t sr__change__get_packed_size
++                     (const Sr__Change   *message);
++size_t sr__change__pack
++                     (const Sr__Change   *message,
++                      uint8_t             *out);
++size_t sr__change__pack_to_buffer
++                     (const Sr__Change   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__Change *
++       sr__change__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__change__free_unpacked
++                     (Sr__Change *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__GetChangesReq methods */
++void   sr__get_changes_req__init
++                     (Sr__GetChangesReq         *message);
++size_t sr__get_changes_req__get_packed_size
++                     (const Sr__GetChangesReq   *message);
++size_t sr__get_changes_req__pack
++                     (const Sr__GetChangesReq   *message,
++                      uint8_t             *out);
++size_t sr__get_changes_req__pack_to_buffer
++                     (const Sr__GetChangesReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__GetChangesReq *
++       sr__get_changes_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__get_changes_req__free_unpacked
++                     (Sr__GetChangesReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__GetChangesResp methods */
++void   sr__get_changes_resp__init
++                     (Sr__GetChangesResp         *message);
++size_t sr__get_changes_resp__get_packed_size
++                     (const Sr__GetChangesResp   *message);
++size_t sr__get_changes_resp__pack
++                     (const Sr__GetChangesResp   *message,
++                      uint8_t             *out);
++size_t sr__get_changes_resp__pack_to_buffer
++                     (const Sr__GetChangesResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__GetChangesResp *
++       sr__get_changes_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__get_changes_resp__free_unpacked
++                     (Sr__GetChangesResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__CheckExecPermReq methods */
++void   sr__check_exec_perm_req__init
++                     (Sr__CheckExecPermReq         *message);
++size_t sr__check_exec_perm_req__get_packed_size
++                     (const Sr__CheckExecPermReq   *message);
++size_t sr__check_exec_perm_req__pack
++                     (const Sr__CheckExecPermReq   *message,
++                      uint8_t             *out);
++size_t sr__check_exec_perm_req__pack_to_buffer
++                     (const Sr__CheckExecPermReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__CheckExecPermReq *
++       sr__check_exec_perm_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__check_exec_perm_req__free_unpacked
++                     (Sr__CheckExecPermReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__CheckExecPermResp methods */
++void   sr__check_exec_perm_resp__init
++                     (Sr__CheckExecPermResp         *message);
++size_t sr__check_exec_perm_resp__get_packed_size
++                     (const Sr__CheckExecPermResp   *message);
++size_t sr__check_exec_perm_resp__pack
++                     (const Sr__CheckExecPermResp   *message,
++                      uint8_t             *out);
++size_t sr__check_exec_perm_resp__pack_to_buffer
++                     (const Sr__CheckExecPermResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__CheckExecPermResp *
++       sr__check_exec_perm_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__check_exec_perm_resp__free_unpacked
++                     (Sr__CheckExecPermResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__RPCReq methods */
++void   sr__rpcreq__init
++                     (Sr__RPCReq         *message);
++size_t sr__rpcreq__get_packed_size
++                     (const Sr__RPCReq   *message);
++size_t sr__rpcreq__pack
++                     (const Sr__RPCReq   *message,
++                      uint8_t             *out);
++size_t sr__rpcreq__pack_to_buffer
++                     (const Sr__RPCReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__RPCReq *
++       sr__rpcreq__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__rpcreq__free_unpacked
++                     (Sr__RPCReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__RPCResp methods */
++void   sr__rpcresp__init
++                     (Sr__RPCResp         *message);
++size_t sr__rpcresp__get_packed_size
++                     (const Sr__RPCResp   *message);
++size_t sr__rpcresp__pack
++                     (const Sr__RPCResp   *message,
++                      uint8_t             *out);
++size_t sr__rpcresp__pack_to_buffer
++                     (const Sr__RPCResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__RPCResp *
++       sr__rpcresp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__rpcresp__free_unpacked
++                     (Sr__RPCResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__EventNotifReq methods */
++void   sr__event_notif_req__init
++                     (Sr__EventNotifReq         *message);
++size_t sr__event_notif_req__get_packed_size
++                     (const Sr__EventNotifReq   *message);
++size_t sr__event_notif_req__pack
++                     (const Sr__EventNotifReq   *message,
++                      uint8_t             *out);
++size_t sr__event_notif_req__pack_to_buffer
++                     (const Sr__EventNotifReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__EventNotifReq *
++       sr__event_notif_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__event_notif_req__free_unpacked
++                     (Sr__EventNotifReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__EventNotifResp methods */
++void   sr__event_notif_resp__init
++                     (Sr__EventNotifResp         *message);
++size_t sr__event_notif_resp__get_packed_size
++                     (const Sr__EventNotifResp   *message);
++size_t sr__event_notif_resp__pack
++                     (const Sr__EventNotifResp   *message,
++                      uint8_t             *out);
++size_t sr__event_notif_resp__pack_to_buffer
++                     (const Sr__EventNotifResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__EventNotifResp *
++       sr__event_notif_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__event_notif_resp__free_unpacked
++                     (Sr__EventNotifResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__EventNotifReplayReq methods */
++void   sr__event_notif_replay_req__init
++                     (Sr__EventNotifReplayReq         *message);
++size_t sr__event_notif_replay_req__get_packed_size
++                     (const Sr__EventNotifReplayReq   *message);
++size_t sr__event_notif_replay_req__pack
++                     (const Sr__EventNotifReplayReq   *message,
++                      uint8_t             *out);
++size_t sr__event_notif_replay_req__pack_to_buffer
++                     (const Sr__EventNotifReplayReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__EventNotifReplayReq *
++       sr__event_notif_replay_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__event_notif_replay_req__free_unpacked
++                     (Sr__EventNotifReplayReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__EventNotifReplayResp methods */
++void   sr__event_notif_replay_resp__init
++                     (Sr__EventNotifReplayResp         *message);
++size_t sr__event_notif_replay_resp__get_packed_size
++                     (const Sr__EventNotifReplayResp   *message);
++size_t sr__event_notif_replay_resp__pack
++                     (const Sr__EventNotifReplayResp   *message,
++                      uint8_t             *out);
++size_t sr__event_notif_replay_resp__pack_to_buffer
++                     (const Sr__EventNotifReplayResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__EventNotifReplayResp *
++       sr__event_notif_replay_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__event_notif_replay_resp__free_unpacked
++                     (Sr__EventNotifReplayResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__DataProvideReq methods */
++void   sr__data_provide_req__init
++                     (Sr__DataProvideReq         *message);
++size_t sr__data_provide_req__get_packed_size
++                     (const Sr__DataProvideReq   *message);
++size_t sr__data_provide_req__pack
++                     (const Sr__DataProvideReq   *message,
++                      uint8_t             *out);
++size_t sr__data_provide_req__pack_to_buffer
++                     (const Sr__DataProvideReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__DataProvideReq *
++       sr__data_provide_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__data_provide_req__free_unpacked
++                     (Sr__DataProvideReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__DataProvideResp methods */
++void   sr__data_provide_resp__init
++                     (Sr__DataProvideResp         *message);
++size_t sr__data_provide_resp__get_packed_size
++                     (const Sr__DataProvideResp   *message);
++size_t sr__data_provide_resp__pack
++                     (const Sr__DataProvideResp   *message,
++                      uint8_t             *out);
++size_t sr__data_provide_resp__pack_to_buffer
++                     (const Sr__DataProvideResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__DataProvideResp *
++       sr__data_provide_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__data_provide_resp__free_unpacked
++                     (Sr__DataProvideResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__ModuleInstallReq methods */
++void   sr__module_install_req__init
++                     (Sr__ModuleInstallReq         *message);
++size_t sr__module_install_req__get_packed_size
++                     (const Sr__ModuleInstallReq   *message);
++size_t sr__module_install_req__pack
++                     (const Sr__ModuleInstallReq   *message,
++                      uint8_t             *out);
++size_t sr__module_install_req__pack_to_buffer
++                     (const Sr__ModuleInstallReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__ModuleInstallReq *
++       sr__module_install_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__module_install_req__free_unpacked
++                     (Sr__ModuleInstallReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__ModuleInstallResp methods */
++void   sr__module_install_resp__init
++                     (Sr__ModuleInstallResp         *message);
++size_t sr__module_install_resp__get_packed_size
++                     (const Sr__ModuleInstallResp   *message);
++size_t sr__module_install_resp__pack
++                     (const Sr__ModuleInstallResp   *message,
++                      uint8_t             *out);
++size_t sr__module_install_resp__pack_to_buffer
++                     (const Sr__ModuleInstallResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__ModuleInstallResp *
++       sr__module_install_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__module_install_resp__free_unpacked
++                     (Sr__ModuleInstallResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__FeatureEnableReq methods */
++void   sr__feature_enable_req__init
++                     (Sr__FeatureEnableReq         *message);
++size_t sr__feature_enable_req__get_packed_size
++                     (const Sr__FeatureEnableReq   *message);
++size_t sr__feature_enable_req__pack
++                     (const Sr__FeatureEnableReq   *message,
++                      uint8_t             *out);
++size_t sr__feature_enable_req__pack_to_buffer
++                     (const Sr__FeatureEnableReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__FeatureEnableReq *
++       sr__feature_enable_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__feature_enable_req__free_unpacked
++                     (Sr__FeatureEnableReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__FeatureEnableResp methods */
++void   sr__feature_enable_resp__init
++                     (Sr__FeatureEnableResp         *message);
++size_t sr__feature_enable_resp__get_packed_size
++                     (const Sr__FeatureEnableResp   *message);
++size_t sr__feature_enable_resp__pack
++                     (const Sr__FeatureEnableResp   *message,
++                      uint8_t             *out);
++size_t sr__feature_enable_resp__pack_to_buffer
++                     (const Sr__FeatureEnableResp   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__FeatureEnableResp *
++       sr__feature_enable_resp__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__feature_enable_resp__free_unpacked
++                     (Sr__FeatureEnableResp *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__UnsubscribeDestinationReq methods */
++void   sr__unsubscribe_destination_req__init
++                     (Sr__UnsubscribeDestinationReq         *message);
++size_t sr__unsubscribe_destination_req__get_packed_size
++                     (const Sr__UnsubscribeDestinationReq   *message);
++size_t sr__unsubscribe_destination_req__pack
++                     (const Sr__UnsubscribeDestinationReq   *message,
++                      uint8_t             *out);
++size_t sr__unsubscribe_destination_req__pack_to_buffer
++                     (const Sr__UnsubscribeDestinationReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__UnsubscribeDestinationReq *
++       sr__unsubscribe_destination_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__unsubscribe_destination_req__free_unpacked
++                     (Sr__UnsubscribeDestinationReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__CommitTimeoutReq methods */
++void   sr__commit_timeout_req__init
++                     (Sr__CommitTimeoutReq         *message);
++size_t sr__commit_timeout_req__get_packed_size
++                     (const Sr__CommitTimeoutReq   *message);
++size_t sr__commit_timeout_req__pack
++                     (const Sr__CommitTimeoutReq   *message,
++                      uint8_t             *out);
++size_t sr__commit_timeout_req__pack_to_buffer
++                     (const Sr__CommitTimeoutReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__CommitTimeoutReq *
++       sr__commit_timeout_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__commit_timeout_req__free_unpacked
++                     (Sr__CommitTimeoutReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__OperDataTimeoutReq methods */
++void   sr__oper_data_timeout_req__init
++                     (Sr__OperDataTimeoutReq         *message);
++size_t sr__oper_data_timeout_req__get_packed_size
++                     (const Sr__OperDataTimeoutReq   *message);
++size_t sr__oper_data_timeout_req__pack
++                     (const Sr__OperDataTimeoutReq   *message,
++                      uint8_t             *out);
++size_t sr__oper_data_timeout_req__pack_to_buffer
++                     (const Sr__OperDataTimeoutReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__OperDataTimeoutReq *
++       sr__oper_data_timeout_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__oper_data_timeout_req__free_unpacked
++                     (Sr__OperDataTimeoutReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__InternalStateDataReq methods */
++void   sr__internal_state_data_req__init
++                     (Sr__InternalStateDataReq         *message);
++size_t sr__internal_state_data_req__get_packed_size
++                     (const Sr__InternalStateDataReq   *message);
++size_t sr__internal_state_data_req__pack
++                     (const Sr__InternalStateDataReq   *message,
++                      uint8_t             *out);
++size_t sr__internal_state_data_req__pack_to_buffer
++                     (const Sr__InternalStateDataReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__InternalStateDataReq *
++       sr__internal_state_data_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__internal_state_data_req__free_unpacked
++                     (Sr__InternalStateDataReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__NotifStoreCleanupReq methods */
++void   sr__notif_store_cleanup_req__init
++                     (Sr__NotifStoreCleanupReq         *message);
++size_t sr__notif_store_cleanup_req__get_packed_size
++                     (const Sr__NotifStoreCleanupReq   *message);
++size_t sr__notif_store_cleanup_req__pack
++                     (const Sr__NotifStoreCleanupReq   *message,
++                      uint8_t             *out);
++size_t sr__notif_store_cleanup_req__pack_to_buffer
++                     (const Sr__NotifStoreCleanupReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__NotifStoreCleanupReq *
++       sr__notif_store_cleanup_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__notif_store_cleanup_req__free_unpacked
++                     (Sr__NotifStoreCleanupReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__DelayedMsgReq methods */
++void   sr__delayed_msg_req__init
++                     (Sr__DelayedMsgReq         *message);
++size_t sr__delayed_msg_req__get_packed_size
++                     (const Sr__DelayedMsgReq   *message);
++size_t sr__delayed_msg_req__pack
++                     (const Sr__DelayedMsgReq   *message,
++                      uint8_t             *out);
++size_t sr__delayed_msg_req__pack_to_buffer
++                     (const Sr__DelayedMsgReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__DelayedMsgReq *
++       sr__delayed_msg_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__delayed_msg_req__free_unpacked
++                     (Sr__DelayedMsgReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__NacmReloadReq methods */
++void   sr__nacm_reload_req__init
++                     (Sr__NacmReloadReq         *message);
++size_t sr__nacm_reload_req__get_packed_size
++                     (const Sr__NacmReloadReq   *message);
++size_t sr__nacm_reload_req__pack
++                     (const Sr__NacmReloadReq   *message,
++                      uint8_t             *out);
++size_t sr__nacm_reload_req__pack_to_buffer
++                     (const Sr__NacmReloadReq   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__NacmReloadReq *
++       sr__nacm_reload_req__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__nacm_reload_req__free_unpacked
++                     (Sr__NacmReloadReq *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__Request methods */
++void   sr__request__init
++                     (Sr__Request         *message);
++size_t sr__request__get_packed_size
++                     (const Sr__Request   *message);
++size_t sr__request__pack
++                     (const Sr__Request   *message,
++                      uint8_t             *out);
++size_t sr__request__pack_to_buffer
++                     (const Sr__Request   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__Request *
++       sr__request__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__request__free_unpacked
++                     (Sr__Request *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__Response methods */
++void   sr__response__init
++                     (Sr__Response         *message);
++size_t sr__response__get_packed_size
++                     (const Sr__Response   *message);
++size_t sr__response__pack
++                     (const Sr__Response   *message,
++                      uint8_t             *out);
++size_t sr__response__pack_to_buffer
++                     (const Sr__Response   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__Response *
++       sr__response__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__response__free_unpacked
++                     (Sr__Response *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__Notification methods */
++void   sr__notification__init
++                     (Sr__Notification         *message);
++size_t sr__notification__get_packed_size
++                     (const Sr__Notification   *message);
++size_t sr__notification__pack
++                     (const Sr__Notification   *message,
++                      uint8_t             *out);
++size_t sr__notification__pack_to_buffer
++                     (const Sr__Notification   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__Notification *
++       sr__notification__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__notification__free_unpacked
++                     (Sr__Notification *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__NotificationAck methods */
++void   sr__notification_ack__init
++                     (Sr__NotificationAck         *message);
++size_t sr__notification_ack__get_packed_size
++                     (const Sr__NotificationAck   *message);
++size_t sr__notification_ack__pack
++                     (const Sr__NotificationAck   *message,
++                      uint8_t             *out);
++size_t sr__notification_ack__pack_to_buffer
++                     (const Sr__NotificationAck   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__NotificationAck *
++       sr__notification_ack__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__notification_ack__free_unpacked
++                     (Sr__NotificationAck *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__InternalRequest methods */
++void   sr__internal_request__init
++                     (Sr__InternalRequest         *message);
++size_t sr__internal_request__get_packed_size
++                     (const Sr__InternalRequest   *message);
++size_t sr__internal_request__pack
++                     (const Sr__InternalRequest   *message,
++                      uint8_t             *out);
++size_t sr__internal_request__pack_to_buffer
++                     (const Sr__InternalRequest   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__InternalRequest *
++       sr__internal_request__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__internal_request__free_unpacked
++                     (Sr__InternalRequest *message,
++                      ProtobufCAllocator *allocator);
++/* Sr__Msg methods */
++void   sr__msg__init
++                     (Sr__Msg         *message);
++size_t sr__msg__get_packed_size
++                     (const Sr__Msg   *message);
++size_t sr__msg__pack
++                     (const Sr__Msg   *message,
++                      uint8_t             *out);
++size_t sr__msg__pack_to_buffer
++                     (const Sr__Msg   *message,
++                      ProtobufCBuffer     *buffer);
++Sr__Msg *
++       sr__msg__unpack
++                     (ProtobufCAllocator  *allocator,
++                      size_t               len,
++                      const uint8_t       *data);
++void   sr__msg__free_unpacked
++                     (Sr__Msg *message,
++                      ProtobufCAllocator *allocator);
++/* --- per-message closures --- */
++
++typedef void (*Sr__Value_Closure)
++                 (const Sr__Value *message,
++                  void *closure_data);
++typedef void (*Sr__Node_Closure)
++                 (const Sr__Node *message,
++                  void *closure_data);
++typedef void (*Sr__Error_Closure)
++                 (const Sr__Error *message,
++                  void *closure_data);
++typedef void (*Sr__SessionStartReq_Closure)
++                 (const Sr__SessionStartReq *message,
++                  void *closure_data);
++typedef void (*Sr__SessionStartResp_Closure)
++                 (const Sr__SessionStartResp *message,
++                  void *closure_data);
++typedef void (*Sr__SessionStopReq_Closure)
++                 (const Sr__SessionStopReq *message,
++                  void *closure_data);
++typedef void (*Sr__SessionStopResp_Closure)
++                 (const Sr__SessionStopResp *message,
++                  void *closure_data);
++typedef void (*Sr__SessionRefreshReq_Closure)
++                 (const Sr__SessionRefreshReq *message,
++                  void *closure_data);
++typedef void (*Sr__SessionRefreshResp_Closure)
++                 (const Sr__SessionRefreshResp *message,
++                  void *closure_data);
++typedef void (*Sr__SessionCheckReq_Closure)
++                 (const Sr__SessionCheckReq *message,
++                  void *closure_data);
++typedef void (*Sr__SessionCheckResp_Closure)
++                 (const Sr__SessionCheckResp *message,
++                  void *closure_data);
++typedef void (*Sr__SessionSwitchDsReq_Closure)
++                 (const Sr__SessionSwitchDsReq *message,
++                  void *closure_data);
++typedef void (*Sr__SessionSwitchDsResp_Closure)
++                 (const Sr__SessionSwitchDsResp *message,
++                  void *closure_data);
++typedef void (*Sr__SessionSetOptsReq_Closure)
++                 (const Sr__SessionSetOptsReq *message,
++                  void *closure_data);
++typedef void (*Sr__SessionSetOptsResp_Closure)
++                 (const Sr__SessionSetOptsResp *message,
++                  void *closure_data);
++typedef void (*Sr__VersionVerifyReq_Closure)
++                 (const Sr__VersionVerifyReq *message,
++                  void *closure_data);
++typedef void (*Sr__VersionVerifyResp_Closure)
++                 (const Sr__VersionVerifyResp *message,
++                  void *closure_data);
++typedef void (*Sr__SchemaRevision_Closure)
++                 (const Sr__SchemaRevision *message,
++                  void *closure_data);
++typedef void (*Sr__SchemaSubmodule_Closure)
++                 (const Sr__SchemaSubmodule *message,
++                  void *closure_data);
++typedef void (*Sr__Schema_Closure)
++                 (const Sr__Schema *message,
++                  void *closure_data);
++typedef void (*Sr__ListSchemasReq_Closure)
++                 (const Sr__ListSchemasReq *message,
++                  void *closure_data);
++typedef void (*Sr__ListSchemasResp_Closure)
++                 (const Sr__ListSchemasResp *message,
++                  void *closure_data);
++typedef void (*Sr__GetSchemaReq_Closure)
++                 (const Sr__GetSchemaReq *message,
++                  void *closure_data);
++typedef void (*Sr__GetSchemaResp_Closure)
++                 (const Sr__GetSchemaResp *message,
++                  void *closure_data);
++typedef void (*Sr__GetItemReq_Closure)
++                 (const Sr__GetItemReq *message,
++                  void *closure_data);
++typedef void (*Sr__GetItemResp_Closure)
++                 (const Sr__GetItemResp *message,
++                  void *closure_data);
++typedef void (*Sr__GetItemsReq_Closure)
++                 (const Sr__GetItemsReq *message,
++                  void *closure_data);
++typedef void (*Sr__GetItemsResp_Closure)
++                 (const Sr__GetItemsResp *message,
++                  void *closure_data);
++typedef void (*Sr__GetSubtreeReq_Closure)
++                 (const Sr__GetSubtreeReq *message,
++                  void *closure_data);
++typedef void (*Sr__GetSubtreeResp_Closure)
++                 (const Sr__GetSubtreeResp *message,
++                  void *closure_data);
++typedef void (*Sr__GetSubtreesReq_Closure)
++                 (const Sr__GetSubtreesReq *message,
++                  void *closure_data);
++typedef void (*Sr__GetSubtreesResp_Closure)
++                 (const Sr__GetSubtreesResp *message,
++                  void *closure_data);
++typedef void (*Sr__GetSubtreeChunkReq_Closure)
++                 (const Sr__GetSubtreeChunkReq *message,
++                  void *closure_data);
++typedef void (*Sr__GetSubtreeChunkResp_Closure)
++                 (const Sr__GetSubtreeChunkResp *message,
++                  void *closure_data);
++typedef void (*Sr__SetItemReq_Closure)
++                 (const Sr__SetItemReq *message,
++                  void *closure_data);
++typedef void (*Sr__SetItemResp_Closure)
++                 (const Sr__SetItemResp *message,
++                  void *closure_data);
++typedef void (*Sr__SetItemStrReq_Closure)
++                 (const Sr__SetItemStrReq *message,
++                  void *closure_data);
++typedef void (*Sr__SetItemStrResp_Closure)
++                 (const Sr__SetItemStrResp *message,
++                  void *closure_data);
++typedef void (*Sr__DeleteItemReq_Closure)
++                 (const Sr__DeleteItemReq *message,
++                  void *closure_data);
++typedef void (*Sr__DeleteItemResp_Closure)
++                 (const Sr__DeleteItemResp *message,
++                  void *closure_data);
++typedef void (*Sr__MoveItemReq_Closure)
++                 (const Sr__MoveItemReq *message,
++                  void *closure_data);
++typedef void (*Sr__MoveItemResp_Closure)
++                 (const Sr__MoveItemResp *message,
++                  void *closure_data);
++typedef void (*Sr__ValidateReq_Closure)
++                 (const Sr__ValidateReq *message,
++                  void *closure_data);
++typedef void (*Sr__ValidateResp_Closure)
++                 (const Sr__ValidateResp *message,
++                  void *closure_data);
++typedef void (*Sr__CommitReq_Closure)
++                 (const Sr__CommitReq *message,
++                  void *closure_data);
++typedef void (*Sr__CommitResp_Closure)
++                 (const Sr__CommitResp *message,
++                  void *closure_data);
++typedef void (*Sr__DiscardChangesReq_Closure)
++                 (const Sr__DiscardChangesReq *message,
++                  void *closure_data);
++typedef void (*Sr__DiscardChangesResp_Closure)
++                 (const Sr__DiscardChangesResp *message,
++                  void *closure_data);
++typedef void (*Sr__CopyConfigReq_Closure)
++                 (const Sr__CopyConfigReq *message,
++                  void *closure_data);
++typedef void (*Sr__CopyConfigResp_Closure)
++                 (const Sr__CopyConfigResp *message,
++                  void *closure_data);
++typedef void (*Sr__LockReq_Closure)
++                 (const Sr__LockReq *message,
++                  void *closure_data);
++typedef void (*Sr__LockResp_Closure)
++                 (const Sr__LockResp *message,
++                  void *closure_data);
++typedef void (*Sr__UnlockReq_Closure)
++                 (const Sr__UnlockReq *message,
++                  void *closure_data);
++typedef void (*Sr__UnlockResp_Closure)
++                 (const Sr__UnlockResp *message,
++                  void *closure_data);
++typedef void (*Sr__SubscribeReq_Closure)
++                 (const Sr__SubscribeReq *message,
++                  void *closure_data);
++typedef void (*Sr__SubscribeResp_Closure)
++                 (const Sr__SubscribeResp *message,
++                  void *closure_data);
++typedef void (*Sr__UnsubscribeReq_Closure)
++                 (const Sr__UnsubscribeReq *message,
++                  void *closure_data);
++typedef void (*Sr__UnsubscribeResp_Closure)
++                 (const Sr__UnsubscribeResp *message,
++                  void *closure_data);
++typedef void (*Sr__CheckEnabledRunningReq_Closure)
++                 (const Sr__CheckEnabledRunningReq *message,
++                  void *closure_data);
++typedef void (*Sr__CheckEnabledRunningResp_Closure)
++                 (const Sr__CheckEnabledRunningResp *message,
++                  void *closure_data);
++typedef void (*Sr__ModuleInstallNotification_Closure)
++                 (const Sr__ModuleInstallNotification *message,
++                  void *closure_data);
++typedef void (*Sr__FeatureEnableNotification_Closure)
++                 (const Sr__FeatureEnableNotification *message,
++                  void *closure_data);
++typedef void (*Sr__ModuleChangeNotification_Closure)
++                 (const Sr__ModuleChangeNotification *message,
++                  void *closure_data);
++typedef void (*Sr__SubtreeChangeNotification_Closure)
++                 (const Sr__SubtreeChangeNotification *message,
++                  void *closure_data);
++typedef void (*Sr__Change_Closure)
++                 (const Sr__Change *message,
++                  void *closure_data);
++typedef void (*Sr__GetChangesReq_Closure)
++                 (const Sr__GetChangesReq *message,
++                  void *closure_data);
++typedef void (*Sr__GetChangesResp_Closure)
++                 (const Sr__GetChangesResp *message,
++                  void *closure_data);
++typedef void (*Sr__CheckExecPermReq_Closure)
++                 (const Sr__CheckExecPermReq *message,
++                  void *closure_data);
++typedef void (*Sr__CheckExecPermResp_Closure)
++                 (const Sr__CheckExecPermResp *message,
++                  void *closure_data);
++typedef void (*Sr__RPCReq_Closure)
++                 (const Sr__RPCReq *message,
++                  void *closure_data);
++typedef void (*Sr__RPCResp_Closure)
++                 (const Sr__RPCResp *message,
++                  void *closure_data);
++typedef void (*Sr__EventNotifReq_Closure)
++                 (const Sr__EventNotifReq *message,
++                  void *closure_data);
++typedef void (*Sr__EventNotifResp_Closure)
++                 (const Sr__EventNotifResp *message,
++                  void *closure_data);
++typedef void (*Sr__EventNotifReplayReq_Closure)
++                 (const Sr__EventNotifReplayReq *message,
++                  void *closure_data);
++typedef void (*Sr__EventNotifReplayResp_Closure)
++                 (const Sr__EventNotifReplayResp *message,
++                  void *closure_data);
++typedef void (*Sr__DataProvideReq_Closure)
++                 (const Sr__DataProvideReq *message,
++                  void *closure_data);
++typedef void (*Sr__DataProvideResp_Closure)
++                 (const Sr__DataProvideResp *message,
++                  void *closure_data);
++typedef void (*Sr__ModuleInstallReq_Closure)
++                 (const Sr__ModuleInstallReq *message,
++                  void *closure_data);
++typedef void (*Sr__ModuleInstallResp_Closure)
++                 (const Sr__ModuleInstallResp *message,
++                  void *closure_data);
++typedef void (*Sr__FeatureEnableReq_Closure)
++                 (const Sr__FeatureEnableReq *message,
++                  void *closure_data);
++typedef void (*Sr__FeatureEnableResp_Closure)
++                 (const Sr__FeatureEnableResp *message,
++                  void *closure_data);
++typedef void (*Sr__UnsubscribeDestinationReq_Closure)
++                 (const Sr__UnsubscribeDestinationReq *message,
++                  void *closure_data);
++typedef void (*Sr__CommitTimeoutReq_Closure)
++                 (const Sr__CommitTimeoutReq *message,
++                  void *closure_data);
++typedef void (*Sr__OperDataTimeoutReq_Closure)
++                 (const Sr__OperDataTimeoutReq *message,
++                  void *closure_data);
++typedef void (*Sr__InternalStateDataReq_Closure)
++                 (const Sr__InternalStateDataReq *message,
++                  void *closure_data);
++typedef void (*Sr__NotifStoreCleanupReq_Closure)
++                 (const Sr__NotifStoreCleanupReq *message,
++                  void *closure_data);
++typedef void (*Sr__DelayedMsgReq_Closure)
++                 (const Sr__DelayedMsgReq *message,
++                  void *closure_data);
++typedef void (*Sr__NacmReloadReq_Closure)
++                 (const Sr__NacmReloadReq *message,
++                  void *closure_data);
++typedef void (*Sr__Request_Closure)
++                 (const Sr__Request *message,
++                  void *closure_data);
++typedef void (*Sr__Response_Closure)
++                 (const Sr__Response *message,
++                  void *closure_data);
++typedef void (*Sr__Notification_Closure)
++                 (const Sr__Notification *message,
++                  void *closure_data);
++typedef void (*Sr__NotificationAck_Closure)
++                 (const Sr__NotificationAck *message,
++                  void *closure_data);
++typedef void (*Sr__InternalRequest_Closure)
++                 (const Sr__InternalRequest *message,
++                  void *closure_data);
++typedef void (*Sr__Msg_Closure)
++                 (const Sr__Msg *message,
++                  void *closure_data);
++
++/* --- services --- */
++
++
++/* --- descriptors --- */
++
++extern const ProtobufCEnumDescriptor    sr__api_variant__descriptor;
++extern const ProtobufCEnumDescriptor    sr__data_store__descriptor;
++extern const ProtobufCEnumDescriptor    sr__session_flags__descriptor;
++extern const ProtobufCEnumDescriptor    sr__edit_flags__descriptor;
++extern const ProtobufCEnumDescriptor    sr__subscription_type__descriptor;
++extern const ProtobufCEnumDescriptor    sr__notification_event__descriptor;
++extern const ProtobufCEnumDescriptor    sr__module_state__descriptor;
++extern const ProtobufCEnumDescriptor    sr__change_operation__descriptor;
++extern const ProtobufCEnumDescriptor    sr__operation__descriptor;
++extern const ProtobufCMessageDescriptor sr__value__descriptor;
++extern const ProtobufCEnumDescriptor    sr__value__types__descriptor;
++extern const ProtobufCMessageDescriptor sr__node__descriptor;
++extern const ProtobufCMessageDescriptor sr__error__descriptor;
++extern const ProtobufCMessageDescriptor sr__session_start_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__session_start_resp__descriptor;
++extern const ProtobufCMessageDescriptor sr__session_stop_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__session_stop_resp__descriptor;
++extern const ProtobufCMessageDescriptor sr__session_refresh_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__session_refresh_resp__descriptor;
++extern const ProtobufCMessageDescriptor sr__session_check_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__session_check_resp__descriptor;
++extern const ProtobufCMessageDescriptor sr__session_switch_ds_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__session_switch_ds_resp__descriptor;
++extern const ProtobufCMessageDescriptor sr__session_set_opts_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__session_set_opts_resp__descriptor;
++extern const ProtobufCMessageDescriptor sr__version_verify_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__version_verify_resp__descriptor;
++extern const ProtobufCMessageDescriptor sr__schema_revision__descriptor;
++extern const ProtobufCMessageDescriptor sr__schema_submodule__descriptor;
++extern const ProtobufCMessageDescriptor sr__schema__descriptor;
++extern const ProtobufCMessageDescriptor sr__list_schemas_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__list_schemas_resp__descriptor;
++extern const ProtobufCMessageDescriptor sr__get_schema_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__get_schema_resp__descriptor;
++extern const ProtobufCMessageDescriptor sr__get_item_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__get_item_resp__descriptor;
++extern const ProtobufCMessageDescriptor sr__get_items_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__get_items_resp__descriptor;
++extern const ProtobufCMessageDescriptor sr__get_subtree_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__get_subtree_resp__descriptor;
++extern const ProtobufCMessageDescriptor sr__get_subtrees_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__get_subtrees_resp__descriptor;
++extern const ProtobufCMessageDescriptor sr__get_subtree_chunk_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__get_subtree_chunk_resp__descriptor;
++extern const ProtobufCMessageDescriptor sr__set_item_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__set_item_resp__descriptor;
++extern const ProtobufCMessageDescriptor sr__set_item_str_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__set_item_str_resp__descriptor;
++extern const ProtobufCMessageDescriptor sr__delete_item_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__delete_item_resp__descriptor;
++extern const ProtobufCMessageDescriptor sr__move_item_req__descriptor;
++extern const ProtobufCEnumDescriptor    sr__move_item_req__move_position__descriptor;
++extern const ProtobufCMessageDescriptor sr__move_item_resp__descriptor;
++extern const ProtobufCMessageDescriptor sr__validate_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__validate_resp__descriptor;
++extern const ProtobufCMessageDescriptor sr__commit_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__commit_resp__descriptor;
++extern const ProtobufCMessageDescriptor sr__discard_changes_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__discard_changes_resp__descriptor;
++extern const ProtobufCMessageDescriptor sr__copy_config_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__copy_config_resp__descriptor;
++extern const ProtobufCMessageDescriptor sr__lock_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__lock_resp__descriptor;
++extern const ProtobufCMessageDescriptor sr__unlock_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__unlock_resp__descriptor;
++extern const ProtobufCMessageDescriptor sr__subscribe_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__subscribe_resp__descriptor;
++extern const ProtobufCMessageDescriptor sr__unsubscribe_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__unsubscribe_resp__descriptor;
++extern const ProtobufCMessageDescriptor sr__check_enabled_running_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__check_enabled_running_resp__descriptor;
++extern const ProtobufCMessageDescriptor sr__module_install_notification__descriptor;
++extern const ProtobufCMessageDescriptor sr__feature_enable_notification__descriptor;
++extern const ProtobufCMessageDescriptor sr__module_change_notification__descriptor;
++extern const ProtobufCMessageDescriptor sr__subtree_change_notification__descriptor;
++extern const ProtobufCMessageDescriptor sr__change__descriptor;
++extern const ProtobufCMessageDescriptor sr__get_changes_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__get_changes_resp__descriptor;
++extern const ProtobufCMessageDescriptor sr__check_exec_perm_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__check_exec_perm_resp__descriptor;
++extern const ProtobufCMessageDescriptor sr__rpcreq__descriptor;
++extern const ProtobufCMessageDescriptor sr__rpcresp__descriptor;
++extern const ProtobufCMessageDescriptor sr__event_notif_req__descriptor;
++extern const ProtobufCEnumDescriptor    sr__event_notif_req__notif_type__descriptor;
++extern const ProtobufCEnumDescriptor    sr__event_notif_req__notif_flags__descriptor;
++extern const ProtobufCMessageDescriptor sr__event_notif_resp__descriptor;
++extern const ProtobufCMessageDescriptor sr__event_notif_replay_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__event_notif_replay_resp__descriptor;
++extern const ProtobufCMessageDescriptor sr__data_provide_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__data_provide_resp__descriptor;
++extern const ProtobufCMessageDescriptor sr__module_install_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__module_install_resp__descriptor;
++extern const ProtobufCMessageDescriptor sr__feature_enable_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__feature_enable_resp__descriptor;
++extern const ProtobufCMessageDescriptor sr__unsubscribe_destination_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__commit_timeout_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__oper_data_timeout_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__internal_state_data_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__notif_store_cleanup_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__delayed_msg_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__nacm_reload_req__descriptor;
++extern const ProtobufCMessageDescriptor sr__request__descriptor;
++extern const ProtobufCMessageDescriptor sr__response__descriptor;
++extern const ProtobufCMessageDescriptor sr__notification__descriptor;
++extern const ProtobufCMessageDescriptor sr__notification_ack__descriptor;
++extern const ProtobufCMessageDescriptor sr__internal_request__descriptor;
++extern const ProtobufCMessageDescriptor sr__msg__descriptor;
++extern const ProtobufCEnumDescriptor    sr__msg__msg_type__descriptor;
++
++PROTOBUF_C__END_DECLS
++
++
++#endif  /* PROTOBUF_C_sysrepo_2eproto__INCLUDED */
diff --git a/net/sysrepo/patches/001-protobuf-remove-protoc-command-from-cmake-file b/net/sysrepo/patches/001-protobuf-remove-protoc-command-from-cmake-file
deleted file mode 100644 (file)
index cb742ce..0000000
+++ /dev/null
@@ -1,14804 +0,0 @@
-Index: sysrepo-7aa2f18d234267403147df92c0005c871f0aa840/src/CMakeLists.txt
-===================================================================
---- sysrepo-7aa2f18d234267403147df92c0005c871f0aa840.orig/src/CMakeLists.txt
-+++ sysrepo-7aa2f18d234267403147df92c0005c871f0aa840/src/CMakeLists.txt
-@@ -21,14 +21,6 @@ set(GENERATED_PROTO_H "${COMMON_BIN_DIR}
- set(GENERATED_PROTO_C "${COMMON_BIN_DIR}/${PROTO_NAME}.pb-c.c")
- get_filename_component(ABS_PATH ${PROTO_FILE} PATH)
--add_custom_command(
--    OUTPUT "${GENERATED_PROTO_C}"
--           "${GENERATED_PROTO_H}"
--   COMMAND  ${PROTOBUFC_PROTOC_EXECUTABLE}
--   ARGS --c_out ${COMMON_BIN_DIR} -I ${ABS_PATH} ${PROTO_FILE}
--   DEPENDS ${PROTO_FILE}
--   COMMENT "Running C protocol buffer compiler on ${PROTO_FILE}"
--   VERBATIM )
- configure_file("${COMMON_DIR}/sr_constants.h.in" "${COMMON_BIN_DIR}/sr_constants.h" ESCAPE_QUOTES @ONLY)
-Index: sysrepo-7aa2f18d234267403147df92c0005c871f0aa840/src/common/sysrepo.pb-c.c
-===================================================================
---- /dev/null
-+++ sysrepo-7aa2f18d234267403147df92c0005c871f0aa840/src/common/sysrepo.pb-c.c
-@@ -0,0 +1,10537 @@
-+/* Generated by the protocol buffer compiler.  DO NOT EDIT! */
-+/* Generated from: sysrepo.proto */
-+
-+/* Do not generate deprecated warnings for self */
-+#ifndef PROTOBUF_C__NO_DEPRECATED
-+#define PROTOBUF_C__NO_DEPRECATED
-+#endif
-+
-+#include "sysrepo.pb-c.h"
-+void   sr__value__init
-+                     (Sr__Value         *message)
-+{
-+  static Sr__Value init_value = SR__VALUE__INIT;
-+  *message = init_value;
-+}
-+size_t sr__value__get_packed_size
-+                     (const Sr__Value *message)
-+{
-+  assert(message->base.descriptor == &sr__value__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__value__pack
-+                     (const Sr__Value *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__value__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__value__pack_to_buffer
-+                     (const Sr__Value *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__value__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__Value *
-+       sr__value__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__Value *)
-+     protobuf_c_message_unpack (&sr__value__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__value__free_unpacked
-+                     (Sr__Value *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__value__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__node__init
-+                     (Sr__Node         *message)
-+{
-+  static Sr__Node init_value = SR__NODE__INIT;
-+  *message = init_value;
-+}
-+size_t sr__node__get_packed_size
-+                     (const Sr__Node *message)
-+{
-+  assert(message->base.descriptor == &sr__node__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__node__pack
-+                     (const Sr__Node *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__node__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__node__pack_to_buffer
-+                     (const Sr__Node *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__node__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__Node *
-+       sr__node__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__Node *)
-+     protobuf_c_message_unpack (&sr__node__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__node__free_unpacked
-+                     (Sr__Node *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__node__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__error__init
-+                     (Sr__Error         *message)
-+{
-+  static Sr__Error init_value = SR__ERROR__INIT;
-+  *message = init_value;
-+}
-+size_t sr__error__get_packed_size
-+                     (const Sr__Error *message)
-+{
-+  assert(message->base.descriptor == &sr__error__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__error__pack
-+                     (const Sr__Error *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__error__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__error__pack_to_buffer
-+                     (const Sr__Error *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__error__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__Error *
-+       sr__error__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__Error *)
-+     protobuf_c_message_unpack (&sr__error__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__error__free_unpacked
-+                     (Sr__Error *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__error__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__session_start_req__init
-+                     (Sr__SessionStartReq         *message)
-+{
-+  static Sr__SessionStartReq init_value = SR__SESSION_START_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__session_start_req__get_packed_size
-+                     (const Sr__SessionStartReq *message)
-+{
-+  assert(message->base.descriptor == &sr__session_start_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__session_start_req__pack
-+                     (const Sr__SessionStartReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__session_start_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__session_start_req__pack_to_buffer
-+                     (const Sr__SessionStartReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__session_start_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__SessionStartReq *
-+       sr__session_start_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__SessionStartReq *)
-+     protobuf_c_message_unpack (&sr__session_start_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__session_start_req__free_unpacked
-+                     (Sr__SessionStartReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__session_start_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__session_start_resp__init
-+                     (Sr__SessionStartResp         *message)
-+{
-+  static Sr__SessionStartResp init_value = SR__SESSION_START_RESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__session_start_resp__get_packed_size
-+                     (const Sr__SessionStartResp *message)
-+{
-+  assert(message->base.descriptor == &sr__session_start_resp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__session_start_resp__pack
-+                     (const Sr__SessionStartResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__session_start_resp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__session_start_resp__pack_to_buffer
-+                     (const Sr__SessionStartResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__session_start_resp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__SessionStartResp *
-+       sr__session_start_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__SessionStartResp *)
-+     protobuf_c_message_unpack (&sr__session_start_resp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__session_start_resp__free_unpacked
-+                     (Sr__SessionStartResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__session_start_resp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__session_stop_req__init
-+                     (Sr__SessionStopReq         *message)
-+{
-+  static Sr__SessionStopReq init_value = SR__SESSION_STOP_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__session_stop_req__get_packed_size
-+                     (const Sr__SessionStopReq *message)
-+{
-+  assert(message->base.descriptor == &sr__session_stop_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__session_stop_req__pack
-+                     (const Sr__SessionStopReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__session_stop_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__session_stop_req__pack_to_buffer
-+                     (const Sr__SessionStopReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__session_stop_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__SessionStopReq *
-+       sr__session_stop_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__SessionStopReq *)
-+     protobuf_c_message_unpack (&sr__session_stop_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__session_stop_req__free_unpacked
-+                     (Sr__SessionStopReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__session_stop_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__session_stop_resp__init
-+                     (Sr__SessionStopResp         *message)
-+{
-+  static Sr__SessionStopResp init_value = SR__SESSION_STOP_RESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__session_stop_resp__get_packed_size
-+                     (const Sr__SessionStopResp *message)
-+{
-+  assert(message->base.descriptor == &sr__session_stop_resp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__session_stop_resp__pack
-+                     (const Sr__SessionStopResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__session_stop_resp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__session_stop_resp__pack_to_buffer
-+                     (const Sr__SessionStopResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__session_stop_resp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__SessionStopResp *
-+       sr__session_stop_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__SessionStopResp *)
-+     protobuf_c_message_unpack (&sr__session_stop_resp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__session_stop_resp__free_unpacked
-+                     (Sr__SessionStopResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__session_stop_resp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__session_refresh_req__init
-+                     (Sr__SessionRefreshReq         *message)
-+{
-+  static Sr__SessionRefreshReq init_value = SR__SESSION_REFRESH_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__session_refresh_req__get_packed_size
-+                     (const Sr__SessionRefreshReq *message)
-+{
-+  assert(message->base.descriptor == &sr__session_refresh_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__session_refresh_req__pack
-+                     (const Sr__SessionRefreshReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__session_refresh_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__session_refresh_req__pack_to_buffer
-+                     (const Sr__SessionRefreshReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__session_refresh_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__SessionRefreshReq *
-+       sr__session_refresh_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__SessionRefreshReq *)
-+     protobuf_c_message_unpack (&sr__session_refresh_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__session_refresh_req__free_unpacked
-+                     (Sr__SessionRefreshReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__session_refresh_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__session_refresh_resp__init
-+                     (Sr__SessionRefreshResp         *message)
-+{
-+  static Sr__SessionRefreshResp init_value = SR__SESSION_REFRESH_RESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__session_refresh_resp__get_packed_size
-+                     (const Sr__SessionRefreshResp *message)
-+{
-+  assert(message->base.descriptor == &sr__session_refresh_resp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__session_refresh_resp__pack
-+                     (const Sr__SessionRefreshResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__session_refresh_resp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__session_refresh_resp__pack_to_buffer
-+                     (const Sr__SessionRefreshResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__session_refresh_resp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__SessionRefreshResp *
-+       sr__session_refresh_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__SessionRefreshResp *)
-+     protobuf_c_message_unpack (&sr__session_refresh_resp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__session_refresh_resp__free_unpacked
-+                     (Sr__SessionRefreshResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__session_refresh_resp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__session_check_req__init
-+                     (Sr__SessionCheckReq         *message)
-+{
-+  static Sr__SessionCheckReq init_value = SR__SESSION_CHECK_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__session_check_req__get_packed_size
-+                     (const Sr__SessionCheckReq *message)
-+{
-+  assert(message->base.descriptor == &sr__session_check_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__session_check_req__pack
-+                     (const Sr__SessionCheckReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__session_check_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__session_check_req__pack_to_buffer
-+                     (const Sr__SessionCheckReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__session_check_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__SessionCheckReq *
-+       sr__session_check_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__SessionCheckReq *)
-+     protobuf_c_message_unpack (&sr__session_check_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__session_check_req__free_unpacked
-+                     (Sr__SessionCheckReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__session_check_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__session_check_resp__init
-+                     (Sr__SessionCheckResp         *message)
-+{
-+  static Sr__SessionCheckResp init_value = SR__SESSION_CHECK_RESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__session_check_resp__get_packed_size
-+                     (const Sr__SessionCheckResp *message)
-+{
-+  assert(message->base.descriptor == &sr__session_check_resp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__session_check_resp__pack
-+                     (const Sr__SessionCheckResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__session_check_resp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__session_check_resp__pack_to_buffer
-+                     (const Sr__SessionCheckResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__session_check_resp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__SessionCheckResp *
-+       sr__session_check_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__SessionCheckResp *)
-+     protobuf_c_message_unpack (&sr__session_check_resp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__session_check_resp__free_unpacked
-+                     (Sr__SessionCheckResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__session_check_resp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__session_switch_ds_req__init
-+                     (Sr__SessionSwitchDsReq         *message)
-+{
-+  static Sr__SessionSwitchDsReq init_value = SR__SESSION_SWITCH_DS_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__session_switch_ds_req__get_packed_size
-+                     (const Sr__SessionSwitchDsReq *message)
-+{
-+  assert(message->base.descriptor == &sr__session_switch_ds_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__session_switch_ds_req__pack
-+                     (const Sr__SessionSwitchDsReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__session_switch_ds_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__session_switch_ds_req__pack_to_buffer
-+                     (const Sr__SessionSwitchDsReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__session_switch_ds_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__SessionSwitchDsReq *
-+       sr__session_switch_ds_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__SessionSwitchDsReq *)
-+     protobuf_c_message_unpack (&sr__session_switch_ds_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__session_switch_ds_req__free_unpacked
-+                     (Sr__SessionSwitchDsReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__session_switch_ds_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__session_switch_ds_resp__init
-+                     (Sr__SessionSwitchDsResp         *message)
-+{
-+  static Sr__SessionSwitchDsResp init_value = SR__SESSION_SWITCH_DS_RESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__session_switch_ds_resp__get_packed_size
-+                     (const Sr__SessionSwitchDsResp *message)
-+{
-+  assert(message->base.descriptor == &sr__session_switch_ds_resp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__session_switch_ds_resp__pack
-+                     (const Sr__SessionSwitchDsResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__session_switch_ds_resp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__session_switch_ds_resp__pack_to_buffer
-+                     (const Sr__SessionSwitchDsResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__session_switch_ds_resp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__SessionSwitchDsResp *
-+       sr__session_switch_ds_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__SessionSwitchDsResp *)
-+     protobuf_c_message_unpack (&sr__session_switch_ds_resp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__session_switch_ds_resp__free_unpacked
-+                     (Sr__SessionSwitchDsResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__session_switch_ds_resp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__session_set_opts_req__init
-+                     (Sr__SessionSetOptsReq         *message)
-+{
-+  static Sr__SessionSetOptsReq init_value = SR__SESSION_SET_OPTS_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__session_set_opts_req__get_packed_size
-+                     (const Sr__SessionSetOptsReq *message)
-+{
-+  assert(message->base.descriptor == &sr__session_set_opts_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__session_set_opts_req__pack
-+                     (const Sr__SessionSetOptsReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__session_set_opts_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__session_set_opts_req__pack_to_buffer
-+                     (const Sr__SessionSetOptsReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__session_set_opts_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__SessionSetOptsReq *
-+       sr__session_set_opts_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__SessionSetOptsReq *)
-+     protobuf_c_message_unpack (&sr__session_set_opts_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__session_set_opts_req__free_unpacked
-+                     (Sr__SessionSetOptsReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__session_set_opts_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__session_set_opts_resp__init
-+                     (Sr__SessionSetOptsResp         *message)
-+{
-+  static Sr__SessionSetOptsResp init_value = SR__SESSION_SET_OPTS_RESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__session_set_opts_resp__get_packed_size
-+                     (const Sr__SessionSetOptsResp *message)
-+{
-+  assert(message->base.descriptor == &sr__session_set_opts_resp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__session_set_opts_resp__pack
-+                     (const Sr__SessionSetOptsResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__session_set_opts_resp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__session_set_opts_resp__pack_to_buffer
-+                     (const Sr__SessionSetOptsResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__session_set_opts_resp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__SessionSetOptsResp *
-+       sr__session_set_opts_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__SessionSetOptsResp *)
-+     protobuf_c_message_unpack (&sr__session_set_opts_resp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__session_set_opts_resp__free_unpacked
-+                     (Sr__SessionSetOptsResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__session_set_opts_resp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__version_verify_req__init
-+                     (Sr__VersionVerifyReq         *message)
-+{
-+  static Sr__VersionVerifyReq init_value = SR__VERSION_VERIFY_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__version_verify_req__get_packed_size
-+                     (const Sr__VersionVerifyReq *message)
-+{
-+  assert(message->base.descriptor == &sr__version_verify_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__version_verify_req__pack
-+                     (const Sr__VersionVerifyReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__version_verify_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__version_verify_req__pack_to_buffer
-+                     (const Sr__VersionVerifyReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__version_verify_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__VersionVerifyReq *
-+       sr__version_verify_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__VersionVerifyReq *)
-+     protobuf_c_message_unpack (&sr__version_verify_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__version_verify_req__free_unpacked
-+                     (Sr__VersionVerifyReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__version_verify_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__version_verify_resp__init
-+                     (Sr__VersionVerifyResp         *message)
-+{
-+  static Sr__VersionVerifyResp init_value = SR__VERSION_VERIFY_RESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__version_verify_resp__get_packed_size
-+                     (const Sr__VersionVerifyResp *message)
-+{
-+  assert(message->base.descriptor == &sr__version_verify_resp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__version_verify_resp__pack
-+                     (const Sr__VersionVerifyResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__version_verify_resp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__version_verify_resp__pack_to_buffer
-+                     (const Sr__VersionVerifyResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__version_verify_resp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__VersionVerifyResp *
-+       sr__version_verify_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__VersionVerifyResp *)
-+     protobuf_c_message_unpack (&sr__version_verify_resp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__version_verify_resp__free_unpacked
-+                     (Sr__VersionVerifyResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__version_verify_resp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__schema_revision__init
-+                     (Sr__SchemaRevision         *message)
-+{
-+  static Sr__SchemaRevision init_value = SR__SCHEMA_REVISION__INIT;
-+  *message = init_value;
-+}
-+size_t sr__schema_revision__get_packed_size
-+                     (const Sr__SchemaRevision *message)
-+{
-+  assert(message->base.descriptor == &sr__schema_revision__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__schema_revision__pack
-+                     (const Sr__SchemaRevision *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__schema_revision__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__schema_revision__pack_to_buffer
-+                     (const Sr__SchemaRevision *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__schema_revision__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__SchemaRevision *
-+       sr__schema_revision__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__SchemaRevision *)
-+     protobuf_c_message_unpack (&sr__schema_revision__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__schema_revision__free_unpacked
-+                     (Sr__SchemaRevision *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__schema_revision__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__schema_submodule__init
-+                     (Sr__SchemaSubmodule         *message)
-+{
-+  static Sr__SchemaSubmodule init_value = SR__SCHEMA_SUBMODULE__INIT;
-+  *message = init_value;
-+}
-+size_t sr__schema_submodule__get_packed_size
-+                     (const Sr__SchemaSubmodule *message)
-+{
-+  assert(message->base.descriptor == &sr__schema_submodule__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__schema_submodule__pack
-+                     (const Sr__SchemaSubmodule *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__schema_submodule__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__schema_submodule__pack_to_buffer
-+                     (const Sr__SchemaSubmodule *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__schema_submodule__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__SchemaSubmodule *
-+       sr__schema_submodule__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__SchemaSubmodule *)
-+     protobuf_c_message_unpack (&sr__schema_submodule__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__schema_submodule__free_unpacked
-+                     (Sr__SchemaSubmodule *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__schema_submodule__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__schema__init
-+                     (Sr__Schema         *message)
-+{
-+  static Sr__Schema init_value = SR__SCHEMA__INIT;
-+  *message = init_value;
-+}
-+size_t sr__schema__get_packed_size
-+                     (const Sr__Schema *message)
-+{
-+  assert(message->base.descriptor == &sr__schema__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__schema__pack
-+                     (const Sr__Schema *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__schema__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__schema__pack_to_buffer
-+                     (const Sr__Schema *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__schema__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__Schema *
-+       sr__schema__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__Schema *)
-+     protobuf_c_message_unpack (&sr__schema__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__schema__free_unpacked
-+                     (Sr__Schema *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__schema__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__list_schemas_req__init
-+                     (Sr__ListSchemasReq         *message)
-+{
-+  static Sr__ListSchemasReq init_value = SR__LIST_SCHEMAS_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__list_schemas_req__get_packed_size
-+                     (const Sr__ListSchemasReq *message)
-+{
-+  assert(message->base.descriptor == &sr__list_schemas_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__list_schemas_req__pack
-+                     (const Sr__ListSchemasReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__list_schemas_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__list_schemas_req__pack_to_buffer
-+                     (const Sr__ListSchemasReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__list_schemas_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__ListSchemasReq *
-+       sr__list_schemas_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__ListSchemasReq *)
-+     protobuf_c_message_unpack (&sr__list_schemas_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__list_schemas_req__free_unpacked
-+                     (Sr__ListSchemasReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__list_schemas_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__list_schemas_resp__init
-+                     (Sr__ListSchemasResp         *message)
-+{
-+  static Sr__ListSchemasResp init_value = SR__LIST_SCHEMAS_RESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__list_schemas_resp__get_packed_size
-+                     (const Sr__ListSchemasResp *message)
-+{
-+  assert(message->base.descriptor == &sr__list_schemas_resp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__list_schemas_resp__pack
-+                     (const Sr__ListSchemasResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__list_schemas_resp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__list_schemas_resp__pack_to_buffer
-+                     (const Sr__ListSchemasResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__list_schemas_resp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__ListSchemasResp *
-+       sr__list_schemas_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__ListSchemasResp *)
-+     protobuf_c_message_unpack (&sr__list_schemas_resp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__list_schemas_resp__free_unpacked
-+                     (Sr__ListSchemasResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__list_schemas_resp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__get_schema_req__init
-+                     (Sr__GetSchemaReq         *message)
-+{
-+  static Sr__GetSchemaReq init_value = SR__GET_SCHEMA_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__get_schema_req__get_packed_size
-+                     (const Sr__GetSchemaReq *message)
-+{
-+  assert(message->base.descriptor == &sr__get_schema_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__get_schema_req__pack
-+                     (const Sr__GetSchemaReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__get_schema_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__get_schema_req__pack_to_buffer
-+                     (const Sr__GetSchemaReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__get_schema_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__GetSchemaReq *
-+       sr__get_schema_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__GetSchemaReq *)
-+     protobuf_c_message_unpack (&sr__get_schema_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__get_schema_req__free_unpacked
-+                     (Sr__GetSchemaReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__get_schema_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__get_schema_resp__init
-+                     (Sr__GetSchemaResp         *message)
-+{
-+  static Sr__GetSchemaResp init_value = SR__GET_SCHEMA_RESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__get_schema_resp__get_packed_size
-+                     (const Sr__GetSchemaResp *message)
-+{
-+  assert(message->base.descriptor == &sr__get_schema_resp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__get_schema_resp__pack
-+                     (const Sr__GetSchemaResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__get_schema_resp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__get_schema_resp__pack_to_buffer
-+                     (const Sr__GetSchemaResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__get_schema_resp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__GetSchemaResp *
-+       sr__get_schema_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__GetSchemaResp *)
-+     protobuf_c_message_unpack (&sr__get_schema_resp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__get_schema_resp__free_unpacked
-+                     (Sr__GetSchemaResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__get_schema_resp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__get_item_req__init
-+                     (Sr__GetItemReq         *message)
-+{
-+  static Sr__GetItemReq init_value = SR__GET_ITEM_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__get_item_req__get_packed_size
-+                     (const Sr__GetItemReq *message)
-+{
-+  assert(message->base.descriptor == &sr__get_item_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__get_item_req__pack
-+                     (const Sr__GetItemReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__get_item_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__get_item_req__pack_to_buffer
-+                     (const Sr__GetItemReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__get_item_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__GetItemReq *
-+       sr__get_item_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__GetItemReq *)
-+     protobuf_c_message_unpack (&sr__get_item_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__get_item_req__free_unpacked
-+                     (Sr__GetItemReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__get_item_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__get_item_resp__init
-+                     (Sr__GetItemResp         *message)
-+{
-+  static Sr__GetItemResp init_value = SR__GET_ITEM_RESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__get_item_resp__get_packed_size
-+                     (const Sr__GetItemResp *message)
-+{
-+  assert(message->base.descriptor == &sr__get_item_resp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__get_item_resp__pack
-+                     (const Sr__GetItemResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__get_item_resp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__get_item_resp__pack_to_buffer
-+                     (const Sr__GetItemResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__get_item_resp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__GetItemResp *
-+       sr__get_item_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__GetItemResp *)
-+     protobuf_c_message_unpack (&sr__get_item_resp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__get_item_resp__free_unpacked
-+                     (Sr__GetItemResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__get_item_resp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__get_items_req__init
-+                     (Sr__GetItemsReq         *message)
-+{
-+  static Sr__GetItemsReq init_value = SR__GET_ITEMS_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__get_items_req__get_packed_size
-+                     (const Sr__GetItemsReq *message)
-+{
-+  assert(message->base.descriptor == &sr__get_items_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__get_items_req__pack
-+                     (const Sr__GetItemsReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__get_items_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__get_items_req__pack_to_buffer
-+                     (const Sr__GetItemsReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__get_items_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__GetItemsReq *
-+       sr__get_items_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__GetItemsReq *)
-+     protobuf_c_message_unpack (&sr__get_items_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__get_items_req__free_unpacked
-+                     (Sr__GetItemsReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__get_items_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__get_items_resp__init
-+                     (Sr__GetItemsResp         *message)
-+{
-+  static Sr__GetItemsResp init_value = SR__GET_ITEMS_RESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__get_items_resp__get_packed_size
-+                     (const Sr__GetItemsResp *message)
-+{
-+  assert(message->base.descriptor == &sr__get_items_resp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__get_items_resp__pack
-+                     (const Sr__GetItemsResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__get_items_resp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__get_items_resp__pack_to_buffer
-+                     (const Sr__GetItemsResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__get_items_resp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__GetItemsResp *
-+       sr__get_items_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__GetItemsResp *)
-+     protobuf_c_message_unpack (&sr__get_items_resp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__get_items_resp__free_unpacked
-+                     (Sr__GetItemsResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__get_items_resp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__get_subtree_req__init
-+                     (Sr__GetSubtreeReq         *message)
-+{
-+  static Sr__GetSubtreeReq init_value = SR__GET_SUBTREE_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__get_subtree_req__get_packed_size
-+                     (const Sr__GetSubtreeReq *message)
-+{
-+  assert(message->base.descriptor == &sr__get_subtree_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__get_subtree_req__pack
-+                     (const Sr__GetSubtreeReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__get_subtree_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__get_subtree_req__pack_to_buffer
-+                     (const Sr__GetSubtreeReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__get_subtree_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__GetSubtreeReq *
-+       sr__get_subtree_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__GetSubtreeReq *)
-+     protobuf_c_message_unpack (&sr__get_subtree_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__get_subtree_req__free_unpacked
-+                     (Sr__GetSubtreeReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__get_subtree_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__get_subtree_resp__init
-+                     (Sr__GetSubtreeResp         *message)
-+{
-+  static Sr__GetSubtreeResp init_value = SR__GET_SUBTREE_RESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__get_subtree_resp__get_packed_size
-+                     (const Sr__GetSubtreeResp *message)
-+{
-+  assert(message->base.descriptor == &sr__get_subtree_resp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__get_subtree_resp__pack
-+                     (const Sr__GetSubtreeResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__get_subtree_resp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__get_subtree_resp__pack_to_buffer
-+                     (const Sr__GetSubtreeResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__get_subtree_resp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__GetSubtreeResp *
-+       sr__get_subtree_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__GetSubtreeResp *)
-+     protobuf_c_message_unpack (&sr__get_subtree_resp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__get_subtree_resp__free_unpacked
-+                     (Sr__GetSubtreeResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__get_subtree_resp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__get_subtrees_req__init
-+                     (Sr__GetSubtreesReq         *message)
-+{
-+  static Sr__GetSubtreesReq init_value = SR__GET_SUBTREES_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__get_subtrees_req__get_packed_size
-+                     (const Sr__GetSubtreesReq *message)
-+{
-+  assert(message->base.descriptor == &sr__get_subtrees_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__get_subtrees_req__pack
-+                     (const Sr__GetSubtreesReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__get_subtrees_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__get_subtrees_req__pack_to_buffer
-+                     (const Sr__GetSubtreesReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__get_subtrees_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__GetSubtreesReq *
-+       sr__get_subtrees_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__GetSubtreesReq *)
-+     protobuf_c_message_unpack (&sr__get_subtrees_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__get_subtrees_req__free_unpacked
-+                     (Sr__GetSubtreesReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__get_subtrees_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__get_subtrees_resp__init
-+                     (Sr__GetSubtreesResp         *message)
-+{
-+  static Sr__GetSubtreesResp init_value = SR__GET_SUBTREES_RESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__get_subtrees_resp__get_packed_size
-+                     (const Sr__GetSubtreesResp *message)
-+{
-+  assert(message->base.descriptor == &sr__get_subtrees_resp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__get_subtrees_resp__pack
-+                     (const Sr__GetSubtreesResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__get_subtrees_resp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__get_subtrees_resp__pack_to_buffer
-+                     (const Sr__GetSubtreesResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__get_subtrees_resp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__GetSubtreesResp *
-+       sr__get_subtrees_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__GetSubtreesResp *)
-+     protobuf_c_message_unpack (&sr__get_subtrees_resp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__get_subtrees_resp__free_unpacked
-+                     (Sr__GetSubtreesResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__get_subtrees_resp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__get_subtree_chunk_req__init
-+                     (Sr__GetSubtreeChunkReq         *message)
-+{
-+  static Sr__GetSubtreeChunkReq init_value = SR__GET_SUBTREE_CHUNK_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__get_subtree_chunk_req__get_packed_size
-+                     (const Sr__GetSubtreeChunkReq *message)
-+{
-+  assert(message->base.descriptor == &sr__get_subtree_chunk_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__get_subtree_chunk_req__pack
-+                     (const Sr__GetSubtreeChunkReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__get_subtree_chunk_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__get_subtree_chunk_req__pack_to_buffer
-+                     (const Sr__GetSubtreeChunkReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__get_subtree_chunk_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__GetSubtreeChunkReq *
-+       sr__get_subtree_chunk_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__GetSubtreeChunkReq *)
-+     protobuf_c_message_unpack (&sr__get_subtree_chunk_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__get_subtree_chunk_req__free_unpacked
-+                     (Sr__GetSubtreeChunkReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__get_subtree_chunk_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__get_subtree_chunk_resp__init
-+                     (Sr__GetSubtreeChunkResp         *message)
-+{
-+  static Sr__GetSubtreeChunkResp init_value = SR__GET_SUBTREE_CHUNK_RESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__get_subtree_chunk_resp__get_packed_size
-+                     (const Sr__GetSubtreeChunkResp *message)
-+{
-+  assert(message->base.descriptor == &sr__get_subtree_chunk_resp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__get_subtree_chunk_resp__pack
-+                     (const Sr__GetSubtreeChunkResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__get_subtree_chunk_resp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__get_subtree_chunk_resp__pack_to_buffer
-+                     (const Sr__GetSubtreeChunkResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__get_subtree_chunk_resp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__GetSubtreeChunkResp *
-+       sr__get_subtree_chunk_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__GetSubtreeChunkResp *)
-+     protobuf_c_message_unpack (&sr__get_subtree_chunk_resp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__get_subtree_chunk_resp__free_unpacked
-+                     (Sr__GetSubtreeChunkResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__get_subtree_chunk_resp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__set_item_req__init
-+                     (Sr__SetItemReq         *message)
-+{
-+  static Sr__SetItemReq init_value = SR__SET_ITEM_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__set_item_req__get_packed_size
-+                     (const Sr__SetItemReq *message)
-+{
-+  assert(message->base.descriptor == &sr__set_item_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__set_item_req__pack
-+                     (const Sr__SetItemReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__set_item_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__set_item_req__pack_to_buffer
-+                     (const Sr__SetItemReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__set_item_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__SetItemReq *
-+       sr__set_item_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__SetItemReq *)
-+     protobuf_c_message_unpack (&sr__set_item_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__set_item_req__free_unpacked
-+                     (Sr__SetItemReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__set_item_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__set_item_resp__init
-+                     (Sr__SetItemResp         *message)
-+{
-+  static Sr__SetItemResp init_value = SR__SET_ITEM_RESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__set_item_resp__get_packed_size
-+                     (const Sr__SetItemResp *message)
-+{
-+  assert(message->base.descriptor == &sr__set_item_resp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__set_item_resp__pack
-+                     (const Sr__SetItemResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__set_item_resp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__set_item_resp__pack_to_buffer
-+                     (const Sr__SetItemResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__set_item_resp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__SetItemResp *
-+       sr__set_item_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__SetItemResp *)
-+     protobuf_c_message_unpack (&sr__set_item_resp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__set_item_resp__free_unpacked
-+                     (Sr__SetItemResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__set_item_resp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__set_item_str_req__init
-+                     (Sr__SetItemStrReq         *message)
-+{
-+  static Sr__SetItemStrReq init_value = SR__SET_ITEM_STR_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__set_item_str_req__get_packed_size
-+                     (const Sr__SetItemStrReq *message)
-+{
-+  assert(message->base.descriptor == &sr__set_item_str_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__set_item_str_req__pack
-+                     (const Sr__SetItemStrReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__set_item_str_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__set_item_str_req__pack_to_buffer
-+                     (const Sr__SetItemStrReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__set_item_str_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__SetItemStrReq *
-+       sr__set_item_str_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__SetItemStrReq *)
-+     protobuf_c_message_unpack (&sr__set_item_str_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__set_item_str_req__free_unpacked
-+                     (Sr__SetItemStrReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__set_item_str_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__set_item_str_resp__init
-+                     (Sr__SetItemStrResp         *message)
-+{
-+  static Sr__SetItemStrResp init_value = SR__SET_ITEM_STR_RESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__set_item_str_resp__get_packed_size
-+                     (const Sr__SetItemStrResp *message)
-+{
-+  assert(message->base.descriptor == &sr__set_item_str_resp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__set_item_str_resp__pack
-+                     (const Sr__SetItemStrResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__set_item_str_resp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__set_item_str_resp__pack_to_buffer
-+                     (const Sr__SetItemStrResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__set_item_str_resp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__SetItemStrResp *
-+       sr__set_item_str_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__SetItemStrResp *)
-+     protobuf_c_message_unpack (&sr__set_item_str_resp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__set_item_str_resp__free_unpacked
-+                     (Sr__SetItemStrResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__set_item_str_resp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__delete_item_req__init
-+                     (Sr__DeleteItemReq         *message)
-+{
-+  static Sr__DeleteItemReq init_value = SR__DELETE_ITEM_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__delete_item_req__get_packed_size
-+                     (const Sr__DeleteItemReq *message)
-+{
-+  assert(message->base.descriptor == &sr__delete_item_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__delete_item_req__pack
-+                     (const Sr__DeleteItemReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__delete_item_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__delete_item_req__pack_to_buffer
-+                     (const Sr__DeleteItemReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__delete_item_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__DeleteItemReq *
-+       sr__delete_item_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__DeleteItemReq *)
-+     protobuf_c_message_unpack (&sr__delete_item_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__delete_item_req__free_unpacked
-+                     (Sr__DeleteItemReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__delete_item_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__delete_item_resp__init
-+                     (Sr__DeleteItemResp         *message)
-+{
-+  static Sr__DeleteItemResp init_value = SR__DELETE_ITEM_RESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__delete_item_resp__get_packed_size
-+                     (const Sr__DeleteItemResp *message)
-+{
-+  assert(message->base.descriptor == &sr__delete_item_resp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__delete_item_resp__pack
-+                     (const Sr__DeleteItemResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__delete_item_resp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__delete_item_resp__pack_to_buffer
-+                     (const Sr__DeleteItemResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__delete_item_resp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__DeleteItemResp *
-+       sr__delete_item_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__DeleteItemResp *)
-+     protobuf_c_message_unpack (&sr__delete_item_resp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__delete_item_resp__free_unpacked
-+                     (Sr__DeleteItemResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__delete_item_resp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__move_item_req__init
-+                     (Sr__MoveItemReq         *message)
-+{
-+  static Sr__MoveItemReq init_value = SR__MOVE_ITEM_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__move_item_req__get_packed_size
-+                     (const Sr__MoveItemReq *message)
-+{
-+  assert(message->base.descriptor == &sr__move_item_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__move_item_req__pack
-+                     (const Sr__MoveItemReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__move_item_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__move_item_req__pack_to_buffer
-+                     (const Sr__MoveItemReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__move_item_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__MoveItemReq *
-+       sr__move_item_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__MoveItemReq *)
-+     protobuf_c_message_unpack (&sr__move_item_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__move_item_req__free_unpacked
-+                     (Sr__MoveItemReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__move_item_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__move_item_resp__init
-+                     (Sr__MoveItemResp         *message)
-+{
-+  static Sr__MoveItemResp init_value = SR__MOVE_ITEM_RESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__move_item_resp__get_packed_size
-+                     (const Sr__MoveItemResp *message)
-+{
-+  assert(message->base.descriptor == &sr__move_item_resp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__move_item_resp__pack
-+                     (const Sr__MoveItemResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__move_item_resp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__move_item_resp__pack_to_buffer
-+                     (const Sr__MoveItemResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__move_item_resp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__MoveItemResp *
-+       sr__move_item_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__MoveItemResp *)
-+     protobuf_c_message_unpack (&sr__move_item_resp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__move_item_resp__free_unpacked
-+                     (Sr__MoveItemResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__move_item_resp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__validate_req__init
-+                     (Sr__ValidateReq         *message)
-+{
-+  static Sr__ValidateReq init_value = SR__VALIDATE_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__validate_req__get_packed_size
-+                     (const Sr__ValidateReq *message)
-+{
-+  assert(message->base.descriptor == &sr__validate_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__validate_req__pack
-+                     (const Sr__ValidateReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__validate_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__validate_req__pack_to_buffer
-+                     (const Sr__ValidateReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__validate_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__ValidateReq *
-+       sr__validate_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__ValidateReq *)
-+     protobuf_c_message_unpack (&sr__validate_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__validate_req__free_unpacked
-+                     (Sr__ValidateReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__validate_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__validate_resp__init
-+                     (Sr__ValidateResp         *message)
-+{
-+  static Sr__ValidateResp init_value = SR__VALIDATE_RESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__validate_resp__get_packed_size
-+                     (const Sr__ValidateResp *message)
-+{
-+  assert(message->base.descriptor == &sr__validate_resp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__validate_resp__pack
-+                     (const Sr__ValidateResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__validate_resp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__validate_resp__pack_to_buffer
-+                     (const Sr__ValidateResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__validate_resp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__ValidateResp *
-+       sr__validate_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__ValidateResp *)
-+     protobuf_c_message_unpack (&sr__validate_resp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__validate_resp__free_unpacked
-+                     (Sr__ValidateResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__validate_resp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__commit_req__init
-+                     (Sr__CommitReq         *message)
-+{
-+  static Sr__CommitReq init_value = SR__COMMIT_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__commit_req__get_packed_size
-+                     (const Sr__CommitReq *message)
-+{
-+  assert(message->base.descriptor == &sr__commit_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__commit_req__pack
-+                     (const Sr__CommitReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__commit_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__commit_req__pack_to_buffer
-+                     (const Sr__CommitReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__commit_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__CommitReq *
-+       sr__commit_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__CommitReq *)
-+     protobuf_c_message_unpack (&sr__commit_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__commit_req__free_unpacked
-+                     (Sr__CommitReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__commit_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__commit_resp__init
-+                     (Sr__CommitResp         *message)
-+{
-+  static Sr__CommitResp init_value = SR__COMMIT_RESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__commit_resp__get_packed_size
-+                     (const Sr__CommitResp *message)
-+{
-+  assert(message->base.descriptor == &sr__commit_resp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__commit_resp__pack
-+                     (const Sr__CommitResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__commit_resp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__commit_resp__pack_to_buffer
-+                     (const Sr__CommitResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__commit_resp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__CommitResp *
-+       sr__commit_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__CommitResp *)
-+     protobuf_c_message_unpack (&sr__commit_resp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__commit_resp__free_unpacked
-+                     (Sr__CommitResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__commit_resp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__discard_changes_req__init
-+                     (Sr__DiscardChangesReq         *message)
-+{
-+  static Sr__DiscardChangesReq init_value = SR__DISCARD_CHANGES_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__discard_changes_req__get_packed_size
-+                     (const Sr__DiscardChangesReq *message)
-+{
-+  assert(message->base.descriptor == &sr__discard_changes_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__discard_changes_req__pack
-+                     (const Sr__DiscardChangesReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__discard_changes_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__discard_changes_req__pack_to_buffer
-+                     (const Sr__DiscardChangesReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__discard_changes_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__DiscardChangesReq *
-+       sr__discard_changes_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__DiscardChangesReq *)
-+     protobuf_c_message_unpack (&sr__discard_changes_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__discard_changes_req__free_unpacked
-+                     (Sr__DiscardChangesReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__discard_changes_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__discard_changes_resp__init
-+                     (Sr__DiscardChangesResp         *message)
-+{
-+  static Sr__DiscardChangesResp init_value = SR__DISCARD_CHANGES_RESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__discard_changes_resp__get_packed_size
-+                     (const Sr__DiscardChangesResp *message)
-+{
-+  assert(message->base.descriptor == &sr__discard_changes_resp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__discard_changes_resp__pack
-+                     (const Sr__DiscardChangesResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__discard_changes_resp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__discard_changes_resp__pack_to_buffer
-+                     (const Sr__DiscardChangesResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__discard_changes_resp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__DiscardChangesResp *
-+       sr__discard_changes_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__DiscardChangesResp *)
-+     protobuf_c_message_unpack (&sr__discard_changes_resp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__discard_changes_resp__free_unpacked
-+                     (Sr__DiscardChangesResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__discard_changes_resp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__copy_config_req__init
-+                     (Sr__CopyConfigReq         *message)
-+{
-+  static Sr__CopyConfigReq init_value = SR__COPY_CONFIG_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__copy_config_req__get_packed_size
-+                     (const Sr__CopyConfigReq *message)
-+{
-+  assert(message->base.descriptor == &sr__copy_config_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__copy_config_req__pack
-+                     (const Sr__CopyConfigReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__copy_config_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__copy_config_req__pack_to_buffer
-+                     (const Sr__CopyConfigReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__copy_config_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__CopyConfigReq *
-+       sr__copy_config_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__CopyConfigReq *)
-+     protobuf_c_message_unpack (&sr__copy_config_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__copy_config_req__free_unpacked
-+                     (Sr__CopyConfigReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__copy_config_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__copy_config_resp__init
-+                     (Sr__CopyConfigResp         *message)
-+{
-+  static Sr__CopyConfigResp init_value = SR__COPY_CONFIG_RESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__copy_config_resp__get_packed_size
-+                     (const Sr__CopyConfigResp *message)
-+{
-+  assert(message->base.descriptor == &sr__copy_config_resp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__copy_config_resp__pack
-+                     (const Sr__CopyConfigResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__copy_config_resp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__copy_config_resp__pack_to_buffer
-+                     (const Sr__CopyConfigResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__copy_config_resp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__CopyConfigResp *
-+       sr__copy_config_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__CopyConfigResp *)
-+     protobuf_c_message_unpack (&sr__copy_config_resp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__copy_config_resp__free_unpacked
-+                     (Sr__CopyConfigResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__copy_config_resp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__lock_req__init
-+                     (Sr__LockReq         *message)
-+{
-+  static Sr__LockReq init_value = SR__LOCK_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__lock_req__get_packed_size
-+                     (const Sr__LockReq *message)
-+{
-+  assert(message->base.descriptor == &sr__lock_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__lock_req__pack
-+                     (const Sr__LockReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__lock_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__lock_req__pack_to_buffer
-+                     (const Sr__LockReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__lock_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__LockReq *
-+       sr__lock_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__LockReq *)
-+     protobuf_c_message_unpack (&sr__lock_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__lock_req__free_unpacked
-+                     (Sr__LockReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__lock_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__lock_resp__init
-+                     (Sr__LockResp         *message)
-+{
-+  static Sr__LockResp init_value = SR__LOCK_RESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__lock_resp__get_packed_size
-+                     (const Sr__LockResp *message)
-+{
-+  assert(message->base.descriptor == &sr__lock_resp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__lock_resp__pack
-+                     (const Sr__LockResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__lock_resp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__lock_resp__pack_to_buffer
-+                     (const Sr__LockResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__lock_resp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__LockResp *
-+       sr__lock_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__LockResp *)
-+     protobuf_c_message_unpack (&sr__lock_resp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__lock_resp__free_unpacked
-+                     (Sr__LockResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__lock_resp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__unlock_req__init
-+                     (Sr__UnlockReq         *message)
-+{
-+  static Sr__UnlockReq init_value = SR__UNLOCK_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__unlock_req__get_packed_size
-+                     (const Sr__UnlockReq *message)
-+{
-+  assert(message->base.descriptor == &sr__unlock_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__unlock_req__pack
-+                     (const Sr__UnlockReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__unlock_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__unlock_req__pack_to_buffer
-+                     (const Sr__UnlockReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__unlock_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__UnlockReq *
-+       sr__unlock_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__UnlockReq *)
-+     protobuf_c_message_unpack (&sr__unlock_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__unlock_req__free_unpacked
-+                     (Sr__UnlockReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__unlock_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__unlock_resp__init
-+                     (Sr__UnlockResp         *message)
-+{
-+  static Sr__UnlockResp init_value = SR__UNLOCK_RESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__unlock_resp__get_packed_size
-+                     (const Sr__UnlockResp *message)
-+{
-+  assert(message->base.descriptor == &sr__unlock_resp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__unlock_resp__pack
-+                     (const Sr__UnlockResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__unlock_resp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__unlock_resp__pack_to_buffer
-+                     (const Sr__UnlockResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__unlock_resp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__UnlockResp *
-+       sr__unlock_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__UnlockResp *)
-+     protobuf_c_message_unpack (&sr__unlock_resp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__unlock_resp__free_unpacked
-+                     (Sr__UnlockResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__unlock_resp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__subscribe_req__init
-+                     (Sr__SubscribeReq         *message)
-+{
-+  static Sr__SubscribeReq init_value = SR__SUBSCRIBE_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__subscribe_req__get_packed_size
-+                     (const Sr__SubscribeReq *message)
-+{
-+  assert(message->base.descriptor == &sr__subscribe_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__subscribe_req__pack
-+                     (const Sr__SubscribeReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__subscribe_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__subscribe_req__pack_to_buffer
-+                     (const Sr__SubscribeReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__subscribe_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__SubscribeReq *
-+       sr__subscribe_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__SubscribeReq *)
-+     protobuf_c_message_unpack (&sr__subscribe_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__subscribe_req__free_unpacked
-+                     (Sr__SubscribeReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__subscribe_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__subscribe_resp__init
-+                     (Sr__SubscribeResp         *message)
-+{
-+  static Sr__SubscribeResp init_value = SR__SUBSCRIBE_RESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__subscribe_resp__get_packed_size
-+                     (const Sr__SubscribeResp *message)
-+{
-+  assert(message->base.descriptor == &sr__subscribe_resp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__subscribe_resp__pack
-+                     (const Sr__SubscribeResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__subscribe_resp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__subscribe_resp__pack_to_buffer
-+                     (const Sr__SubscribeResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__subscribe_resp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__SubscribeResp *
-+       sr__subscribe_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__SubscribeResp *)
-+     protobuf_c_message_unpack (&sr__subscribe_resp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__subscribe_resp__free_unpacked
-+                     (Sr__SubscribeResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__subscribe_resp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__unsubscribe_req__init
-+                     (Sr__UnsubscribeReq         *message)
-+{
-+  static Sr__UnsubscribeReq init_value = SR__UNSUBSCRIBE_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__unsubscribe_req__get_packed_size
-+                     (const Sr__UnsubscribeReq *message)
-+{
-+  assert(message->base.descriptor == &sr__unsubscribe_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__unsubscribe_req__pack
-+                     (const Sr__UnsubscribeReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__unsubscribe_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__unsubscribe_req__pack_to_buffer
-+                     (const Sr__UnsubscribeReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__unsubscribe_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__UnsubscribeReq *
-+       sr__unsubscribe_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__UnsubscribeReq *)
-+     protobuf_c_message_unpack (&sr__unsubscribe_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__unsubscribe_req__free_unpacked
-+                     (Sr__UnsubscribeReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__unsubscribe_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__unsubscribe_resp__init
-+                     (Sr__UnsubscribeResp         *message)
-+{
-+  static Sr__UnsubscribeResp init_value = SR__UNSUBSCRIBE_RESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__unsubscribe_resp__get_packed_size
-+                     (const Sr__UnsubscribeResp *message)
-+{
-+  assert(message->base.descriptor == &sr__unsubscribe_resp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__unsubscribe_resp__pack
-+                     (const Sr__UnsubscribeResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__unsubscribe_resp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__unsubscribe_resp__pack_to_buffer
-+                     (const Sr__UnsubscribeResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__unsubscribe_resp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__UnsubscribeResp *
-+       sr__unsubscribe_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__UnsubscribeResp *)
-+     protobuf_c_message_unpack (&sr__unsubscribe_resp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__unsubscribe_resp__free_unpacked
-+                     (Sr__UnsubscribeResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__unsubscribe_resp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__check_enabled_running_req__init
-+                     (Sr__CheckEnabledRunningReq         *message)
-+{
-+  static Sr__CheckEnabledRunningReq init_value = SR__CHECK_ENABLED_RUNNING_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__check_enabled_running_req__get_packed_size
-+                     (const Sr__CheckEnabledRunningReq *message)
-+{
-+  assert(message->base.descriptor == &sr__check_enabled_running_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__check_enabled_running_req__pack
-+                     (const Sr__CheckEnabledRunningReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__check_enabled_running_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__check_enabled_running_req__pack_to_buffer
-+                     (const Sr__CheckEnabledRunningReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__check_enabled_running_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__CheckEnabledRunningReq *
-+       sr__check_enabled_running_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__CheckEnabledRunningReq *)
-+     protobuf_c_message_unpack (&sr__check_enabled_running_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__check_enabled_running_req__free_unpacked
-+                     (Sr__CheckEnabledRunningReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__check_enabled_running_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__check_enabled_running_resp__init
-+                     (Sr__CheckEnabledRunningResp         *message)
-+{
-+  static Sr__CheckEnabledRunningResp init_value = SR__CHECK_ENABLED_RUNNING_RESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__check_enabled_running_resp__get_packed_size
-+                     (const Sr__CheckEnabledRunningResp *message)
-+{
-+  assert(message->base.descriptor == &sr__check_enabled_running_resp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__check_enabled_running_resp__pack
-+                     (const Sr__CheckEnabledRunningResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__check_enabled_running_resp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__check_enabled_running_resp__pack_to_buffer
-+                     (const Sr__CheckEnabledRunningResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__check_enabled_running_resp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__CheckEnabledRunningResp *
-+       sr__check_enabled_running_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__CheckEnabledRunningResp *)
-+     protobuf_c_message_unpack (&sr__check_enabled_running_resp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__check_enabled_running_resp__free_unpacked
-+                     (Sr__CheckEnabledRunningResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__check_enabled_running_resp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__module_install_notification__init
-+                     (Sr__ModuleInstallNotification         *message)
-+{
-+  static Sr__ModuleInstallNotification init_value = SR__MODULE_INSTALL_NOTIFICATION__INIT;
-+  *message = init_value;
-+}
-+size_t sr__module_install_notification__get_packed_size
-+                     (const Sr__ModuleInstallNotification *message)
-+{
-+  assert(message->base.descriptor == &sr__module_install_notification__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__module_install_notification__pack
-+                     (const Sr__ModuleInstallNotification *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__module_install_notification__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__module_install_notification__pack_to_buffer
-+                     (const Sr__ModuleInstallNotification *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__module_install_notification__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__ModuleInstallNotification *
-+       sr__module_install_notification__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__ModuleInstallNotification *)
-+     protobuf_c_message_unpack (&sr__module_install_notification__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__module_install_notification__free_unpacked
-+                     (Sr__ModuleInstallNotification *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__module_install_notification__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__feature_enable_notification__init
-+                     (Sr__FeatureEnableNotification         *message)
-+{
-+  static Sr__FeatureEnableNotification init_value = SR__FEATURE_ENABLE_NOTIFICATION__INIT;
-+  *message = init_value;
-+}
-+size_t sr__feature_enable_notification__get_packed_size
-+                     (const Sr__FeatureEnableNotification *message)
-+{
-+  assert(message->base.descriptor == &sr__feature_enable_notification__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__feature_enable_notification__pack
-+                     (const Sr__FeatureEnableNotification *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__feature_enable_notification__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__feature_enable_notification__pack_to_buffer
-+                     (const Sr__FeatureEnableNotification *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__feature_enable_notification__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__FeatureEnableNotification *
-+       sr__feature_enable_notification__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__FeatureEnableNotification *)
-+     protobuf_c_message_unpack (&sr__feature_enable_notification__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__feature_enable_notification__free_unpacked
-+                     (Sr__FeatureEnableNotification *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__feature_enable_notification__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__module_change_notification__init
-+                     (Sr__ModuleChangeNotification         *message)
-+{
-+  static Sr__ModuleChangeNotification init_value = SR__MODULE_CHANGE_NOTIFICATION__INIT;
-+  *message = init_value;
-+}
-+size_t sr__module_change_notification__get_packed_size
-+                     (const Sr__ModuleChangeNotification *message)
-+{
-+  assert(message->base.descriptor == &sr__module_change_notification__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__module_change_notification__pack
-+                     (const Sr__ModuleChangeNotification *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__module_change_notification__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__module_change_notification__pack_to_buffer
-+                     (const Sr__ModuleChangeNotification *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__module_change_notification__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__ModuleChangeNotification *
-+       sr__module_change_notification__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__ModuleChangeNotification *)
-+     protobuf_c_message_unpack (&sr__module_change_notification__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__module_change_notification__free_unpacked
-+                     (Sr__ModuleChangeNotification *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__module_change_notification__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__subtree_change_notification__init
-+                     (Sr__SubtreeChangeNotification         *message)
-+{
-+  static Sr__SubtreeChangeNotification init_value = SR__SUBTREE_CHANGE_NOTIFICATION__INIT;
-+  *message = init_value;
-+}
-+size_t sr__subtree_change_notification__get_packed_size
-+                     (const Sr__SubtreeChangeNotification *message)
-+{
-+  assert(message->base.descriptor == &sr__subtree_change_notification__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__subtree_change_notification__pack
-+                     (const Sr__SubtreeChangeNotification *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__subtree_change_notification__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__subtree_change_notification__pack_to_buffer
-+                     (const Sr__SubtreeChangeNotification *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__subtree_change_notification__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__SubtreeChangeNotification *
-+       sr__subtree_change_notification__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__SubtreeChangeNotification *)
-+     protobuf_c_message_unpack (&sr__subtree_change_notification__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__subtree_change_notification__free_unpacked
-+                     (Sr__SubtreeChangeNotification *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__subtree_change_notification__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__change__init
-+                     (Sr__Change         *message)
-+{
-+  static Sr__Change init_value = SR__CHANGE__INIT;
-+  *message = init_value;
-+}
-+size_t sr__change__get_packed_size
-+                     (const Sr__Change *message)
-+{
-+  assert(message->base.descriptor == &sr__change__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__change__pack
-+                     (const Sr__Change *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__change__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__change__pack_to_buffer
-+                     (const Sr__Change *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__change__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__Change *
-+       sr__change__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__Change *)
-+     protobuf_c_message_unpack (&sr__change__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__change__free_unpacked
-+                     (Sr__Change *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__change__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__get_changes_req__init
-+                     (Sr__GetChangesReq         *message)
-+{
-+  static Sr__GetChangesReq init_value = SR__GET_CHANGES_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__get_changes_req__get_packed_size
-+                     (const Sr__GetChangesReq *message)
-+{
-+  assert(message->base.descriptor == &sr__get_changes_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__get_changes_req__pack
-+                     (const Sr__GetChangesReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__get_changes_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__get_changes_req__pack_to_buffer
-+                     (const Sr__GetChangesReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__get_changes_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__GetChangesReq *
-+       sr__get_changes_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__GetChangesReq *)
-+     protobuf_c_message_unpack (&sr__get_changes_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__get_changes_req__free_unpacked
-+                     (Sr__GetChangesReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__get_changes_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__get_changes_resp__init
-+                     (Sr__GetChangesResp         *message)
-+{
-+  static Sr__GetChangesResp init_value = SR__GET_CHANGES_RESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__get_changes_resp__get_packed_size
-+                     (const Sr__GetChangesResp *message)
-+{
-+  assert(message->base.descriptor == &sr__get_changes_resp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__get_changes_resp__pack
-+                     (const Sr__GetChangesResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__get_changes_resp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__get_changes_resp__pack_to_buffer
-+                     (const Sr__GetChangesResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__get_changes_resp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__GetChangesResp *
-+       sr__get_changes_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__GetChangesResp *)
-+     protobuf_c_message_unpack (&sr__get_changes_resp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__get_changes_resp__free_unpacked
-+                     (Sr__GetChangesResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__get_changes_resp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__check_exec_perm_req__init
-+                     (Sr__CheckExecPermReq         *message)
-+{
-+  static Sr__CheckExecPermReq init_value = SR__CHECK_EXEC_PERM_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__check_exec_perm_req__get_packed_size
-+                     (const Sr__CheckExecPermReq *message)
-+{
-+  assert(message->base.descriptor == &sr__check_exec_perm_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__check_exec_perm_req__pack
-+                     (const Sr__CheckExecPermReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__check_exec_perm_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__check_exec_perm_req__pack_to_buffer
-+                     (const Sr__CheckExecPermReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__check_exec_perm_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__CheckExecPermReq *
-+       sr__check_exec_perm_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__CheckExecPermReq *)
-+     protobuf_c_message_unpack (&sr__check_exec_perm_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__check_exec_perm_req__free_unpacked
-+                     (Sr__CheckExecPermReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__check_exec_perm_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__check_exec_perm_resp__init
-+                     (Sr__CheckExecPermResp         *message)
-+{
-+  static Sr__CheckExecPermResp init_value = SR__CHECK_EXEC_PERM_RESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__check_exec_perm_resp__get_packed_size
-+                     (const Sr__CheckExecPermResp *message)
-+{
-+  assert(message->base.descriptor == &sr__check_exec_perm_resp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__check_exec_perm_resp__pack
-+                     (const Sr__CheckExecPermResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__check_exec_perm_resp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__check_exec_perm_resp__pack_to_buffer
-+                     (const Sr__CheckExecPermResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__check_exec_perm_resp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__CheckExecPermResp *
-+       sr__check_exec_perm_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__CheckExecPermResp *)
-+     protobuf_c_message_unpack (&sr__check_exec_perm_resp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__check_exec_perm_resp__free_unpacked
-+                     (Sr__CheckExecPermResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__check_exec_perm_resp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__rpcreq__init
-+                     (Sr__RPCReq         *message)
-+{
-+  static Sr__RPCReq init_value = SR__RPCREQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__rpcreq__get_packed_size
-+                     (const Sr__RPCReq *message)
-+{
-+  assert(message->base.descriptor == &sr__rpcreq__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__rpcreq__pack
-+                     (const Sr__RPCReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__rpcreq__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__rpcreq__pack_to_buffer
-+                     (const Sr__RPCReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__rpcreq__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__RPCReq *
-+       sr__rpcreq__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__RPCReq *)
-+     protobuf_c_message_unpack (&sr__rpcreq__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__rpcreq__free_unpacked
-+                     (Sr__RPCReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__rpcreq__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__rpcresp__init
-+                     (Sr__RPCResp         *message)
-+{
-+  static Sr__RPCResp init_value = SR__RPCRESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__rpcresp__get_packed_size
-+                     (const Sr__RPCResp *message)
-+{
-+  assert(message->base.descriptor == &sr__rpcresp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__rpcresp__pack
-+                     (const Sr__RPCResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__rpcresp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__rpcresp__pack_to_buffer
-+                     (const Sr__RPCResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__rpcresp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__RPCResp *
-+       sr__rpcresp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__RPCResp *)
-+     protobuf_c_message_unpack (&sr__rpcresp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__rpcresp__free_unpacked
-+                     (Sr__RPCResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__rpcresp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__event_notif_req__init
-+                     (Sr__EventNotifReq         *message)
-+{
-+  static Sr__EventNotifReq init_value = SR__EVENT_NOTIF_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__event_notif_req__get_packed_size
-+                     (const Sr__EventNotifReq *message)
-+{
-+  assert(message->base.descriptor == &sr__event_notif_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__event_notif_req__pack
-+                     (const Sr__EventNotifReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__event_notif_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__event_notif_req__pack_to_buffer
-+                     (const Sr__EventNotifReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__event_notif_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__EventNotifReq *
-+       sr__event_notif_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__EventNotifReq *)
-+     protobuf_c_message_unpack (&sr__event_notif_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__event_notif_req__free_unpacked
-+                     (Sr__EventNotifReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__event_notif_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__event_notif_resp__init
-+                     (Sr__EventNotifResp         *message)
-+{
-+  static Sr__EventNotifResp init_value = SR__EVENT_NOTIF_RESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__event_notif_resp__get_packed_size
-+                     (const Sr__EventNotifResp *message)
-+{
-+  assert(message->base.descriptor == &sr__event_notif_resp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__event_notif_resp__pack
-+                     (const Sr__EventNotifResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__event_notif_resp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__event_notif_resp__pack_to_buffer
-+                     (const Sr__EventNotifResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__event_notif_resp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__EventNotifResp *
-+       sr__event_notif_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__EventNotifResp *)
-+     protobuf_c_message_unpack (&sr__event_notif_resp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__event_notif_resp__free_unpacked
-+                     (Sr__EventNotifResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__event_notif_resp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__event_notif_replay_req__init
-+                     (Sr__EventNotifReplayReq         *message)
-+{
-+  static Sr__EventNotifReplayReq init_value = SR__EVENT_NOTIF_REPLAY_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__event_notif_replay_req__get_packed_size
-+                     (const Sr__EventNotifReplayReq *message)
-+{
-+  assert(message->base.descriptor == &sr__event_notif_replay_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__event_notif_replay_req__pack
-+                     (const Sr__EventNotifReplayReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__event_notif_replay_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__event_notif_replay_req__pack_to_buffer
-+                     (const Sr__EventNotifReplayReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__event_notif_replay_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__EventNotifReplayReq *
-+       sr__event_notif_replay_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__EventNotifReplayReq *)
-+     protobuf_c_message_unpack (&sr__event_notif_replay_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__event_notif_replay_req__free_unpacked
-+                     (Sr__EventNotifReplayReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__event_notif_replay_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__event_notif_replay_resp__init
-+                     (Sr__EventNotifReplayResp         *message)
-+{
-+  static Sr__EventNotifReplayResp init_value = SR__EVENT_NOTIF_REPLAY_RESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__event_notif_replay_resp__get_packed_size
-+                     (const Sr__EventNotifReplayResp *message)
-+{
-+  assert(message->base.descriptor == &sr__event_notif_replay_resp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__event_notif_replay_resp__pack
-+                     (const Sr__EventNotifReplayResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__event_notif_replay_resp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__event_notif_replay_resp__pack_to_buffer
-+                     (const Sr__EventNotifReplayResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__event_notif_replay_resp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__EventNotifReplayResp *
-+       sr__event_notif_replay_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__EventNotifReplayResp *)
-+     protobuf_c_message_unpack (&sr__event_notif_replay_resp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__event_notif_replay_resp__free_unpacked
-+                     (Sr__EventNotifReplayResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__event_notif_replay_resp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__data_provide_req__init
-+                     (Sr__DataProvideReq         *message)
-+{
-+  static Sr__DataProvideReq init_value = SR__DATA_PROVIDE_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__data_provide_req__get_packed_size
-+                     (const Sr__DataProvideReq *message)
-+{
-+  assert(message->base.descriptor == &sr__data_provide_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__data_provide_req__pack
-+                     (const Sr__DataProvideReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__data_provide_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__data_provide_req__pack_to_buffer
-+                     (const Sr__DataProvideReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__data_provide_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__DataProvideReq *
-+       sr__data_provide_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__DataProvideReq *)
-+     protobuf_c_message_unpack (&sr__data_provide_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__data_provide_req__free_unpacked
-+                     (Sr__DataProvideReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__data_provide_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__data_provide_resp__init
-+                     (Sr__DataProvideResp         *message)
-+{
-+  static Sr__DataProvideResp init_value = SR__DATA_PROVIDE_RESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__data_provide_resp__get_packed_size
-+                     (const Sr__DataProvideResp *message)
-+{
-+  assert(message->base.descriptor == &sr__data_provide_resp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__data_provide_resp__pack
-+                     (const Sr__DataProvideResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__data_provide_resp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__data_provide_resp__pack_to_buffer
-+                     (const Sr__DataProvideResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__data_provide_resp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__DataProvideResp *
-+       sr__data_provide_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__DataProvideResp *)
-+     protobuf_c_message_unpack (&sr__data_provide_resp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__data_provide_resp__free_unpacked
-+                     (Sr__DataProvideResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__data_provide_resp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__module_install_req__init
-+                     (Sr__ModuleInstallReq         *message)
-+{
-+  static Sr__ModuleInstallReq init_value = SR__MODULE_INSTALL_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__module_install_req__get_packed_size
-+                     (const Sr__ModuleInstallReq *message)
-+{
-+  assert(message->base.descriptor == &sr__module_install_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__module_install_req__pack
-+                     (const Sr__ModuleInstallReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__module_install_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__module_install_req__pack_to_buffer
-+                     (const Sr__ModuleInstallReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__module_install_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__ModuleInstallReq *
-+       sr__module_install_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__ModuleInstallReq *)
-+     protobuf_c_message_unpack (&sr__module_install_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__module_install_req__free_unpacked
-+                     (Sr__ModuleInstallReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__module_install_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__module_install_resp__init
-+                     (Sr__ModuleInstallResp         *message)
-+{
-+  static Sr__ModuleInstallResp init_value = SR__MODULE_INSTALL_RESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__module_install_resp__get_packed_size
-+                     (const Sr__ModuleInstallResp *message)
-+{
-+  assert(message->base.descriptor == &sr__module_install_resp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__module_install_resp__pack
-+                     (const Sr__ModuleInstallResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__module_install_resp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__module_install_resp__pack_to_buffer
-+                     (const Sr__ModuleInstallResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__module_install_resp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__ModuleInstallResp *
-+       sr__module_install_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__ModuleInstallResp *)
-+     protobuf_c_message_unpack (&sr__module_install_resp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__module_install_resp__free_unpacked
-+                     (Sr__ModuleInstallResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__module_install_resp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__feature_enable_req__init
-+                     (Sr__FeatureEnableReq         *message)
-+{
-+  static Sr__FeatureEnableReq init_value = SR__FEATURE_ENABLE_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__feature_enable_req__get_packed_size
-+                     (const Sr__FeatureEnableReq *message)
-+{
-+  assert(message->base.descriptor == &sr__feature_enable_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__feature_enable_req__pack
-+                     (const Sr__FeatureEnableReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__feature_enable_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__feature_enable_req__pack_to_buffer
-+                     (const Sr__FeatureEnableReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__feature_enable_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__FeatureEnableReq *
-+       sr__feature_enable_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__FeatureEnableReq *)
-+     protobuf_c_message_unpack (&sr__feature_enable_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__feature_enable_req__free_unpacked
-+                     (Sr__FeatureEnableReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__feature_enable_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__feature_enable_resp__init
-+                     (Sr__FeatureEnableResp         *message)
-+{
-+  static Sr__FeatureEnableResp init_value = SR__FEATURE_ENABLE_RESP__INIT;
-+  *message = init_value;
-+}
-+size_t sr__feature_enable_resp__get_packed_size
-+                     (const Sr__FeatureEnableResp *message)
-+{
-+  assert(message->base.descriptor == &sr__feature_enable_resp__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__feature_enable_resp__pack
-+                     (const Sr__FeatureEnableResp *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__feature_enable_resp__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__feature_enable_resp__pack_to_buffer
-+                     (const Sr__FeatureEnableResp *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__feature_enable_resp__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__FeatureEnableResp *
-+       sr__feature_enable_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__FeatureEnableResp *)
-+     protobuf_c_message_unpack (&sr__feature_enable_resp__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__feature_enable_resp__free_unpacked
-+                     (Sr__FeatureEnableResp *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__feature_enable_resp__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__unsubscribe_destination_req__init
-+                     (Sr__UnsubscribeDestinationReq         *message)
-+{
-+  static Sr__UnsubscribeDestinationReq init_value = SR__UNSUBSCRIBE_DESTINATION_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__unsubscribe_destination_req__get_packed_size
-+                     (const Sr__UnsubscribeDestinationReq *message)
-+{
-+  assert(message->base.descriptor == &sr__unsubscribe_destination_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__unsubscribe_destination_req__pack
-+                     (const Sr__UnsubscribeDestinationReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__unsubscribe_destination_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__unsubscribe_destination_req__pack_to_buffer
-+                     (const Sr__UnsubscribeDestinationReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__unsubscribe_destination_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__UnsubscribeDestinationReq *
-+       sr__unsubscribe_destination_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__UnsubscribeDestinationReq *)
-+     protobuf_c_message_unpack (&sr__unsubscribe_destination_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__unsubscribe_destination_req__free_unpacked
-+                     (Sr__UnsubscribeDestinationReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__unsubscribe_destination_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__commit_timeout_req__init
-+                     (Sr__CommitTimeoutReq         *message)
-+{
-+  static Sr__CommitTimeoutReq init_value = SR__COMMIT_TIMEOUT_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__commit_timeout_req__get_packed_size
-+                     (const Sr__CommitTimeoutReq *message)
-+{
-+  assert(message->base.descriptor == &sr__commit_timeout_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__commit_timeout_req__pack
-+                     (const Sr__CommitTimeoutReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__commit_timeout_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__commit_timeout_req__pack_to_buffer
-+                     (const Sr__CommitTimeoutReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__commit_timeout_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__CommitTimeoutReq *
-+       sr__commit_timeout_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__CommitTimeoutReq *)
-+     protobuf_c_message_unpack (&sr__commit_timeout_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__commit_timeout_req__free_unpacked
-+                     (Sr__CommitTimeoutReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__commit_timeout_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__oper_data_timeout_req__init
-+                     (Sr__OperDataTimeoutReq         *message)
-+{
-+  static Sr__OperDataTimeoutReq init_value = SR__OPER_DATA_TIMEOUT_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__oper_data_timeout_req__get_packed_size
-+                     (const Sr__OperDataTimeoutReq *message)
-+{
-+  assert(message->base.descriptor == &sr__oper_data_timeout_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__oper_data_timeout_req__pack
-+                     (const Sr__OperDataTimeoutReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__oper_data_timeout_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__oper_data_timeout_req__pack_to_buffer
-+                     (const Sr__OperDataTimeoutReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__oper_data_timeout_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__OperDataTimeoutReq *
-+       sr__oper_data_timeout_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__OperDataTimeoutReq *)
-+     protobuf_c_message_unpack (&sr__oper_data_timeout_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__oper_data_timeout_req__free_unpacked
-+                     (Sr__OperDataTimeoutReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__oper_data_timeout_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__internal_state_data_req__init
-+                     (Sr__InternalStateDataReq         *message)
-+{
-+  static Sr__InternalStateDataReq init_value = SR__INTERNAL_STATE_DATA_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__internal_state_data_req__get_packed_size
-+                     (const Sr__InternalStateDataReq *message)
-+{
-+  assert(message->base.descriptor == &sr__internal_state_data_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__internal_state_data_req__pack
-+                     (const Sr__InternalStateDataReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__internal_state_data_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__internal_state_data_req__pack_to_buffer
-+                     (const Sr__InternalStateDataReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__internal_state_data_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__InternalStateDataReq *
-+       sr__internal_state_data_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__InternalStateDataReq *)
-+     protobuf_c_message_unpack (&sr__internal_state_data_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__internal_state_data_req__free_unpacked
-+                     (Sr__InternalStateDataReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__internal_state_data_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__notif_store_cleanup_req__init
-+                     (Sr__NotifStoreCleanupReq         *message)
-+{
-+  static Sr__NotifStoreCleanupReq init_value = SR__NOTIF_STORE_CLEANUP_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__notif_store_cleanup_req__get_packed_size
-+                     (const Sr__NotifStoreCleanupReq *message)
-+{
-+  assert(message->base.descriptor == &sr__notif_store_cleanup_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__notif_store_cleanup_req__pack
-+                     (const Sr__NotifStoreCleanupReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__notif_store_cleanup_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__notif_store_cleanup_req__pack_to_buffer
-+                     (const Sr__NotifStoreCleanupReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__notif_store_cleanup_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__NotifStoreCleanupReq *
-+       sr__notif_store_cleanup_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__NotifStoreCleanupReq *)
-+     protobuf_c_message_unpack (&sr__notif_store_cleanup_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__notif_store_cleanup_req__free_unpacked
-+                     (Sr__NotifStoreCleanupReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__notif_store_cleanup_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__delayed_msg_req__init
-+                     (Sr__DelayedMsgReq         *message)
-+{
-+  static Sr__DelayedMsgReq init_value = SR__DELAYED_MSG_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__delayed_msg_req__get_packed_size
-+                     (const Sr__DelayedMsgReq *message)
-+{
-+  assert(message->base.descriptor == &sr__delayed_msg_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__delayed_msg_req__pack
-+                     (const Sr__DelayedMsgReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__delayed_msg_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__delayed_msg_req__pack_to_buffer
-+                     (const Sr__DelayedMsgReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__delayed_msg_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__DelayedMsgReq *
-+       sr__delayed_msg_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__DelayedMsgReq *)
-+     protobuf_c_message_unpack (&sr__delayed_msg_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__delayed_msg_req__free_unpacked
-+                     (Sr__DelayedMsgReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__delayed_msg_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__nacm_reload_req__init
-+                     (Sr__NacmReloadReq         *message)
-+{
-+  static Sr__NacmReloadReq init_value = SR__NACM_RELOAD_REQ__INIT;
-+  *message = init_value;
-+}
-+size_t sr__nacm_reload_req__get_packed_size
-+                     (const Sr__NacmReloadReq *message)
-+{
-+  assert(message->base.descriptor == &sr__nacm_reload_req__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__nacm_reload_req__pack
-+                     (const Sr__NacmReloadReq *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__nacm_reload_req__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__nacm_reload_req__pack_to_buffer
-+                     (const Sr__NacmReloadReq *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__nacm_reload_req__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__NacmReloadReq *
-+       sr__nacm_reload_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__NacmReloadReq *)
-+     protobuf_c_message_unpack (&sr__nacm_reload_req__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__nacm_reload_req__free_unpacked
-+                     (Sr__NacmReloadReq *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__nacm_reload_req__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__request__init
-+                     (Sr__Request         *message)
-+{
-+  static Sr__Request init_value = SR__REQUEST__INIT;
-+  *message = init_value;
-+}
-+size_t sr__request__get_packed_size
-+                     (const Sr__Request *message)
-+{
-+  assert(message->base.descriptor == &sr__request__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__request__pack
-+                     (const Sr__Request *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__request__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__request__pack_to_buffer
-+                     (const Sr__Request *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__request__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__Request *
-+       sr__request__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__Request *)
-+     protobuf_c_message_unpack (&sr__request__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__request__free_unpacked
-+                     (Sr__Request *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__request__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__response__init
-+                     (Sr__Response         *message)
-+{
-+  static Sr__Response init_value = SR__RESPONSE__INIT;
-+  *message = init_value;
-+}
-+size_t sr__response__get_packed_size
-+                     (const Sr__Response *message)
-+{
-+  assert(message->base.descriptor == &sr__response__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__response__pack
-+                     (const Sr__Response *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__response__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__response__pack_to_buffer
-+                     (const Sr__Response *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__response__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__Response *
-+       sr__response__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__Response *)
-+     protobuf_c_message_unpack (&sr__response__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__response__free_unpacked
-+                     (Sr__Response *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__response__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__notification__init
-+                     (Sr__Notification         *message)
-+{
-+  static Sr__Notification init_value = SR__NOTIFICATION__INIT;
-+  *message = init_value;
-+}
-+size_t sr__notification__get_packed_size
-+                     (const Sr__Notification *message)
-+{
-+  assert(message->base.descriptor == &sr__notification__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__notification__pack
-+                     (const Sr__Notification *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__notification__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__notification__pack_to_buffer
-+                     (const Sr__Notification *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__notification__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__Notification *
-+       sr__notification__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__Notification *)
-+     protobuf_c_message_unpack (&sr__notification__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__notification__free_unpacked
-+                     (Sr__Notification *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__notification__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__notification_ack__init
-+                     (Sr__NotificationAck         *message)
-+{
-+  static Sr__NotificationAck init_value = SR__NOTIFICATION_ACK__INIT;
-+  *message = init_value;
-+}
-+size_t sr__notification_ack__get_packed_size
-+                     (const Sr__NotificationAck *message)
-+{
-+  assert(message->base.descriptor == &sr__notification_ack__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__notification_ack__pack
-+                     (const Sr__NotificationAck *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__notification_ack__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__notification_ack__pack_to_buffer
-+                     (const Sr__NotificationAck *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__notification_ack__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__NotificationAck *
-+       sr__notification_ack__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__NotificationAck *)
-+     protobuf_c_message_unpack (&sr__notification_ack__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__notification_ack__free_unpacked
-+                     (Sr__NotificationAck *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__notification_ack__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__internal_request__init
-+                     (Sr__InternalRequest         *message)
-+{
-+  static Sr__InternalRequest init_value = SR__INTERNAL_REQUEST__INIT;
-+  *message = init_value;
-+}
-+size_t sr__internal_request__get_packed_size
-+                     (const Sr__InternalRequest *message)
-+{
-+  assert(message->base.descriptor == &sr__internal_request__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__internal_request__pack
-+                     (const Sr__InternalRequest *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__internal_request__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__internal_request__pack_to_buffer
-+                     (const Sr__InternalRequest *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__internal_request__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__InternalRequest *
-+       sr__internal_request__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__InternalRequest *)
-+     protobuf_c_message_unpack (&sr__internal_request__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__internal_request__free_unpacked
-+                     (Sr__InternalRequest *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__internal_request__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+void   sr__msg__init
-+                     (Sr__Msg         *message)
-+{
-+  static Sr__Msg init_value = SR__MSG__INIT;
-+  *message = init_value;
-+}
-+size_t sr__msg__get_packed_size
-+                     (const Sr__Msg *message)
-+{
-+  assert(message->base.descriptor == &sr__msg__descriptor);
-+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
-+}
-+size_t sr__msg__pack
-+                     (const Sr__Msg *message,
-+                      uint8_t       *out)
-+{
-+  assert(message->base.descriptor == &sr__msg__descriptor);
-+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
-+}
-+size_t sr__msg__pack_to_buffer
-+                     (const Sr__Msg *message,
-+                      ProtobufCBuffer *buffer)
-+{
-+  assert(message->base.descriptor == &sr__msg__descriptor);
-+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
-+}
-+Sr__Msg *
-+       sr__msg__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data)
-+{
-+  return (Sr__Msg *)
-+     protobuf_c_message_unpack (&sr__msg__descriptor,
-+                                allocator, len, data);
-+}
-+void   sr__msg__free_unpacked
-+                     (Sr__Msg *message,
-+                      ProtobufCAllocator *allocator)
-+{
-+  assert(message->base.descriptor == &sr__msg__descriptor);
-+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
-+}
-+static const ProtobufCEnumValue sr__value__types__enum_values_by_number[22] =
-+{
-+  { "LIST", "SR__VALUE__TYPES__LIST", 1 },
-+  { "CONTAINER", "SR__VALUE__TYPES__CONTAINER", 2 },
-+  { "CONTAINER_PRESENCE", "SR__VALUE__TYPES__CONTAINER_PRESENCE", 3 },
-+  { "LEAF_EMPTY", "SR__VALUE__TYPES__LEAF_EMPTY", 4 },
-+  { "BINARY", "SR__VALUE__TYPES__BINARY", 10 },
-+  { "BITS", "SR__VALUE__TYPES__BITS", 11 },
-+  { "BOOL", "SR__VALUE__TYPES__BOOL", 12 },
-+  { "DECIMAL64", "SR__VALUE__TYPES__DECIMAL64", 13 },
-+  { "ENUM", "SR__VALUE__TYPES__ENUM", 14 },
-+  { "IDENTITYREF", "SR__VALUE__TYPES__IDENTITYREF", 15 },
-+  { "INSTANCEID", "SR__VALUE__TYPES__INSTANCEID", 16 },
-+  { "INT8", "SR__VALUE__TYPES__INT8", 17 },
-+  { "INT16", "SR__VALUE__TYPES__INT16", 18 },
-+  { "INT32", "SR__VALUE__TYPES__INT32", 19 },
-+  { "INT64", "SR__VALUE__TYPES__INT64", 20 },
-+  { "STRING", "SR__VALUE__TYPES__STRING", 21 },
-+  { "UINT8", "SR__VALUE__TYPES__UINT8", 22 },
-+  { "UINT16", "SR__VALUE__TYPES__UINT16", 23 },
-+  { "UINT32", "SR__VALUE__TYPES__UINT32", 24 },
-+  { "UINT64", "SR__VALUE__TYPES__UINT64", 25 },
-+  { "ANYXML", "SR__VALUE__TYPES__ANYXML", 26 },
-+  { "ANYDATA", "SR__VALUE__TYPES__ANYDATA", 27 },
-+};
-+static const ProtobufCIntRange sr__value__types__value_ranges[] = {
-+{1, 0},{10, 4},{0, 22}
-+};
-+static const ProtobufCEnumValueIndex sr__value__types__enum_values_by_name[22] =
-+{
-+  { "ANYDATA", 21 },
-+  { "ANYXML", 20 },
-+  { "BINARY", 4 },
-+  { "BITS", 5 },
-+  { "BOOL", 6 },
-+  { "CONTAINER", 1 },
-+  { "CONTAINER_PRESENCE", 2 },
-+  { "DECIMAL64", 7 },
-+  { "ENUM", 8 },
-+  { "IDENTITYREF", 9 },
-+  { "INSTANCEID", 10 },
-+  { "INT16", 12 },
-+  { "INT32", 13 },
-+  { "INT64", 14 },
-+  { "INT8", 11 },
-+  { "LEAF_EMPTY", 3 },
-+  { "LIST", 0 },
-+  { "STRING", 15 },
-+  { "UINT16", 17 },
-+  { "UINT32", 18 },
-+  { "UINT64", 19 },
-+  { "UINT8", 16 },
-+};
-+const ProtobufCEnumDescriptor sr__value__types__descriptor =
-+{
-+  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
-+  "sr.Value.Types",
-+  "Types",
-+  "Sr__Value__Types",
-+  "sr",
-+  22,
-+  sr__value__types__enum_values_by_number,
-+  22,
-+  sr__value__types__enum_values_by_name,
-+  2,
-+  sr__value__types__value_ranges,
-+  NULL,NULL,NULL,NULL   /* reserved[1234] */
-+};
-+static const ProtobufCFieldDescriptor sr__value__field_descriptors[21] =
-+{
-+  {
-+    "xpath",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Value, xpath),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "type",
-+    2,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_ENUM,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Value, type),
-+    &sr__value__types__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "dflt",
-+    3,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_BOOL,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Value, dflt),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "binary_val",
-+    10,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Value, binary_val),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "bits_val",
-+    11,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Value, bits_val),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "bool_val",
-+    12,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_BOOL,
-+    offsetof(Sr__Value, has_bool_val),
-+    offsetof(Sr__Value, bool_val),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "decimal64_val",
-+    13,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_DOUBLE,
-+    offsetof(Sr__Value, has_decimal64_val),
-+    offsetof(Sr__Value, decimal64_val),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "enum_val",
-+    14,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Value, enum_val),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "identityref_val",
-+    15,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Value, identityref_val),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "instanceid_val",
-+    16,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Value, instanceid_val),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "int8_val",
-+    17,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_INT32,
-+    offsetof(Sr__Value, has_int8_val),
-+    offsetof(Sr__Value, int8_val),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "int16_val",
-+    18,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_INT32,
-+    offsetof(Sr__Value, has_int16_val),
-+    offsetof(Sr__Value, int16_val),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "int32_val",
-+    19,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_INT32,
-+    offsetof(Sr__Value, has_int32_val),
-+    offsetof(Sr__Value, int32_val),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "int64_val",
-+    20,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_INT64,
-+    offsetof(Sr__Value, has_int64_val),
-+    offsetof(Sr__Value, int64_val),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "string_val",
-+    21,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Value, string_val),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "uint8_val",
-+    22,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_UINT32,
-+    offsetof(Sr__Value, has_uint8_val),
-+    offsetof(Sr__Value, uint8_val),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "uint16_val",
-+    23,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_UINT32,
-+    offsetof(Sr__Value, has_uint16_val),
-+    offsetof(Sr__Value, uint16_val),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "uint32_val",
-+    24,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_UINT32,
-+    offsetof(Sr__Value, has_uint32_val),
-+    offsetof(Sr__Value, uint32_val),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "uint64_val",
-+    25,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_UINT64,
-+    offsetof(Sr__Value, has_uint64_val),
-+    offsetof(Sr__Value, uint64_val),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "anyxml_val",
-+    26,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Value, anyxml_val),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "anydata_val",
-+    27,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Value, anydata_val),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__value__field_indices_by_name[] = {
-+  20,   /* field[20] = anydata_val */
-+  19,   /* field[19] = anyxml_val */
-+  3,   /* field[3] = binary_val */
-+  4,   /* field[4] = bits_val */
-+  5,   /* field[5] = bool_val */
-+  6,   /* field[6] = decimal64_val */
-+  2,   /* field[2] = dflt */
-+  7,   /* field[7] = enum_val */
-+  8,   /* field[8] = identityref_val */
-+  9,   /* field[9] = instanceid_val */
-+  11,   /* field[11] = int16_val */
-+  12,   /* field[12] = int32_val */
-+  13,   /* field[13] = int64_val */
-+  10,   /* field[10] = int8_val */
-+  14,   /* field[14] = string_val */
-+  1,   /* field[1] = type */
-+  16,   /* field[16] = uint16_val */
-+  17,   /* field[17] = uint32_val */
-+  18,   /* field[18] = uint64_val */
-+  15,   /* field[15] = uint8_val */
-+  0,   /* field[0] = xpath */
-+};
-+static const ProtobufCIntRange sr__value__number_ranges[2 + 1] =
-+{
-+  { 1, 0 },
-+  { 10, 3 },
-+  { 0, 21 }
-+};
-+const ProtobufCMessageDescriptor sr__value__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.Value",
-+  "Value",
-+  "Sr__Value",
-+  "sr",
-+  sizeof(Sr__Value),
-+  21,
-+  sr__value__field_descriptors,
-+  sr__value__field_indices_by_name,
-+  2,  sr__value__number_ranges,
-+  (ProtobufCMessageInit) sr__value__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__node__field_descriptors[3] =
-+{
-+  {
-+    "value",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Node, value),
-+    &sr__value__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "module_name",
-+    2,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Node, module_name),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "children",
-+    3,
-+    PROTOBUF_C_LABEL_REPEATED,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    offsetof(Sr__Node, n_children),
-+    offsetof(Sr__Node, children),
-+    &sr__node__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__node__field_indices_by_name[] = {
-+  2,   /* field[2] = children */
-+  1,   /* field[1] = module_name */
-+  0,   /* field[0] = value */
-+};
-+static const ProtobufCIntRange sr__node__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 3 }
-+};
-+const ProtobufCMessageDescriptor sr__node__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.Node",
-+  "Node",
-+  "Sr__Node",
-+  "sr",
-+  sizeof(Sr__Node),
-+  3,
-+  sr__node__field_descriptors,
-+  sr__node__field_indices_by_name,
-+  1,  sr__node__number_ranges,
-+  (ProtobufCMessageInit) sr__node__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__error__field_descriptors[2] =
-+{
-+  {
-+    "message",
-+    1,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Error, message),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "xpath",
-+    2,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Error, xpath),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__error__field_indices_by_name[] = {
-+  0,   /* field[0] = message */
-+  1,   /* field[1] = xpath */
-+};
-+static const ProtobufCIntRange sr__error__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 2 }
-+};
-+const ProtobufCMessageDescriptor sr__error__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.Error",
-+  "Error",
-+  "Sr__Error",
-+  "sr",
-+  sizeof(Sr__Error),
-+  2,
-+  sr__error__field_descriptors,
-+  sr__error__field_indices_by_name,
-+  1,  sr__error__number_ranges,
-+  (ProtobufCMessageInit) sr__error__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__session_start_req__field_descriptors[4] =
-+{
-+  {
-+    "datastore",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_ENUM,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__SessionStartReq, datastore),
-+    &sr__data_store__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "user_name",
-+    2,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__SessionStartReq, user_name),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "options",
-+    3,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_UINT32,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__SessionStartReq, options),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "commit_id",
-+    4,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_UINT32,
-+    offsetof(Sr__SessionStartReq, has_commit_id),
-+    offsetof(Sr__SessionStartReq, commit_id),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__session_start_req__field_indices_by_name[] = {
-+  3,   /* field[3] = commit_id */
-+  0,   /* field[0] = datastore */
-+  2,   /* field[2] = options */
-+  1,   /* field[1] = user_name */
-+};
-+static const ProtobufCIntRange sr__session_start_req__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 4 }
-+};
-+const ProtobufCMessageDescriptor sr__session_start_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.SessionStartReq",
-+  "SessionStartReq",
-+  "Sr__SessionStartReq",
-+  "sr",
-+  sizeof(Sr__SessionStartReq),
-+  4,
-+  sr__session_start_req__field_descriptors,
-+  sr__session_start_req__field_indices_by_name,
-+  1,  sr__session_start_req__number_ranges,
-+  (ProtobufCMessageInit) sr__session_start_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__session_start_resp__field_descriptors[1] =
-+{
-+  {
-+    "session_id",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_UINT32,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__SessionStartResp, session_id),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__session_start_resp__field_indices_by_name[] = {
-+  0,   /* field[0] = session_id */
-+};
-+static const ProtobufCIntRange sr__session_start_resp__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 1 }
-+};
-+const ProtobufCMessageDescriptor sr__session_start_resp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.SessionStartResp",
-+  "SessionStartResp",
-+  "Sr__SessionStartResp",
-+  "sr",
-+  sizeof(Sr__SessionStartResp),
-+  1,
-+  sr__session_start_resp__field_descriptors,
-+  sr__session_start_resp__field_indices_by_name,
-+  1,  sr__session_start_resp__number_ranges,
-+  (ProtobufCMessageInit) sr__session_start_resp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__session_stop_req__field_descriptors[1] =
-+{
-+  {
-+    "session_id",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_UINT32,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__SessionStopReq, session_id),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__session_stop_req__field_indices_by_name[] = {
-+  0,   /* field[0] = session_id */
-+};
-+static const ProtobufCIntRange sr__session_stop_req__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 1 }
-+};
-+const ProtobufCMessageDescriptor sr__session_stop_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.SessionStopReq",
-+  "SessionStopReq",
-+  "Sr__SessionStopReq",
-+  "sr",
-+  sizeof(Sr__SessionStopReq),
-+  1,
-+  sr__session_stop_req__field_descriptors,
-+  sr__session_stop_req__field_indices_by_name,
-+  1,  sr__session_stop_req__number_ranges,
-+  (ProtobufCMessageInit) sr__session_stop_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__session_stop_resp__field_descriptors[1] =
-+{
-+  {
-+    "session_id",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_UINT32,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__SessionStopResp, session_id),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__session_stop_resp__field_indices_by_name[] = {
-+  0,   /* field[0] = session_id */
-+};
-+static const ProtobufCIntRange sr__session_stop_resp__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 1 }
-+};
-+const ProtobufCMessageDescriptor sr__session_stop_resp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.SessionStopResp",
-+  "SessionStopResp",
-+  "Sr__SessionStopResp",
-+  "sr",
-+  sizeof(Sr__SessionStopResp),
-+  1,
-+  sr__session_stop_resp__field_descriptors,
-+  sr__session_stop_resp__field_indices_by_name,
-+  1,  sr__session_stop_resp__number_ranges,
-+  (ProtobufCMessageInit) sr__session_stop_resp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+#define sr__session_refresh_req__field_descriptors NULL
-+#define sr__session_refresh_req__field_indices_by_name NULL
-+#define sr__session_refresh_req__number_ranges NULL
-+const ProtobufCMessageDescriptor sr__session_refresh_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.SessionRefreshReq",
-+  "SessionRefreshReq",
-+  "Sr__SessionRefreshReq",
-+  "sr",
-+  sizeof(Sr__SessionRefreshReq),
-+  0,
-+  sr__session_refresh_req__field_descriptors,
-+  sr__session_refresh_req__field_indices_by_name,
-+  0,  sr__session_refresh_req__number_ranges,
-+  (ProtobufCMessageInit) sr__session_refresh_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__session_refresh_resp__field_descriptors[1] =
-+{
-+  {
-+    "errors",
-+    1,
-+    PROTOBUF_C_LABEL_REPEATED,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    offsetof(Sr__SessionRefreshResp, n_errors),
-+    offsetof(Sr__SessionRefreshResp, errors),
-+    &sr__error__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__session_refresh_resp__field_indices_by_name[] = {
-+  0,   /* field[0] = errors */
-+};
-+static const ProtobufCIntRange sr__session_refresh_resp__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 1 }
-+};
-+const ProtobufCMessageDescriptor sr__session_refresh_resp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.SessionRefreshResp",
-+  "SessionRefreshResp",
-+  "Sr__SessionRefreshResp",
-+  "sr",
-+  sizeof(Sr__SessionRefreshResp),
-+  1,
-+  sr__session_refresh_resp__field_descriptors,
-+  sr__session_refresh_resp__field_indices_by_name,
-+  1,  sr__session_refresh_resp__number_ranges,
-+  (ProtobufCMessageInit) sr__session_refresh_resp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+#define sr__session_check_req__field_descriptors NULL
-+#define sr__session_check_req__field_indices_by_name NULL
-+#define sr__session_check_req__number_ranges NULL
-+const ProtobufCMessageDescriptor sr__session_check_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.SessionCheckReq",
-+  "SessionCheckReq",
-+  "Sr__SessionCheckReq",
-+  "sr",
-+  sizeof(Sr__SessionCheckReq),
-+  0,
-+  sr__session_check_req__field_descriptors,
-+  sr__session_check_req__field_indices_by_name,
-+  0,  sr__session_check_req__number_ranges,
-+  (ProtobufCMessageInit) sr__session_check_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__session_check_resp__field_descriptors[1] =
-+{
-+  {
-+    "errors",
-+    1,
-+    PROTOBUF_C_LABEL_REPEATED,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    offsetof(Sr__SessionCheckResp, n_errors),
-+    offsetof(Sr__SessionCheckResp, errors),
-+    &sr__error__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__session_check_resp__field_indices_by_name[] = {
-+  0,   /* field[0] = errors */
-+};
-+static const ProtobufCIntRange sr__session_check_resp__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 1 }
-+};
-+const ProtobufCMessageDescriptor sr__session_check_resp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.SessionCheckResp",
-+  "SessionCheckResp",
-+  "Sr__SessionCheckResp",
-+  "sr",
-+  sizeof(Sr__SessionCheckResp),
-+  1,
-+  sr__session_check_resp__field_descriptors,
-+  sr__session_check_resp__field_indices_by_name,
-+  1,  sr__session_check_resp__number_ranges,
-+  (ProtobufCMessageInit) sr__session_check_resp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__session_switch_ds_req__field_descriptors[1] =
-+{
-+  {
-+    "datastore",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_ENUM,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__SessionSwitchDsReq, datastore),
-+    &sr__data_store__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__session_switch_ds_req__field_indices_by_name[] = {
-+  0,   /* field[0] = datastore */
-+};
-+static const ProtobufCIntRange sr__session_switch_ds_req__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 1 }
-+};
-+const ProtobufCMessageDescriptor sr__session_switch_ds_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.SessionSwitchDsReq",
-+  "SessionSwitchDsReq",
-+  "Sr__SessionSwitchDsReq",
-+  "sr",
-+  sizeof(Sr__SessionSwitchDsReq),
-+  1,
-+  sr__session_switch_ds_req__field_descriptors,
-+  sr__session_switch_ds_req__field_indices_by_name,
-+  1,  sr__session_switch_ds_req__number_ranges,
-+  (ProtobufCMessageInit) sr__session_switch_ds_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+#define sr__session_switch_ds_resp__field_descriptors NULL
-+#define sr__session_switch_ds_resp__field_indices_by_name NULL
-+#define sr__session_switch_ds_resp__number_ranges NULL
-+const ProtobufCMessageDescriptor sr__session_switch_ds_resp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.SessionSwitchDsResp",
-+  "SessionSwitchDsResp",
-+  "Sr__SessionSwitchDsResp",
-+  "sr",
-+  sizeof(Sr__SessionSwitchDsResp),
-+  0,
-+  sr__session_switch_ds_resp__field_descriptors,
-+  sr__session_switch_ds_resp__field_indices_by_name,
-+  0,  sr__session_switch_ds_resp__number_ranges,
-+  (ProtobufCMessageInit) sr__session_switch_ds_resp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__session_set_opts_req__field_descriptors[1] =
-+{
-+  {
-+    "options",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_UINT32,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__SessionSetOptsReq, options),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__session_set_opts_req__field_indices_by_name[] = {
-+  0,   /* field[0] = options */
-+};
-+static const ProtobufCIntRange sr__session_set_opts_req__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 1 }
-+};
-+const ProtobufCMessageDescriptor sr__session_set_opts_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.SessionSetOptsReq",
-+  "SessionSetOptsReq",
-+  "Sr__SessionSetOptsReq",
-+  "sr",
-+  sizeof(Sr__SessionSetOptsReq),
-+  1,
-+  sr__session_set_opts_req__field_descriptors,
-+  sr__session_set_opts_req__field_indices_by_name,
-+  1,  sr__session_set_opts_req__number_ranges,
-+  (ProtobufCMessageInit) sr__session_set_opts_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+#define sr__session_set_opts_resp__field_descriptors NULL
-+#define sr__session_set_opts_resp__field_indices_by_name NULL
-+#define sr__session_set_opts_resp__number_ranges NULL
-+const ProtobufCMessageDescriptor sr__session_set_opts_resp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.SessionSetOptsResp",
-+  "SessionSetOptsResp",
-+  "Sr__SessionSetOptsResp",
-+  "sr",
-+  sizeof(Sr__SessionSetOptsResp),
-+  0,
-+  sr__session_set_opts_resp__field_descriptors,
-+  sr__session_set_opts_resp__field_indices_by_name,
-+  0,  sr__session_set_opts_resp__number_ranges,
-+  (ProtobufCMessageInit) sr__session_set_opts_resp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__version_verify_req__field_descriptors[1] =
-+{
-+  {
-+    "soname",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__VersionVerifyReq, soname),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__version_verify_req__field_indices_by_name[] = {
-+  0,   /* field[0] = soname */
-+};
-+static const ProtobufCIntRange sr__version_verify_req__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 1 }
-+};
-+const ProtobufCMessageDescriptor sr__version_verify_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.VersionVerifyReq",
-+  "VersionVerifyReq",
-+  "Sr__VersionVerifyReq",
-+  "sr",
-+  sizeof(Sr__VersionVerifyReq),
-+  1,
-+  sr__version_verify_req__field_descriptors,
-+  sr__version_verify_req__field_indices_by_name,
-+  1,  sr__version_verify_req__number_ranges,
-+  (ProtobufCMessageInit) sr__version_verify_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__version_verify_resp__field_descriptors[1] =
-+{
-+  {
-+    "soname",
-+    1,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__VersionVerifyResp, soname),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__version_verify_resp__field_indices_by_name[] = {
-+  0,   /* field[0] = soname */
-+};
-+static const ProtobufCIntRange sr__version_verify_resp__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 1 }
-+};
-+const ProtobufCMessageDescriptor sr__version_verify_resp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.VersionVerifyResp",
-+  "VersionVerifyResp",
-+  "Sr__VersionVerifyResp",
-+  "sr",
-+  sizeof(Sr__VersionVerifyResp),
-+  1,
-+  sr__version_verify_resp__field_descriptors,
-+  sr__version_verify_resp__field_indices_by_name,
-+  1,  sr__version_verify_resp__number_ranges,
-+  (ProtobufCMessageInit) sr__version_verify_resp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__schema_revision__field_descriptors[3] =
-+{
-+  {
-+    "revision",
-+    1,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__SchemaRevision, revision),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "file_path_yang",
-+    2,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__SchemaRevision, file_path_yang),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "file_path_yin",
-+    3,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__SchemaRevision, file_path_yin),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__schema_revision__field_indices_by_name[] = {
-+  1,   /* field[1] = file_path_yang */
-+  2,   /* field[2] = file_path_yin */
-+  0,   /* field[0] = revision */
-+};
-+static const ProtobufCIntRange sr__schema_revision__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 3 }
-+};
-+const ProtobufCMessageDescriptor sr__schema_revision__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.SchemaRevision",
-+  "SchemaRevision",
-+  "Sr__SchemaRevision",
-+  "sr",
-+  sizeof(Sr__SchemaRevision),
-+  3,
-+  sr__schema_revision__field_descriptors,
-+  sr__schema_revision__field_indices_by_name,
-+  1,  sr__schema_revision__number_ranges,
-+  (ProtobufCMessageInit) sr__schema_revision__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__schema_submodule__field_descriptors[2] =
-+{
-+  {
-+    "submodule_name",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__SchemaSubmodule, submodule_name),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "revision",
-+    2,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__SchemaSubmodule, revision),
-+    &sr__schema_revision__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__schema_submodule__field_indices_by_name[] = {
-+  1,   /* field[1] = revision */
-+  0,   /* field[0] = submodule_name */
-+};
-+static const ProtobufCIntRange sr__schema_submodule__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 2 }
-+};
-+const ProtobufCMessageDescriptor sr__schema_submodule__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.SchemaSubmodule",
-+  "SchemaSubmodule",
-+  "Sr__SchemaSubmodule",
-+  "sr",
-+  sizeof(Sr__SchemaSubmodule),
-+  2,
-+  sr__schema_submodule__field_descriptors,
-+  sr__schema_submodule__field_indices_by_name,
-+  1,  sr__schema_submodule__number_ranges,
-+  (ProtobufCMessageInit) sr__schema_submodule__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__schema__field_descriptors[8] =
-+{
-+  {
-+    "module_name",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Schema, module_name),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "ns",
-+    2,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Schema, ns),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "prefix",
-+    3,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Schema, prefix),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "installed",
-+    4,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_BOOL,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Schema, installed),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "implemented",
-+    5,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_BOOL,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Schema, implemented),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "revision",
-+    6,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Schema, revision),
-+    &sr__schema_revision__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "submodules",
-+    7,
-+    PROTOBUF_C_LABEL_REPEATED,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    offsetof(Sr__Schema, n_submodules),
-+    offsetof(Sr__Schema, submodules),
-+    &sr__schema_submodule__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "enabled_features",
-+    8,
-+    PROTOBUF_C_LABEL_REPEATED,
-+    PROTOBUF_C_TYPE_STRING,
-+    offsetof(Sr__Schema, n_enabled_features),
-+    offsetof(Sr__Schema, enabled_features),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__schema__field_indices_by_name[] = {
-+  7,   /* field[7] = enabled_features */
-+  4,   /* field[4] = implemented */
-+  3,   /* field[3] = installed */
-+  0,   /* field[0] = module_name */
-+  1,   /* field[1] = ns */
-+  2,   /* field[2] = prefix */
-+  5,   /* field[5] = revision */
-+  6,   /* field[6] = submodules */
-+};
-+static const ProtobufCIntRange sr__schema__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 8 }
-+};
-+const ProtobufCMessageDescriptor sr__schema__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.Schema",
-+  "Schema",
-+  "Sr__Schema",
-+  "sr",
-+  sizeof(Sr__Schema),
-+  8,
-+  sr__schema__field_descriptors,
-+  sr__schema__field_indices_by_name,
-+  1,  sr__schema__number_ranges,
-+  (ProtobufCMessageInit) sr__schema__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+#define sr__list_schemas_req__field_descriptors NULL
-+#define sr__list_schemas_req__field_indices_by_name NULL
-+#define sr__list_schemas_req__number_ranges NULL
-+const ProtobufCMessageDescriptor sr__list_schemas_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.ListSchemasReq",
-+  "ListSchemasReq",
-+  "Sr__ListSchemasReq",
-+  "sr",
-+  sizeof(Sr__ListSchemasReq),
-+  0,
-+  sr__list_schemas_req__field_descriptors,
-+  sr__list_schemas_req__field_indices_by_name,
-+  0,  sr__list_schemas_req__number_ranges,
-+  (ProtobufCMessageInit) sr__list_schemas_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__list_schemas_resp__field_descriptors[1] =
-+{
-+  {
-+    "schemas",
-+    1,
-+    PROTOBUF_C_LABEL_REPEATED,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    offsetof(Sr__ListSchemasResp, n_schemas),
-+    offsetof(Sr__ListSchemasResp, schemas),
-+    &sr__schema__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__list_schemas_resp__field_indices_by_name[] = {
-+  0,   /* field[0] = schemas */
-+};
-+static const ProtobufCIntRange sr__list_schemas_resp__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 1 }
-+};
-+const ProtobufCMessageDescriptor sr__list_schemas_resp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.ListSchemasResp",
-+  "ListSchemasResp",
-+  "Sr__ListSchemasResp",
-+  "sr",
-+  sizeof(Sr__ListSchemasResp),
-+  1,
-+  sr__list_schemas_resp__field_descriptors,
-+  sr__list_schemas_resp__field_indices_by_name,
-+  1,  sr__list_schemas_resp__number_ranges,
-+  (ProtobufCMessageInit) sr__list_schemas_resp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__get_schema_req__field_descriptors[5] =
-+{
-+  {
-+    "module_name",
-+    1,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__GetSchemaReq, module_name),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "revision",
-+    2,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__GetSchemaReq, revision),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "submodule_name",
-+    3,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__GetSchemaReq, submodule_name),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "submodule_revision",
-+    4,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__GetSchemaReq, submodule_revision),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "yang_format",
-+    5,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_BOOL,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__GetSchemaReq, yang_format),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__get_schema_req__field_indices_by_name[] = {
-+  0,   /* field[0] = module_name */
-+  1,   /* field[1] = revision */
-+  2,   /* field[2] = submodule_name */
-+  3,   /* field[3] = submodule_revision */
-+  4,   /* field[4] = yang_format */
-+};
-+static const ProtobufCIntRange sr__get_schema_req__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 5 }
-+};
-+const ProtobufCMessageDescriptor sr__get_schema_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.GetSchemaReq",
-+  "GetSchemaReq",
-+  "Sr__GetSchemaReq",
-+  "sr",
-+  sizeof(Sr__GetSchemaReq),
-+  5,
-+  sr__get_schema_req__field_descriptors,
-+  sr__get_schema_req__field_indices_by_name,
-+  1,  sr__get_schema_req__number_ranges,
-+  (ProtobufCMessageInit) sr__get_schema_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__get_schema_resp__field_descriptors[1] =
-+{
-+  {
-+    "schema_content",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__GetSchemaResp, schema_content),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__get_schema_resp__field_indices_by_name[] = {
-+  0,   /* field[0] = schema_content */
-+};
-+static const ProtobufCIntRange sr__get_schema_resp__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 1 }
-+};
-+const ProtobufCMessageDescriptor sr__get_schema_resp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.GetSchemaResp",
-+  "GetSchemaResp",
-+  "Sr__GetSchemaResp",
-+  "sr",
-+  sizeof(Sr__GetSchemaResp),
-+  1,
-+  sr__get_schema_resp__field_descriptors,
-+  sr__get_schema_resp__field_indices_by_name,
-+  1,  sr__get_schema_resp__number_ranges,
-+  (ProtobufCMessageInit) sr__get_schema_resp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__get_item_req__field_descriptors[1] =
-+{
-+  {
-+    "xpath",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__GetItemReq, xpath),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__get_item_req__field_indices_by_name[] = {
-+  0,   /* field[0] = xpath */
-+};
-+static const ProtobufCIntRange sr__get_item_req__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 1 }
-+};
-+const ProtobufCMessageDescriptor sr__get_item_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.GetItemReq",
-+  "GetItemReq",
-+  "Sr__GetItemReq",
-+  "sr",
-+  sizeof(Sr__GetItemReq),
-+  1,
-+  sr__get_item_req__field_descriptors,
-+  sr__get_item_req__field_indices_by_name,
-+  1,  sr__get_item_req__number_ranges,
-+  (ProtobufCMessageInit) sr__get_item_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__get_item_resp__field_descriptors[1] =
-+{
-+  {
-+    "value",
-+    1,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__GetItemResp, value),
-+    &sr__value__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__get_item_resp__field_indices_by_name[] = {
-+  0,   /* field[0] = value */
-+};
-+static const ProtobufCIntRange sr__get_item_resp__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 1 }
-+};
-+const ProtobufCMessageDescriptor sr__get_item_resp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.GetItemResp",
-+  "GetItemResp",
-+  "Sr__GetItemResp",
-+  "sr",
-+  sizeof(Sr__GetItemResp),
-+  1,
-+  sr__get_item_resp__field_descriptors,
-+  sr__get_item_resp__field_indices_by_name,
-+  1,  sr__get_item_resp__number_ranges,
-+  (ProtobufCMessageInit) sr__get_item_resp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__get_items_req__field_descriptors[3] =
-+{
-+  {
-+    "xpath",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__GetItemsReq, xpath),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "limit",
-+    2,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_UINT32,
-+    offsetof(Sr__GetItemsReq, has_limit),
-+    offsetof(Sr__GetItemsReq, limit),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "offset",
-+    3,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_UINT32,
-+    offsetof(Sr__GetItemsReq, has_offset),
-+    offsetof(Sr__GetItemsReq, offset),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__get_items_req__field_indices_by_name[] = {
-+  1,   /* field[1] = limit */
-+  2,   /* field[2] = offset */
-+  0,   /* field[0] = xpath */
-+};
-+static const ProtobufCIntRange sr__get_items_req__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 3 }
-+};
-+const ProtobufCMessageDescriptor sr__get_items_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.GetItemsReq",
-+  "GetItemsReq",
-+  "Sr__GetItemsReq",
-+  "sr",
-+  sizeof(Sr__GetItemsReq),
-+  3,
-+  sr__get_items_req__field_descriptors,
-+  sr__get_items_req__field_indices_by_name,
-+  1,  sr__get_items_req__number_ranges,
-+  (ProtobufCMessageInit) sr__get_items_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__get_items_resp__field_descriptors[1] =
-+{
-+  {
-+    "values",
-+    1,
-+    PROTOBUF_C_LABEL_REPEATED,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    offsetof(Sr__GetItemsResp, n_values),
-+    offsetof(Sr__GetItemsResp, values),
-+    &sr__value__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__get_items_resp__field_indices_by_name[] = {
-+  0,   /* field[0] = values */
-+};
-+static const ProtobufCIntRange sr__get_items_resp__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 1 }
-+};
-+const ProtobufCMessageDescriptor sr__get_items_resp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.GetItemsResp",
-+  "GetItemsResp",
-+  "Sr__GetItemsResp",
-+  "sr",
-+  sizeof(Sr__GetItemsResp),
-+  1,
-+  sr__get_items_resp__field_descriptors,
-+  sr__get_items_resp__field_indices_by_name,
-+  1,  sr__get_items_resp__number_ranges,
-+  (ProtobufCMessageInit) sr__get_items_resp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__get_subtree_req__field_descriptors[1] =
-+{
-+  {
-+    "xpath",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__GetSubtreeReq, xpath),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__get_subtree_req__field_indices_by_name[] = {
-+  0,   /* field[0] = xpath */
-+};
-+static const ProtobufCIntRange sr__get_subtree_req__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 1 }
-+};
-+const ProtobufCMessageDescriptor sr__get_subtree_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.GetSubtreeReq",
-+  "GetSubtreeReq",
-+  "Sr__GetSubtreeReq",
-+  "sr",
-+  sizeof(Sr__GetSubtreeReq),
-+  1,
-+  sr__get_subtree_req__field_descriptors,
-+  sr__get_subtree_req__field_indices_by_name,
-+  1,  sr__get_subtree_req__number_ranges,
-+  (ProtobufCMessageInit) sr__get_subtree_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__get_subtree_resp__field_descriptors[1] =
-+{
-+  {
-+    "tree",
-+    1,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__GetSubtreeResp, tree),
-+    &sr__node__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__get_subtree_resp__field_indices_by_name[] = {
-+  0,   /* field[0] = tree */
-+};
-+static const ProtobufCIntRange sr__get_subtree_resp__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 1 }
-+};
-+const ProtobufCMessageDescriptor sr__get_subtree_resp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.GetSubtreeResp",
-+  "GetSubtreeResp",
-+  "Sr__GetSubtreeResp",
-+  "sr",
-+  sizeof(Sr__GetSubtreeResp),
-+  1,
-+  sr__get_subtree_resp__field_descriptors,
-+  sr__get_subtree_resp__field_indices_by_name,
-+  1,  sr__get_subtree_resp__number_ranges,
-+  (ProtobufCMessageInit) sr__get_subtree_resp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__get_subtrees_req__field_descriptors[1] =
-+{
-+  {
-+    "xpath",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__GetSubtreesReq, xpath),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__get_subtrees_req__field_indices_by_name[] = {
-+  0,   /* field[0] = xpath */
-+};
-+static const ProtobufCIntRange sr__get_subtrees_req__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 1 }
-+};
-+const ProtobufCMessageDescriptor sr__get_subtrees_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.GetSubtreesReq",
-+  "GetSubtreesReq",
-+  "Sr__GetSubtreesReq",
-+  "sr",
-+  sizeof(Sr__GetSubtreesReq),
-+  1,
-+  sr__get_subtrees_req__field_descriptors,
-+  sr__get_subtrees_req__field_indices_by_name,
-+  1,  sr__get_subtrees_req__number_ranges,
-+  (ProtobufCMessageInit) sr__get_subtrees_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__get_subtrees_resp__field_descriptors[1] =
-+{
-+  {
-+    "trees",
-+    1,
-+    PROTOBUF_C_LABEL_REPEATED,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    offsetof(Sr__GetSubtreesResp, n_trees),
-+    offsetof(Sr__GetSubtreesResp, trees),
-+    &sr__node__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__get_subtrees_resp__field_indices_by_name[] = {
-+  0,   /* field[0] = trees */
-+};
-+static const ProtobufCIntRange sr__get_subtrees_resp__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 1 }
-+};
-+const ProtobufCMessageDescriptor sr__get_subtrees_resp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.GetSubtreesResp",
-+  "GetSubtreesResp",
-+  "Sr__GetSubtreesResp",
-+  "sr",
-+  sizeof(Sr__GetSubtreesResp),
-+  1,
-+  sr__get_subtrees_resp__field_descriptors,
-+  sr__get_subtrees_resp__field_indices_by_name,
-+  1,  sr__get_subtrees_resp__number_ranges,
-+  (ProtobufCMessageInit) sr__get_subtrees_resp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__get_subtree_chunk_req__field_descriptors[6] =
-+{
-+  {
-+    "xpath",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__GetSubtreeChunkReq, xpath),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "single",
-+    2,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_BOOL,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__GetSubtreeChunkReq, single),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "slice_offset",
-+    3,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_UINT32,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__GetSubtreeChunkReq, slice_offset),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "slice_width",
-+    4,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_UINT32,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__GetSubtreeChunkReq, slice_width),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "child_limit",
-+    5,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_UINT32,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__GetSubtreeChunkReq, child_limit),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "depth_limit",
-+    6,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_UINT32,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__GetSubtreeChunkReq, depth_limit),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__get_subtree_chunk_req__field_indices_by_name[] = {
-+  4,   /* field[4] = child_limit */
-+  5,   /* field[5] = depth_limit */
-+  1,   /* field[1] = single */
-+  2,   /* field[2] = slice_offset */
-+  3,   /* field[3] = slice_width */
-+  0,   /* field[0] = xpath */
-+};
-+static const ProtobufCIntRange sr__get_subtree_chunk_req__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 6 }
-+};
-+const ProtobufCMessageDescriptor sr__get_subtree_chunk_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.GetSubtreeChunkReq",
-+  "GetSubtreeChunkReq",
-+  "Sr__GetSubtreeChunkReq",
-+  "sr",
-+  sizeof(Sr__GetSubtreeChunkReq),
-+  6,
-+  sr__get_subtree_chunk_req__field_descriptors,
-+  sr__get_subtree_chunk_req__field_indices_by_name,
-+  1,  sr__get_subtree_chunk_req__number_ranges,
-+  (ProtobufCMessageInit) sr__get_subtree_chunk_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__get_subtree_chunk_resp__field_descriptors[2] =
-+{
-+  {
-+    "xpath",
-+    1,
-+    PROTOBUF_C_LABEL_REPEATED,
-+    PROTOBUF_C_TYPE_STRING,
-+    offsetof(Sr__GetSubtreeChunkResp, n_xpath),
-+    offsetof(Sr__GetSubtreeChunkResp, xpath),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "chunk",
-+    2,
-+    PROTOBUF_C_LABEL_REPEATED,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    offsetof(Sr__GetSubtreeChunkResp, n_chunk),
-+    offsetof(Sr__GetSubtreeChunkResp, chunk),
-+    &sr__node__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__get_subtree_chunk_resp__field_indices_by_name[] = {
-+  1,   /* field[1] = chunk */
-+  0,   /* field[0] = xpath */
-+};
-+static const ProtobufCIntRange sr__get_subtree_chunk_resp__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 2 }
-+};
-+const ProtobufCMessageDescriptor sr__get_subtree_chunk_resp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.GetSubtreeChunkResp",
-+  "GetSubtreeChunkResp",
-+  "Sr__GetSubtreeChunkResp",
-+  "sr",
-+  sizeof(Sr__GetSubtreeChunkResp),
-+  2,
-+  sr__get_subtree_chunk_resp__field_descriptors,
-+  sr__get_subtree_chunk_resp__field_indices_by_name,
-+  1,  sr__get_subtree_chunk_resp__number_ranges,
-+  (ProtobufCMessageInit) sr__get_subtree_chunk_resp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__set_item_req__field_descriptors[3] =
-+{
-+  {
-+    "xpath",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__SetItemReq, xpath),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "value",
-+    2,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__SetItemReq, value),
-+    &sr__value__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "options",
-+    3,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_UINT32,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__SetItemReq, options),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__set_item_req__field_indices_by_name[] = {
-+  2,   /* field[2] = options */
-+  1,   /* field[1] = value */
-+  0,   /* field[0] = xpath */
-+};
-+static const ProtobufCIntRange sr__set_item_req__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 3 }
-+};
-+const ProtobufCMessageDescriptor sr__set_item_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.SetItemReq",
-+  "SetItemReq",
-+  "Sr__SetItemReq",
-+  "sr",
-+  sizeof(Sr__SetItemReq),
-+  3,
-+  sr__set_item_req__field_descriptors,
-+  sr__set_item_req__field_indices_by_name,
-+  1,  sr__set_item_req__number_ranges,
-+  (ProtobufCMessageInit) sr__set_item_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+#define sr__set_item_resp__field_descriptors NULL
-+#define sr__set_item_resp__field_indices_by_name NULL
-+#define sr__set_item_resp__number_ranges NULL
-+const ProtobufCMessageDescriptor sr__set_item_resp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.SetItemResp",
-+  "SetItemResp",
-+  "Sr__SetItemResp",
-+  "sr",
-+  sizeof(Sr__SetItemResp),
-+  0,
-+  sr__set_item_resp__field_descriptors,
-+  sr__set_item_resp__field_indices_by_name,
-+  0,  sr__set_item_resp__number_ranges,
-+  (ProtobufCMessageInit) sr__set_item_resp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__set_item_str_req__field_descriptors[3] =
-+{
-+  {
-+    "xpath",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__SetItemStrReq, xpath),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "value",
-+    2,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__SetItemStrReq, value),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "options",
-+    3,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_UINT32,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__SetItemStrReq, options),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__set_item_str_req__field_indices_by_name[] = {
-+  2,   /* field[2] = options */
-+  1,   /* field[1] = value */
-+  0,   /* field[0] = xpath */
-+};
-+static const ProtobufCIntRange sr__set_item_str_req__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 3 }
-+};
-+const ProtobufCMessageDescriptor sr__set_item_str_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.SetItemStrReq",
-+  "SetItemStrReq",
-+  "Sr__SetItemStrReq",
-+  "sr",
-+  sizeof(Sr__SetItemStrReq),
-+  3,
-+  sr__set_item_str_req__field_descriptors,
-+  sr__set_item_str_req__field_indices_by_name,
-+  1,  sr__set_item_str_req__number_ranges,
-+  (ProtobufCMessageInit) sr__set_item_str_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+#define sr__set_item_str_resp__field_descriptors NULL
-+#define sr__set_item_str_resp__field_indices_by_name NULL
-+#define sr__set_item_str_resp__number_ranges NULL
-+const ProtobufCMessageDescriptor sr__set_item_str_resp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.SetItemStrResp",
-+  "SetItemStrResp",
-+  "Sr__SetItemStrResp",
-+  "sr",
-+  sizeof(Sr__SetItemStrResp),
-+  0,
-+  sr__set_item_str_resp__field_descriptors,
-+  sr__set_item_str_resp__field_indices_by_name,
-+  0,  sr__set_item_str_resp__number_ranges,
-+  (ProtobufCMessageInit) sr__set_item_str_resp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__delete_item_req__field_descriptors[2] =
-+{
-+  {
-+    "xpath",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__DeleteItemReq, xpath),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "options",
-+    3,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_UINT32,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__DeleteItemReq, options),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__delete_item_req__field_indices_by_name[] = {
-+  1,   /* field[1] = options */
-+  0,   /* field[0] = xpath */
-+};
-+static const ProtobufCIntRange sr__delete_item_req__number_ranges[2 + 1] =
-+{
-+  { 1, 0 },
-+  { 3, 1 },
-+  { 0, 2 }
-+};
-+const ProtobufCMessageDescriptor sr__delete_item_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.DeleteItemReq",
-+  "DeleteItemReq",
-+  "Sr__DeleteItemReq",
-+  "sr",
-+  sizeof(Sr__DeleteItemReq),
-+  2,
-+  sr__delete_item_req__field_descriptors,
-+  sr__delete_item_req__field_indices_by_name,
-+  2,  sr__delete_item_req__number_ranges,
-+  (ProtobufCMessageInit) sr__delete_item_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+#define sr__delete_item_resp__field_descriptors NULL
-+#define sr__delete_item_resp__field_indices_by_name NULL
-+#define sr__delete_item_resp__number_ranges NULL
-+const ProtobufCMessageDescriptor sr__delete_item_resp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.DeleteItemResp",
-+  "DeleteItemResp",
-+  "Sr__DeleteItemResp",
-+  "sr",
-+  sizeof(Sr__DeleteItemResp),
-+  0,
-+  sr__delete_item_resp__field_descriptors,
-+  sr__delete_item_resp__field_indices_by_name,
-+  0,  sr__delete_item_resp__number_ranges,
-+  (ProtobufCMessageInit) sr__delete_item_resp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCEnumValue sr__move_item_req__move_position__enum_values_by_number[4] =
-+{
-+  { "BEFORE", "SR__MOVE_ITEM_REQ__MOVE_POSITION__BEFORE", 1 },
-+  { "AFTER", "SR__MOVE_ITEM_REQ__MOVE_POSITION__AFTER", 2 },
-+  { "FIRST", "SR__MOVE_ITEM_REQ__MOVE_POSITION__FIRST", 3 },
-+  { "LAST", "SR__MOVE_ITEM_REQ__MOVE_POSITION__LAST", 4 },
-+};
-+static const ProtobufCIntRange sr__move_item_req__move_position__value_ranges[] = {
-+{1, 0},{0, 4}
-+};
-+static const ProtobufCEnumValueIndex sr__move_item_req__move_position__enum_values_by_name[4] =
-+{
-+  { "AFTER", 1 },
-+  { "BEFORE", 0 },
-+  { "FIRST", 2 },
-+  { "LAST", 3 },
-+};
-+const ProtobufCEnumDescriptor sr__move_item_req__move_position__descriptor =
-+{
-+  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
-+  "sr.MoveItemReq.MovePosition",
-+  "MovePosition",
-+  "Sr__MoveItemReq__MovePosition",
-+  "sr",
-+  4,
-+  sr__move_item_req__move_position__enum_values_by_number,
-+  4,
-+  sr__move_item_req__move_position__enum_values_by_name,
-+  1,
-+  sr__move_item_req__move_position__value_ranges,
-+  NULL,NULL,NULL,NULL   /* reserved[1234] */
-+};
-+static const ProtobufCFieldDescriptor sr__move_item_req__field_descriptors[3] =
-+{
-+  {
-+    "xpath",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__MoveItemReq, xpath),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "position",
-+    2,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_ENUM,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__MoveItemReq, position),
-+    &sr__move_item_req__move_position__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "relative_item",
-+    3,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__MoveItemReq, relative_item),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__move_item_req__field_indices_by_name[] = {
-+  1,   /* field[1] = position */
-+  2,   /* field[2] = relative_item */
-+  0,   /* field[0] = xpath */
-+};
-+static const ProtobufCIntRange sr__move_item_req__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 3 }
-+};
-+const ProtobufCMessageDescriptor sr__move_item_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.MoveItemReq",
-+  "MoveItemReq",
-+  "Sr__MoveItemReq",
-+  "sr",
-+  sizeof(Sr__MoveItemReq),
-+  3,
-+  sr__move_item_req__field_descriptors,
-+  sr__move_item_req__field_indices_by_name,
-+  1,  sr__move_item_req__number_ranges,
-+  (ProtobufCMessageInit) sr__move_item_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+#define sr__move_item_resp__field_descriptors NULL
-+#define sr__move_item_resp__field_indices_by_name NULL
-+#define sr__move_item_resp__number_ranges NULL
-+const ProtobufCMessageDescriptor sr__move_item_resp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.MoveItemResp",
-+  "MoveItemResp",
-+  "Sr__MoveItemResp",
-+  "sr",
-+  sizeof(Sr__MoveItemResp),
-+  0,
-+  sr__move_item_resp__field_descriptors,
-+  sr__move_item_resp__field_indices_by_name,
-+  0,  sr__move_item_resp__number_ranges,
-+  (ProtobufCMessageInit) sr__move_item_resp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+#define sr__validate_req__field_descriptors NULL
-+#define sr__validate_req__field_indices_by_name NULL
-+#define sr__validate_req__number_ranges NULL
-+const ProtobufCMessageDescriptor sr__validate_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.ValidateReq",
-+  "ValidateReq",
-+  "Sr__ValidateReq",
-+  "sr",
-+  sizeof(Sr__ValidateReq),
-+  0,
-+  sr__validate_req__field_descriptors,
-+  sr__validate_req__field_indices_by_name,
-+  0,  sr__validate_req__number_ranges,
-+  (ProtobufCMessageInit) sr__validate_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__validate_resp__field_descriptors[1] =
-+{
-+  {
-+    "errors",
-+    1,
-+    PROTOBUF_C_LABEL_REPEATED,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    offsetof(Sr__ValidateResp, n_errors),
-+    offsetof(Sr__ValidateResp, errors),
-+    &sr__error__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__validate_resp__field_indices_by_name[] = {
-+  0,   /* field[0] = errors */
-+};
-+static const ProtobufCIntRange sr__validate_resp__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 1 }
-+};
-+const ProtobufCMessageDescriptor sr__validate_resp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.ValidateResp",
-+  "ValidateResp",
-+  "Sr__ValidateResp",
-+  "sr",
-+  sizeof(Sr__ValidateResp),
-+  1,
-+  sr__validate_resp__field_descriptors,
-+  sr__validate_resp__field_indices_by_name,
-+  1,  sr__validate_resp__number_ranges,
-+  (ProtobufCMessageInit) sr__validate_resp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+#define sr__commit_req__field_descriptors NULL
-+#define sr__commit_req__field_indices_by_name NULL
-+#define sr__commit_req__number_ranges NULL
-+const ProtobufCMessageDescriptor sr__commit_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.CommitReq",
-+  "CommitReq",
-+  "Sr__CommitReq",
-+  "sr",
-+  sizeof(Sr__CommitReq),
-+  0,
-+  sr__commit_req__field_descriptors,
-+  sr__commit_req__field_indices_by_name,
-+  0,  sr__commit_req__number_ranges,
-+  (ProtobufCMessageInit) sr__commit_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__commit_resp__field_descriptors[1] =
-+{
-+  {
-+    "errors",
-+    1,
-+    PROTOBUF_C_LABEL_REPEATED,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    offsetof(Sr__CommitResp, n_errors),
-+    offsetof(Sr__CommitResp, errors),
-+    &sr__error__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__commit_resp__field_indices_by_name[] = {
-+  0,   /* field[0] = errors */
-+};
-+static const ProtobufCIntRange sr__commit_resp__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 1 }
-+};
-+const ProtobufCMessageDescriptor sr__commit_resp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.CommitResp",
-+  "CommitResp",
-+  "Sr__CommitResp",
-+  "sr",
-+  sizeof(Sr__CommitResp),
-+  1,
-+  sr__commit_resp__field_descriptors,
-+  sr__commit_resp__field_indices_by_name,
-+  1,  sr__commit_resp__number_ranges,
-+  (ProtobufCMessageInit) sr__commit_resp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+#define sr__discard_changes_req__field_descriptors NULL
-+#define sr__discard_changes_req__field_indices_by_name NULL
-+#define sr__discard_changes_req__number_ranges NULL
-+const ProtobufCMessageDescriptor sr__discard_changes_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.DiscardChangesReq",
-+  "DiscardChangesReq",
-+  "Sr__DiscardChangesReq",
-+  "sr",
-+  sizeof(Sr__DiscardChangesReq),
-+  0,
-+  sr__discard_changes_req__field_descriptors,
-+  sr__discard_changes_req__field_indices_by_name,
-+  0,  sr__discard_changes_req__number_ranges,
-+  (ProtobufCMessageInit) sr__discard_changes_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+#define sr__discard_changes_resp__field_descriptors NULL
-+#define sr__discard_changes_resp__field_indices_by_name NULL
-+#define sr__discard_changes_resp__number_ranges NULL
-+const ProtobufCMessageDescriptor sr__discard_changes_resp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.DiscardChangesResp",
-+  "DiscardChangesResp",
-+  "Sr__DiscardChangesResp",
-+  "sr",
-+  sizeof(Sr__DiscardChangesResp),
-+  0,
-+  sr__discard_changes_resp__field_descriptors,
-+  sr__discard_changes_resp__field_indices_by_name,
-+  0,  sr__discard_changes_resp__number_ranges,
-+  (ProtobufCMessageInit) sr__discard_changes_resp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__copy_config_req__field_descriptors[3] =
-+{
-+  {
-+    "src_datastore",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_ENUM,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__CopyConfigReq, src_datastore),
-+    &sr__data_store__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "dst_datastore",
-+    2,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_ENUM,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__CopyConfigReq, dst_datastore),
-+    &sr__data_store__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "module_name",
-+    3,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__CopyConfigReq, module_name),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__copy_config_req__field_indices_by_name[] = {
-+  1,   /* field[1] = dst_datastore */
-+  2,   /* field[2] = module_name */
-+  0,   /* field[0] = src_datastore */
-+};
-+static const ProtobufCIntRange sr__copy_config_req__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 3 }
-+};
-+const ProtobufCMessageDescriptor sr__copy_config_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.CopyConfigReq",
-+  "CopyConfigReq",
-+  "Sr__CopyConfigReq",
-+  "sr",
-+  sizeof(Sr__CopyConfigReq),
-+  3,
-+  sr__copy_config_req__field_descriptors,
-+  sr__copy_config_req__field_indices_by_name,
-+  1,  sr__copy_config_req__number_ranges,
-+  (ProtobufCMessageInit) sr__copy_config_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__copy_config_resp__field_descriptors[1] =
-+{
-+  {
-+    "errors",
-+    1,
-+    PROTOBUF_C_LABEL_REPEATED,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    offsetof(Sr__CopyConfigResp, n_errors),
-+    offsetof(Sr__CopyConfigResp, errors),
-+    &sr__error__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__copy_config_resp__field_indices_by_name[] = {
-+  0,   /* field[0] = errors */
-+};
-+static const ProtobufCIntRange sr__copy_config_resp__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 1 }
-+};
-+const ProtobufCMessageDescriptor sr__copy_config_resp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.CopyConfigResp",
-+  "CopyConfigResp",
-+  "Sr__CopyConfigResp",
-+  "sr",
-+  sizeof(Sr__CopyConfigResp),
-+  1,
-+  sr__copy_config_resp__field_descriptors,
-+  sr__copy_config_resp__field_indices_by_name,
-+  1,  sr__copy_config_resp__number_ranges,
-+  (ProtobufCMessageInit) sr__copy_config_resp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__lock_req__field_descriptors[1] =
-+{
-+  {
-+    "module_name",
-+    1,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__LockReq, module_name),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__lock_req__field_indices_by_name[] = {
-+  0,   /* field[0] = module_name */
-+};
-+static const ProtobufCIntRange sr__lock_req__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 1 }
-+};
-+const ProtobufCMessageDescriptor sr__lock_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.LockReq",
-+  "LockReq",
-+  "Sr__LockReq",
-+  "sr",
-+  sizeof(Sr__LockReq),
-+  1,
-+  sr__lock_req__field_descriptors,
-+  sr__lock_req__field_indices_by_name,
-+  1,  sr__lock_req__number_ranges,
-+  (ProtobufCMessageInit) sr__lock_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+#define sr__lock_resp__field_descriptors NULL
-+#define sr__lock_resp__field_indices_by_name NULL
-+#define sr__lock_resp__number_ranges NULL
-+const ProtobufCMessageDescriptor sr__lock_resp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.LockResp",
-+  "LockResp",
-+  "Sr__LockResp",
-+  "sr",
-+  sizeof(Sr__LockResp),
-+  0,
-+  sr__lock_resp__field_descriptors,
-+  sr__lock_resp__field_indices_by_name,
-+  0,  sr__lock_resp__number_ranges,
-+  (ProtobufCMessageInit) sr__lock_resp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__unlock_req__field_descriptors[1] =
-+{
-+  {
-+    "module_name",
-+    1,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__UnlockReq, module_name),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__unlock_req__field_indices_by_name[] = {
-+  0,   /* field[0] = module_name */
-+};
-+static const ProtobufCIntRange sr__unlock_req__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 1 }
-+};
-+const ProtobufCMessageDescriptor sr__unlock_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.UnlockReq",
-+  "UnlockReq",
-+  "Sr__UnlockReq",
-+  "sr",
-+  sizeof(Sr__UnlockReq),
-+  1,
-+  sr__unlock_req__field_descriptors,
-+  sr__unlock_req__field_indices_by_name,
-+  1,  sr__unlock_req__number_ranges,
-+  (ProtobufCMessageInit) sr__unlock_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+#define sr__unlock_resp__field_descriptors NULL
-+#define sr__unlock_resp__field_indices_by_name NULL
-+#define sr__unlock_resp__number_ranges NULL
-+const ProtobufCMessageDescriptor sr__unlock_resp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.UnlockResp",
-+  "UnlockResp",
-+  "Sr__UnlockResp",
-+  "sr",
-+  sizeof(Sr__UnlockResp),
-+  0,
-+  sr__unlock_resp__field_descriptors,
-+  sr__unlock_resp__field_indices_by_name,
-+  0,  sr__unlock_resp__number_ranges,
-+  (ProtobufCMessageInit) sr__unlock_resp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__subscribe_req__field_descriptors[10] =
-+{
-+  {
-+    "type",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_ENUM,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__SubscribeReq, type),
-+    &sr__subscription_type__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "destination",
-+    2,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__SubscribeReq, destination),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "subscription_id",
-+    3,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_UINT32,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__SubscribeReq, subscription_id),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "module_name",
-+    4,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__SubscribeReq, module_name),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "xpath",
-+    5,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__SubscribeReq, xpath),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "notif_event",
-+    10,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_ENUM,
-+    offsetof(Sr__SubscribeReq, has_notif_event),
-+    offsetof(Sr__SubscribeReq, notif_event),
-+    &sr__notification_event__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "priority",
-+    11,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_UINT32,
-+    offsetof(Sr__SubscribeReq, has_priority),
-+    offsetof(Sr__SubscribeReq, priority),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "enable_running",
-+    12,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_BOOL,
-+    offsetof(Sr__SubscribeReq, has_enable_running),
-+    offsetof(Sr__SubscribeReq, enable_running),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "enable_event",
-+    13,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_BOOL,
-+    offsetof(Sr__SubscribeReq, has_enable_event),
-+    offsetof(Sr__SubscribeReq, enable_event),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "api_variant",
-+    20,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_ENUM,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__SubscribeReq, api_variant),
-+    &sr__api_variant__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__subscribe_req__field_indices_by_name[] = {
-+  9,   /* field[9] = api_variant */
-+  1,   /* field[1] = destination */
-+  8,   /* field[8] = enable_event */
-+  7,   /* field[7] = enable_running */
-+  3,   /* field[3] = module_name */
-+  5,   /* field[5] = notif_event */
-+  6,   /* field[6] = priority */
-+  2,   /* field[2] = subscription_id */
-+  0,   /* field[0] = type */
-+  4,   /* field[4] = xpath */
-+};
-+static const ProtobufCIntRange sr__subscribe_req__number_ranges[3 + 1] =
-+{
-+  { 1, 0 },
-+  { 10, 5 },
-+  { 20, 9 },
-+  { 0, 10 }
-+};
-+const ProtobufCMessageDescriptor sr__subscribe_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.SubscribeReq",
-+  "SubscribeReq",
-+  "Sr__SubscribeReq",
-+  "sr",
-+  sizeof(Sr__SubscribeReq),
-+  10,
-+  sr__subscribe_req__field_descriptors,
-+  sr__subscribe_req__field_indices_by_name,
-+  3,  sr__subscribe_req__number_ranges,
-+  (ProtobufCMessageInit) sr__subscribe_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+#define sr__subscribe_resp__field_descriptors NULL
-+#define sr__subscribe_resp__field_indices_by_name NULL
-+#define sr__subscribe_resp__number_ranges NULL
-+const ProtobufCMessageDescriptor sr__subscribe_resp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.SubscribeResp",
-+  "SubscribeResp",
-+  "Sr__SubscribeResp",
-+  "sr",
-+  sizeof(Sr__SubscribeResp),
-+  0,
-+  sr__subscribe_resp__field_descriptors,
-+  sr__subscribe_resp__field_indices_by_name,
-+  0,  sr__subscribe_resp__number_ranges,
-+  (ProtobufCMessageInit) sr__subscribe_resp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__unsubscribe_req__field_descriptors[4] =
-+{
-+  {
-+    "type",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_ENUM,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__UnsubscribeReq, type),
-+    &sr__subscription_type__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "destination",
-+    2,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__UnsubscribeReq, destination),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "subscription_id",
-+    3,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_UINT32,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__UnsubscribeReq, subscription_id),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "module_name",
-+    4,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__UnsubscribeReq, module_name),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__unsubscribe_req__field_indices_by_name[] = {
-+  1,   /* field[1] = destination */
-+  3,   /* field[3] = module_name */
-+  2,   /* field[2] = subscription_id */
-+  0,   /* field[0] = type */
-+};
-+static const ProtobufCIntRange sr__unsubscribe_req__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 4 }
-+};
-+const ProtobufCMessageDescriptor sr__unsubscribe_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.UnsubscribeReq",
-+  "UnsubscribeReq",
-+  "Sr__UnsubscribeReq",
-+  "sr",
-+  sizeof(Sr__UnsubscribeReq),
-+  4,
-+  sr__unsubscribe_req__field_descriptors,
-+  sr__unsubscribe_req__field_indices_by_name,
-+  1,  sr__unsubscribe_req__number_ranges,
-+  (ProtobufCMessageInit) sr__unsubscribe_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+#define sr__unsubscribe_resp__field_descriptors NULL
-+#define sr__unsubscribe_resp__field_indices_by_name NULL
-+#define sr__unsubscribe_resp__number_ranges NULL
-+const ProtobufCMessageDescriptor sr__unsubscribe_resp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.UnsubscribeResp",
-+  "UnsubscribeResp",
-+  "Sr__UnsubscribeResp",
-+  "sr",
-+  sizeof(Sr__UnsubscribeResp),
-+  0,
-+  sr__unsubscribe_resp__field_descriptors,
-+  sr__unsubscribe_resp__field_indices_by_name,
-+  0,  sr__unsubscribe_resp__number_ranges,
-+  (ProtobufCMessageInit) sr__unsubscribe_resp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__check_enabled_running_req__field_descriptors[1] =
-+{
-+  {
-+    "module_name",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__CheckEnabledRunningReq, module_name),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__check_enabled_running_req__field_indices_by_name[] = {
-+  0,   /* field[0] = module_name */
-+};
-+static const ProtobufCIntRange sr__check_enabled_running_req__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 1 }
-+};
-+const ProtobufCMessageDescriptor sr__check_enabled_running_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.CheckEnabledRunningReq",
-+  "CheckEnabledRunningReq",
-+  "Sr__CheckEnabledRunningReq",
-+  "sr",
-+  sizeof(Sr__CheckEnabledRunningReq),
-+  1,
-+  sr__check_enabled_running_req__field_descriptors,
-+  sr__check_enabled_running_req__field_indices_by_name,
-+  1,  sr__check_enabled_running_req__number_ranges,
-+  (ProtobufCMessageInit) sr__check_enabled_running_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__check_enabled_running_resp__field_descriptors[1] =
-+{
-+  {
-+    "enabled",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_BOOL,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__CheckEnabledRunningResp, enabled),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__check_enabled_running_resp__field_indices_by_name[] = {
-+  0,   /* field[0] = enabled */
-+};
-+static const ProtobufCIntRange sr__check_enabled_running_resp__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 1 }
-+};
-+const ProtobufCMessageDescriptor sr__check_enabled_running_resp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.CheckEnabledRunningResp",
-+  "CheckEnabledRunningResp",
-+  "Sr__CheckEnabledRunningResp",
-+  "sr",
-+  sizeof(Sr__CheckEnabledRunningResp),
-+  1,
-+  sr__check_enabled_running_resp__field_descriptors,
-+  sr__check_enabled_running_resp__field_indices_by_name,
-+  1,  sr__check_enabled_running_resp__number_ranges,
-+  (ProtobufCMessageInit) sr__check_enabled_running_resp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__module_install_notification__field_descriptors[3] =
-+{
-+  {
-+    "module_name",
-+    1,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__ModuleInstallNotification, module_name),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "revision",
-+    2,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__ModuleInstallNotification, revision),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "state",
-+    3,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_ENUM,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__ModuleInstallNotification, state),
-+    &sr__module_state__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__module_install_notification__field_indices_by_name[] = {
-+  0,   /* field[0] = module_name */
-+  1,   /* field[1] = revision */
-+  2,   /* field[2] = state */
-+};
-+static const ProtobufCIntRange sr__module_install_notification__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 3 }
-+};
-+const ProtobufCMessageDescriptor sr__module_install_notification__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.ModuleInstallNotification",
-+  "ModuleInstallNotification",
-+  "Sr__ModuleInstallNotification",
-+  "sr",
-+  sizeof(Sr__ModuleInstallNotification),
-+  3,
-+  sr__module_install_notification__field_descriptors,
-+  sr__module_install_notification__field_indices_by_name,
-+  1,  sr__module_install_notification__number_ranges,
-+  (ProtobufCMessageInit) sr__module_install_notification__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__feature_enable_notification__field_descriptors[3] =
-+{
-+  {
-+    "module_name",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__FeatureEnableNotification, module_name),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "feature_name",
-+    2,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__FeatureEnableNotification, feature_name),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "enabled",
-+    3,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_BOOL,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__FeatureEnableNotification, enabled),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__feature_enable_notification__field_indices_by_name[] = {
-+  2,   /* field[2] = enabled */
-+  1,   /* field[1] = feature_name */
-+  0,   /* field[0] = module_name */
-+};
-+static const ProtobufCIntRange sr__feature_enable_notification__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 3 }
-+};
-+const ProtobufCMessageDescriptor sr__feature_enable_notification__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.FeatureEnableNotification",
-+  "FeatureEnableNotification",
-+  "Sr__FeatureEnableNotification",
-+  "sr",
-+  sizeof(Sr__FeatureEnableNotification),
-+  3,
-+  sr__feature_enable_notification__field_descriptors,
-+  sr__feature_enable_notification__field_indices_by_name,
-+  1,  sr__feature_enable_notification__number_ranges,
-+  (ProtobufCMessageInit) sr__feature_enable_notification__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__module_change_notification__field_descriptors[2] =
-+{
-+  {
-+    "event",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_ENUM,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__ModuleChangeNotification, event),
-+    &sr__notification_event__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "module_name",
-+    2,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__ModuleChangeNotification, module_name),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__module_change_notification__field_indices_by_name[] = {
-+  0,   /* field[0] = event */
-+  1,   /* field[1] = module_name */
-+};
-+static const ProtobufCIntRange sr__module_change_notification__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 2 }
-+};
-+const ProtobufCMessageDescriptor sr__module_change_notification__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.ModuleChangeNotification",
-+  "ModuleChangeNotification",
-+  "Sr__ModuleChangeNotification",
-+  "sr",
-+  sizeof(Sr__ModuleChangeNotification),
-+  2,
-+  sr__module_change_notification__field_descriptors,
-+  sr__module_change_notification__field_indices_by_name,
-+  1,  sr__module_change_notification__number_ranges,
-+  (ProtobufCMessageInit) sr__module_change_notification__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__subtree_change_notification__field_descriptors[2] =
-+{
-+  {
-+    "event",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_ENUM,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__SubtreeChangeNotification, event),
-+    &sr__notification_event__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "xpath",
-+    2,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__SubtreeChangeNotification, xpath),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__subtree_change_notification__field_indices_by_name[] = {
-+  0,   /* field[0] = event */
-+  1,   /* field[1] = xpath */
-+};
-+static const ProtobufCIntRange sr__subtree_change_notification__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 2 }
-+};
-+const ProtobufCMessageDescriptor sr__subtree_change_notification__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.SubtreeChangeNotification",
-+  "SubtreeChangeNotification",
-+  "Sr__SubtreeChangeNotification",
-+  "sr",
-+  sizeof(Sr__SubtreeChangeNotification),
-+  2,
-+  sr__subtree_change_notification__field_descriptors,
-+  sr__subtree_change_notification__field_indices_by_name,
-+  1,  sr__subtree_change_notification__number_ranges,
-+  (ProtobufCMessageInit) sr__subtree_change_notification__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__change__field_descriptors[3] =
-+{
-+  {
-+    "changeOperation",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_ENUM,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Change, changeoperation),
-+    &sr__change_operation__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "new_value",
-+    2,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Change, new_value),
-+    &sr__value__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "old_value",
-+    3,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Change, old_value),
-+    &sr__value__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__change__field_indices_by_name[] = {
-+  0,   /* field[0] = changeOperation */
-+  1,   /* field[1] = new_value */
-+  2,   /* field[2] = old_value */
-+};
-+static const ProtobufCIntRange sr__change__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 3 }
-+};
-+const ProtobufCMessageDescriptor sr__change__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.Change",
-+  "Change",
-+  "Sr__Change",
-+  "sr",
-+  sizeof(Sr__Change),
-+  3,
-+  sr__change__field_descriptors,
-+  sr__change__field_indices_by_name,
-+  1,  sr__change__number_ranges,
-+  (ProtobufCMessageInit) sr__change__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__get_changes_req__field_descriptors[3] =
-+{
-+  {
-+    "xpath",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__GetChangesReq, xpath),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "limit",
-+    2,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_UINT32,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__GetChangesReq, limit),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "offset",
-+    3,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_UINT32,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__GetChangesReq, offset),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__get_changes_req__field_indices_by_name[] = {
-+  1,   /* field[1] = limit */
-+  2,   /* field[2] = offset */
-+  0,   /* field[0] = xpath */
-+};
-+static const ProtobufCIntRange sr__get_changes_req__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 3 }
-+};
-+const ProtobufCMessageDescriptor sr__get_changes_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.GetChangesReq",
-+  "GetChangesReq",
-+  "Sr__GetChangesReq",
-+  "sr",
-+  sizeof(Sr__GetChangesReq),
-+  3,
-+  sr__get_changes_req__field_descriptors,
-+  sr__get_changes_req__field_indices_by_name,
-+  1,  sr__get_changes_req__number_ranges,
-+  (ProtobufCMessageInit) sr__get_changes_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__get_changes_resp__field_descriptors[1] =
-+{
-+  {
-+    "changes",
-+    1,
-+    PROTOBUF_C_LABEL_REPEATED,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    offsetof(Sr__GetChangesResp, n_changes),
-+    offsetof(Sr__GetChangesResp, changes),
-+    &sr__change__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__get_changes_resp__field_indices_by_name[] = {
-+  0,   /* field[0] = changes */
-+};
-+static const ProtobufCIntRange sr__get_changes_resp__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 1 }
-+};
-+const ProtobufCMessageDescriptor sr__get_changes_resp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.GetChangesResp",
-+  "GetChangesResp",
-+  "Sr__GetChangesResp",
-+  "sr",
-+  sizeof(Sr__GetChangesResp),
-+  1,
-+  sr__get_changes_resp__field_descriptors,
-+  sr__get_changes_resp__field_indices_by_name,
-+  1,  sr__get_changes_resp__number_ranges,
-+  (ProtobufCMessageInit) sr__get_changes_resp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__check_exec_perm_req__field_descriptors[1] =
-+{
-+  {
-+    "xpath",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__CheckExecPermReq, xpath),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__check_exec_perm_req__field_indices_by_name[] = {
-+  0,   /* field[0] = xpath */
-+};
-+static const ProtobufCIntRange sr__check_exec_perm_req__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 1 }
-+};
-+const ProtobufCMessageDescriptor sr__check_exec_perm_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.CheckExecPermReq",
-+  "CheckExecPermReq",
-+  "Sr__CheckExecPermReq",
-+  "sr",
-+  sizeof(Sr__CheckExecPermReq),
-+  1,
-+  sr__check_exec_perm_req__field_descriptors,
-+  sr__check_exec_perm_req__field_indices_by_name,
-+  1,  sr__check_exec_perm_req__number_ranges,
-+  (ProtobufCMessageInit) sr__check_exec_perm_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__check_exec_perm_resp__field_descriptors[1] =
-+{
-+  {
-+    "permitted",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_BOOL,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__CheckExecPermResp, permitted),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__check_exec_perm_resp__field_indices_by_name[] = {
-+  0,   /* field[0] = permitted */
-+};
-+static const ProtobufCIntRange sr__check_exec_perm_resp__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 1 }
-+};
-+const ProtobufCMessageDescriptor sr__check_exec_perm_resp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.CheckExecPermResp",
-+  "CheckExecPermResp",
-+  "Sr__CheckExecPermResp",
-+  "sr",
-+  sizeof(Sr__CheckExecPermResp),
-+  1,
-+  sr__check_exec_perm_resp__field_descriptors,
-+  sr__check_exec_perm_resp__field_indices_by_name,
-+  1,  sr__check_exec_perm_resp__number_ranges,
-+  (ProtobufCMessageInit) sr__check_exec_perm_resp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__rpcreq__field_descriptors[7] =
-+{
-+  {
-+    "action",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_BOOL,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__RPCReq, action),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "xpath",
-+    2,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__RPCReq, xpath),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "orig_api_variant",
-+    3,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_ENUM,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__RPCReq, orig_api_variant),
-+    &sr__api_variant__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "input",
-+    4,
-+    PROTOBUF_C_LABEL_REPEATED,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    offsetof(Sr__RPCReq, n_input),
-+    offsetof(Sr__RPCReq, input),
-+    &sr__value__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "input_tree",
-+    5,
-+    PROTOBUF_C_LABEL_REPEATED,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    offsetof(Sr__RPCReq, n_input_tree),
-+    offsetof(Sr__RPCReq, input_tree),
-+    &sr__node__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "subscriber_address",
-+    10,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__RPCReq, subscriber_address),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "subscription_id",
-+    11,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_UINT32,
-+    offsetof(Sr__RPCReq, has_subscription_id),
-+    offsetof(Sr__RPCReq, subscription_id),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__rpcreq__field_indices_by_name[] = {
-+  0,   /* field[0] = action */
-+  3,   /* field[3] = input */
-+  4,   /* field[4] = input_tree */
-+  2,   /* field[2] = orig_api_variant */
-+  5,   /* field[5] = subscriber_address */
-+  6,   /* field[6] = subscription_id */
-+  1,   /* field[1] = xpath */
-+};
-+static const ProtobufCIntRange sr__rpcreq__number_ranges[2 + 1] =
-+{
-+  { 1, 0 },
-+  { 10, 5 },
-+  { 0, 7 }
-+};
-+const ProtobufCMessageDescriptor sr__rpcreq__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.RPCReq",
-+  "RPCReq",
-+  "Sr__RPCReq",
-+  "sr",
-+  sizeof(Sr__RPCReq),
-+  7,
-+  sr__rpcreq__field_descriptors,
-+  sr__rpcreq__field_indices_by_name,
-+  2,  sr__rpcreq__number_ranges,
-+  (ProtobufCMessageInit) sr__rpcreq__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__rpcresp__field_descriptors[5] =
-+{
-+  {
-+    "action",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_BOOL,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__RPCResp, action),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "xpath",
-+    2,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__RPCResp, xpath),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "orig_api_variant",
-+    3,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_ENUM,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__RPCResp, orig_api_variant),
-+    &sr__api_variant__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "output",
-+    4,
-+    PROTOBUF_C_LABEL_REPEATED,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    offsetof(Sr__RPCResp, n_output),
-+    offsetof(Sr__RPCResp, output),
-+    &sr__value__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "output_tree",
-+    5,
-+    PROTOBUF_C_LABEL_REPEATED,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    offsetof(Sr__RPCResp, n_output_tree),
-+    offsetof(Sr__RPCResp, output_tree),
-+    &sr__node__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__rpcresp__field_indices_by_name[] = {
-+  0,   /* field[0] = action */
-+  2,   /* field[2] = orig_api_variant */
-+  3,   /* field[3] = output */
-+  4,   /* field[4] = output_tree */
-+  1,   /* field[1] = xpath */
-+};
-+static const ProtobufCIntRange sr__rpcresp__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 5 }
-+};
-+const ProtobufCMessageDescriptor sr__rpcresp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.RPCResp",
-+  "RPCResp",
-+  "Sr__RPCResp",
-+  "sr",
-+  sizeof(Sr__RPCResp),
-+  5,
-+  sr__rpcresp__field_descriptors,
-+  sr__rpcresp__field_indices_by_name,
-+  1,  sr__rpcresp__number_ranges,
-+  (ProtobufCMessageInit) sr__rpcresp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCEnumValue sr__event_notif_req__notif_type__enum_values_by_number[4] =
-+{
-+  { "REALTIME", "SR__EVENT_NOTIF_REQ__NOTIF_TYPE__REALTIME", 1 },
-+  { "REPLAY", "SR__EVENT_NOTIF_REQ__NOTIF_TYPE__REPLAY", 2 },
-+  { "REPLAY_COMPLETE", "SR__EVENT_NOTIF_REQ__NOTIF_TYPE__REPLAY_COMPLETE", 3 },
-+  { "REPLAY_STOP", "SR__EVENT_NOTIF_REQ__NOTIF_TYPE__REPLAY_STOP", 4 },
-+};
-+static const ProtobufCIntRange sr__event_notif_req__notif_type__value_ranges[] = {
-+{1, 0},{0, 4}
-+};
-+static const ProtobufCEnumValueIndex sr__event_notif_req__notif_type__enum_values_by_name[4] =
-+{
-+  { "REALTIME", 0 },
-+  { "REPLAY", 1 },
-+  { "REPLAY_COMPLETE", 2 },
-+  { "REPLAY_STOP", 3 },
-+};
-+const ProtobufCEnumDescriptor sr__event_notif_req__notif_type__descriptor =
-+{
-+  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
-+  "sr.EventNotifReq.NotifType",
-+  "NotifType",
-+  "Sr__EventNotifReq__NotifType",
-+  "sr",
-+  4,
-+  sr__event_notif_req__notif_type__enum_values_by_number,
-+  4,
-+  sr__event_notif_req__notif_type__enum_values_by_name,
-+  1,
-+  sr__event_notif_req__notif_type__value_ranges,
-+  NULL,NULL,NULL,NULL   /* reserved[1234] */
-+};
-+static const ProtobufCEnumValue sr__event_notif_req__notif_flags__enum_values_by_number[2] =
-+{
-+  { "DEFAULT", "SR__EVENT_NOTIF_REQ__NOTIF_FLAGS__DEFAULT", 0 },
-+  { "EPHEMERAL", "SR__EVENT_NOTIF_REQ__NOTIF_FLAGS__EPHEMERAL", 1 },
-+};
-+static const ProtobufCIntRange sr__event_notif_req__notif_flags__value_ranges[] = {
-+{0, 0},{0, 2}
-+};
-+static const ProtobufCEnumValueIndex sr__event_notif_req__notif_flags__enum_values_by_name[2] =
-+{
-+  { "DEFAULT", 0 },
-+  { "EPHEMERAL", 1 },
-+};
-+const ProtobufCEnumDescriptor sr__event_notif_req__notif_flags__descriptor =
-+{
-+  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
-+  "sr.EventNotifReq.NotifFlags",
-+  "NotifFlags",
-+  "Sr__EventNotifReq__NotifFlags",
-+  "sr",
-+  2,
-+  sr__event_notif_req__notif_flags__enum_values_by_number,
-+  2,
-+  sr__event_notif_req__notif_flags__enum_values_by_name,
-+  1,
-+  sr__event_notif_req__notif_flags__value_ranges,
-+  NULL,NULL,NULL,NULL   /* reserved[1234] */
-+};
-+static const ProtobufCFieldDescriptor sr__event_notif_req__field_descriptors[9] =
-+{
-+  {
-+    "type",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_ENUM,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__EventNotifReq, type),
-+    &sr__event_notif_req__notif_type__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "options",
-+    2,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_UINT32,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__EventNotifReq, options),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "xpath",
-+    3,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__EventNotifReq, xpath),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "values",
-+    4,
-+    PROTOBUF_C_LABEL_REPEATED,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    offsetof(Sr__EventNotifReq, n_values),
-+    offsetof(Sr__EventNotifReq, values),
-+    &sr__value__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "trees",
-+    5,
-+    PROTOBUF_C_LABEL_REPEATED,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    offsetof(Sr__EventNotifReq, n_trees),
-+    offsetof(Sr__EventNotifReq, trees),
-+    &sr__node__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "timestamp",
-+    6,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_UINT64,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__EventNotifReq, timestamp),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "subscriber_address",
-+    10,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__EventNotifReq, subscriber_address),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "subscription_id",
-+    11,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_UINT32,
-+    offsetof(Sr__EventNotifReq, has_subscription_id),
-+    offsetof(Sr__EventNotifReq, subscription_id),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "do_not_send_reply",
-+    20,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_BOOL,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__EventNotifReq, do_not_send_reply),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__event_notif_req__field_indices_by_name[] = {
-+  8,   /* field[8] = do_not_send_reply */
-+  1,   /* field[1] = options */
-+  6,   /* field[6] = subscriber_address */
-+  7,   /* field[7] = subscription_id */
-+  5,   /* field[5] = timestamp */
-+  4,   /* field[4] = trees */
-+  0,   /* field[0] = type */
-+  3,   /* field[3] = values */
-+  2,   /* field[2] = xpath */
-+};
-+static const ProtobufCIntRange sr__event_notif_req__number_ranges[3 + 1] =
-+{
-+  { 1, 0 },
-+  { 10, 6 },
-+  { 20, 8 },
-+  { 0, 9 }
-+};
-+const ProtobufCMessageDescriptor sr__event_notif_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.EventNotifReq",
-+  "EventNotifReq",
-+  "Sr__EventNotifReq",
-+  "sr",
-+  sizeof(Sr__EventNotifReq),
-+  9,
-+  sr__event_notif_req__field_descriptors,
-+  sr__event_notif_req__field_indices_by_name,
-+  3,  sr__event_notif_req__number_ranges,
-+  (ProtobufCMessageInit) sr__event_notif_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+#define sr__event_notif_resp__field_descriptors NULL
-+#define sr__event_notif_resp__field_indices_by_name NULL
-+#define sr__event_notif_resp__number_ranges NULL
-+const ProtobufCMessageDescriptor sr__event_notif_resp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.EventNotifResp",
-+  "EventNotifResp",
-+  "Sr__EventNotifResp",
-+  "sr",
-+  sizeof(Sr__EventNotifResp),
-+  0,
-+  sr__event_notif_resp__field_descriptors,
-+  sr__event_notif_resp__field_indices_by_name,
-+  0,  sr__event_notif_resp__number_ranges,
-+  (ProtobufCMessageInit) sr__event_notif_resp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__event_notif_replay_req__field_descriptors[6] =
-+{
-+  {
-+    "xpath",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__EventNotifReplayReq, xpath),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "start_time",
-+    2,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_UINT64,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__EventNotifReplayReq, start_time),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "stop_time",
-+    3,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_UINT64,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__EventNotifReplayReq, stop_time),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "subscriber_address",
-+    10,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__EventNotifReplayReq, subscriber_address),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "subscription_id",
-+    11,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_UINT32,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__EventNotifReplayReq, subscription_id),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "api_variant",
-+    12,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_ENUM,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__EventNotifReplayReq, api_variant),
-+    &sr__api_variant__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__event_notif_replay_req__field_indices_by_name[] = {
-+  5,   /* field[5] = api_variant */
-+  1,   /* field[1] = start_time */
-+  2,   /* field[2] = stop_time */
-+  3,   /* field[3] = subscriber_address */
-+  4,   /* field[4] = subscription_id */
-+  0,   /* field[0] = xpath */
-+};
-+static const ProtobufCIntRange sr__event_notif_replay_req__number_ranges[2 + 1] =
-+{
-+  { 1, 0 },
-+  { 10, 3 },
-+  { 0, 6 }
-+};
-+const ProtobufCMessageDescriptor sr__event_notif_replay_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.EventNotifReplayReq",
-+  "EventNotifReplayReq",
-+  "Sr__EventNotifReplayReq",
-+  "sr",
-+  sizeof(Sr__EventNotifReplayReq),
-+  6,
-+  sr__event_notif_replay_req__field_descriptors,
-+  sr__event_notif_replay_req__field_indices_by_name,
-+  2,  sr__event_notif_replay_req__number_ranges,
-+  (ProtobufCMessageInit) sr__event_notif_replay_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+#define sr__event_notif_replay_resp__field_descriptors NULL
-+#define sr__event_notif_replay_resp__field_indices_by_name NULL
-+#define sr__event_notif_replay_resp__number_ranges NULL
-+const ProtobufCMessageDescriptor sr__event_notif_replay_resp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.EventNotifReplayResp",
-+  "EventNotifReplayResp",
-+  "Sr__EventNotifReplayResp",
-+  "sr",
-+  sizeof(Sr__EventNotifReplayResp),
-+  0,
-+  sr__event_notif_replay_resp__field_descriptors,
-+  sr__event_notif_replay_resp__field_indices_by_name,
-+  0,  sr__event_notif_replay_resp__number_ranges,
-+  (ProtobufCMessageInit) sr__event_notif_replay_resp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__data_provide_req__field_descriptors[4] =
-+{
-+  {
-+    "xpath",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__DataProvideReq, xpath),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "subscriber_address",
-+    10,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__DataProvideReq, subscriber_address),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "subscription_id",
-+    11,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_UINT32,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__DataProvideReq, subscription_id),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "request_id",
-+    20,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_UINT64,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__DataProvideReq, request_id),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__data_provide_req__field_indices_by_name[] = {
-+  3,   /* field[3] = request_id */
-+  1,   /* field[1] = subscriber_address */
-+  2,   /* field[2] = subscription_id */
-+  0,   /* field[0] = xpath */
-+};
-+static const ProtobufCIntRange sr__data_provide_req__number_ranges[3 + 1] =
-+{
-+  { 1, 0 },
-+  { 10, 1 },
-+  { 20, 3 },
-+  { 0, 4 }
-+};
-+const ProtobufCMessageDescriptor sr__data_provide_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.DataProvideReq",
-+  "DataProvideReq",
-+  "Sr__DataProvideReq",
-+  "sr",
-+  sizeof(Sr__DataProvideReq),
-+  4,
-+  sr__data_provide_req__field_descriptors,
-+  sr__data_provide_req__field_indices_by_name,
-+  3,  sr__data_provide_req__number_ranges,
-+  (ProtobufCMessageInit) sr__data_provide_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__data_provide_resp__field_descriptors[3] =
-+{
-+  {
-+    "xpath",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__DataProvideResp, xpath),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "values",
-+    2,
-+    PROTOBUF_C_LABEL_REPEATED,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    offsetof(Sr__DataProvideResp, n_values),
-+    offsetof(Sr__DataProvideResp, values),
-+    &sr__value__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "request_id",
-+    10,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_UINT64,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__DataProvideResp, request_id),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__data_provide_resp__field_indices_by_name[] = {
-+  2,   /* field[2] = request_id */
-+  1,   /* field[1] = values */
-+  0,   /* field[0] = xpath */
-+};
-+static const ProtobufCIntRange sr__data_provide_resp__number_ranges[2 + 1] =
-+{
-+  { 1, 0 },
-+  { 10, 2 },
-+  { 0, 3 }
-+};
-+const ProtobufCMessageDescriptor sr__data_provide_resp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.DataProvideResp",
-+  "DataProvideResp",
-+  "Sr__DataProvideResp",
-+  "sr",
-+  sizeof(Sr__DataProvideResp),
-+  3,
-+  sr__data_provide_resp__field_descriptors,
-+  sr__data_provide_resp__field_indices_by_name,
-+  2,  sr__data_provide_resp__number_ranges,
-+  (ProtobufCMessageInit) sr__data_provide_resp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__module_install_req__field_descriptors[4] =
-+{
-+  {
-+    "module_name",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__ModuleInstallReq, module_name),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "revision",
-+    2,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__ModuleInstallReq, revision),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "file_name",
-+    3,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__ModuleInstallReq, file_name),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "installed",
-+    4,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_BOOL,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__ModuleInstallReq, installed),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__module_install_req__field_indices_by_name[] = {
-+  2,   /* field[2] = file_name */
-+  3,   /* field[3] = installed */
-+  0,   /* field[0] = module_name */
-+  1,   /* field[1] = revision */
-+};
-+static const ProtobufCIntRange sr__module_install_req__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 4 }
-+};
-+const ProtobufCMessageDescriptor sr__module_install_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.ModuleInstallReq",
-+  "ModuleInstallReq",
-+  "Sr__ModuleInstallReq",
-+  "sr",
-+  sizeof(Sr__ModuleInstallReq),
-+  4,
-+  sr__module_install_req__field_descriptors,
-+  sr__module_install_req__field_indices_by_name,
-+  1,  sr__module_install_req__number_ranges,
-+  (ProtobufCMessageInit) sr__module_install_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+#define sr__module_install_resp__field_descriptors NULL
-+#define sr__module_install_resp__field_indices_by_name NULL
-+#define sr__module_install_resp__number_ranges NULL
-+const ProtobufCMessageDescriptor sr__module_install_resp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.ModuleInstallResp",
-+  "ModuleInstallResp",
-+  "Sr__ModuleInstallResp",
-+  "sr",
-+  sizeof(Sr__ModuleInstallResp),
-+  0,
-+  sr__module_install_resp__field_descriptors,
-+  sr__module_install_resp__field_indices_by_name,
-+  0,  sr__module_install_resp__number_ranges,
-+  (ProtobufCMessageInit) sr__module_install_resp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__feature_enable_req__field_descriptors[3] =
-+{
-+  {
-+    "module_name",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__FeatureEnableReq, module_name),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "feature_name",
-+    2,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__FeatureEnableReq, feature_name),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "enabled",
-+    3,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_BOOL,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__FeatureEnableReq, enabled),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__feature_enable_req__field_indices_by_name[] = {
-+  2,   /* field[2] = enabled */
-+  1,   /* field[1] = feature_name */
-+  0,   /* field[0] = module_name */
-+};
-+static const ProtobufCIntRange sr__feature_enable_req__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 3 }
-+};
-+const ProtobufCMessageDescriptor sr__feature_enable_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.FeatureEnableReq",
-+  "FeatureEnableReq",
-+  "Sr__FeatureEnableReq",
-+  "sr",
-+  sizeof(Sr__FeatureEnableReq),
-+  3,
-+  sr__feature_enable_req__field_descriptors,
-+  sr__feature_enable_req__field_indices_by_name,
-+  1,  sr__feature_enable_req__number_ranges,
-+  (ProtobufCMessageInit) sr__feature_enable_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+#define sr__feature_enable_resp__field_descriptors NULL
-+#define sr__feature_enable_resp__field_indices_by_name NULL
-+#define sr__feature_enable_resp__number_ranges NULL
-+const ProtobufCMessageDescriptor sr__feature_enable_resp__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.FeatureEnableResp",
-+  "FeatureEnableResp",
-+  "Sr__FeatureEnableResp",
-+  "sr",
-+  sizeof(Sr__FeatureEnableResp),
-+  0,
-+  sr__feature_enable_resp__field_descriptors,
-+  sr__feature_enable_resp__field_indices_by_name,
-+  0,  sr__feature_enable_resp__number_ranges,
-+  (ProtobufCMessageInit) sr__feature_enable_resp__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__unsubscribe_destination_req__field_descriptors[1] =
-+{
-+  {
-+    "destination",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__UnsubscribeDestinationReq, destination),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__unsubscribe_destination_req__field_indices_by_name[] = {
-+  0,   /* field[0] = destination */
-+};
-+static const ProtobufCIntRange sr__unsubscribe_destination_req__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 1 }
-+};
-+const ProtobufCMessageDescriptor sr__unsubscribe_destination_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.UnsubscribeDestinationReq",
-+  "UnsubscribeDestinationReq",
-+  "Sr__UnsubscribeDestinationReq",
-+  "sr",
-+  sizeof(Sr__UnsubscribeDestinationReq),
-+  1,
-+  sr__unsubscribe_destination_req__field_descriptors,
-+  sr__unsubscribe_destination_req__field_indices_by_name,
-+  1,  sr__unsubscribe_destination_req__number_ranges,
-+  (ProtobufCMessageInit) sr__unsubscribe_destination_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__commit_timeout_req__field_descriptors[2] =
-+{
-+  {
-+    "commit_id",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_UINT32,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__CommitTimeoutReq, commit_id),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "expired",
-+    2,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_BOOL,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__CommitTimeoutReq, expired),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__commit_timeout_req__field_indices_by_name[] = {
-+  0,   /* field[0] = commit_id */
-+  1,   /* field[1] = expired */
-+};
-+static const ProtobufCIntRange sr__commit_timeout_req__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 2 }
-+};
-+const ProtobufCMessageDescriptor sr__commit_timeout_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.CommitTimeoutReq",
-+  "CommitTimeoutReq",
-+  "Sr__CommitTimeoutReq",
-+  "sr",
-+  sizeof(Sr__CommitTimeoutReq),
-+  2,
-+  sr__commit_timeout_req__field_descriptors,
-+  sr__commit_timeout_req__field_indices_by_name,
-+  1,  sr__commit_timeout_req__number_ranges,
-+  (ProtobufCMessageInit) sr__commit_timeout_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__oper_data_timeout_req__field_descriptors[1] =
-+{
-+  {
-+    "request_id",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_UINT64,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__OperDataTimeoutReq, request_id),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__oper_data_timeout_req__field_indices_by_name[] = {
-+  0,   /* field[0] = request_id */
-+};
-+static const ProtobufCIntRange sr__oper_data_timeout_req__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 1 }
-+};
-+const ProtobufCMessageDescriptor sr__oper_data_timeout_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.OperDataTimeoutReq",
-+  "OperDataTimeoutReq",
-+  "Sr__OperDataTimeoutReq",
-+  "sr",
-+  sizeof(Sr__OperDataTimeoutReq),
-+  1,
-+  sr__oper_data_timeout_req__field_descriptors,
-+  sr__oper_data_timeout_req__field_indices_by_name,
-+  1,  sr__oper_data_timeout_req__number_ranges,
-+  (ProtobufCMessageInit) sr__oper_data_timeout_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__internal_state_data_req__field_descriptors[2] =
-+{
-+  {
-+    "request_id",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_UINT64,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__InternalStateDataReq, request_id),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "xpath",
-+    2,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__InternalStateDataReq, xpath),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__internal_state_data_req__field_indices_by_name[] = {
-+  0,   /* field[0] = request_id */
-+  1,   /* field[1] = xpath */
-+};
-+static const ProtobufCIntRange sr__internal_state_data_req__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 2 }
-+};
-+const ProtobufCMessageDescriptor sr__internal_state_data_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.InternalStateDataReq",
-+  "InternalStateDataReq",
-+  "Sr__InternalStateDataReq",
-+  "sr",
-+  sizeof(Sr__InternalStateDataReq),
-+  2,
-+  sr__internal_state_data_req__field_descriptors,
-+  sr__internal_state_data_req__field_indices_by_name,
-+  1,  sr__internal_state_data_req__number_ranges,
-+  (ProtobufCMessageInit) sr__internal_state_data_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+#define sr__notif_store_cleanup_req__field_descriptors NULL
-+#define sr__notif_store_cleanup_req__field_indices_by_name NULL
-+#define sr__notif_store_cleanup_req__number_ranges NULL
-+const ProtobufCMessageDescriptor sr__notif_store_cleanup_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.NotifStoreCleanupReq",
-+  "NotifStoreCleanupReq",
-+  "Sr__NotifStoreCleanupReq",
-+  "sr",
-+  sizeof(Sr__NotifStoreCleanupReq),
-+  0,
-+  sr__notif_store_cleanup_req__field_descriptors,
-+  sr__notif_store_cleanup_req__field_indices_by_name,
-+  0,  sr__notif_store_cleanup_req__number_ranges,
-+  (ProtobufCMessageInit) sr__notif_store_cleanup_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__delayed_msg_req__field_descriptors[1] =
-+{
-+  {
-+    "message",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__DelayedMsgReq, message),
-+    &sr__msg__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__delayed_msg_req__field_indices_by_name[] = {
-+  0,   /* field[0] = message */
-+};
-+static const ProtobufCIntRange sr__delayed_msg_req__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 1 }
-+};
-+const ProtobufCMessageDescriptor sr__delayed_msg_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.DelayedMsgReq",
-+  "DelayedMsgReq",
-+  "Sr__DelayedMsgReq",
-+  "sr",
-+  sizeof(Sr__DelayedMsgReq),
-+  1,
-+  sr__delayed_msg_req__field_descriptors,
-+  sr__delayed_msg_req__field_indices_by_name,
-+  1,  sr__delayed_msg_req__number_ranges,
-+  (ProtobufCMessageInit) sr__delayed_msg_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+#define sr__nacm_reload_req__field_descriptors NULL
-+#define sr__nacm_reload_req__field_indices_by_name NULL
-+#define sr__nacm_reload_req__number_ranges NULL
-+const ProtobufCMessageDescriptor sr__nacm_reload_req__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.NacmReloadReq",
-+  "NacmReloadReq",
-+  "Sr__NacmReloadReq",
-+  "sr",
-+  sizeof(Sr__NacmReloadReq),
-+  0,
-+  sr__nacm_reload_req__field_descriptors,
-+  sr__nacm_reload_req__field_indices_by_name,
-+  0,  sr__nacm_reload_req__number_ranges,
-+  (ProtobufCMessageInit) sr__nacm_reload_req__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__request__field_descriptors[37] =
-+{
-+  {
-+    "_id",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_UINT64,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, _id),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "operation",
-+    2,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_ENUM,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, operation),
-+    &sr__operation__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "session_start_req",
-+    10,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, session_start_req),
-+    &sr__session_start_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "session_stop_req",
-+    11,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, session_stop_req),
-+    &sr__session_stop_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "session_refresh_req",
-+    12,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, session_refresh_req),
-+    &sr__session_refresh_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "session_check_req",
-+    13,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, session_check_req),
-+    &sr__session_check_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "session_switch_ds_req",
-+    14,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, session_switch_ds_req),
-+    &sr__session_switch_ds_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "session_set_opts_req",
-+    15,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, session_set_opts_req),
-+    &sr__session_set_opts_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "version_verify_req",
-+    16,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, version_verify_req),
-+    &sr__version_verify_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "list_schemas_req",
-+    20,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, list_schemas_req),
-+    &sr__list_schemas_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "get_schema_req",
-+    21,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, get_schema_req),
-+    &sr__get_schema_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "module_install_req",
-+    22,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, module_install_req),
-+    &sr__module_install_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "feature_enable_req",
-+    23,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, feature_enable_req),
-+    &sr__feature_enable_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "get_item_req",
-+    30,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, get_item_req),
-+    &sr__get_item_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "get_items_req",
-+    31,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, get_items_req),
-+    &sr__get_items_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "get_subtree_req",
-+    32,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, get_subtree_req),
-+    &sr__get_subtree_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "get_subtrees_req",
-+    33,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, get_subtrees_req),
-+    &sr__get_subtrees_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "get_subtree_chunk_req",
-+    34,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, get_subtree_chunk_req),
-+    &sr__get_subtree_chunk_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "set_item_req",
-+    40,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, set_item_req),
-+    &sr__set_item_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "delete_item_req",
-+    41,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, delete_item_req),
-+    &sr__delete_item_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "move_item_req",
-+    42,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, move_item_req),
-+    &sr__move_item_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "set_item_str_req",
-+    43,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, set_item_str_req),
-+    &sr__set_item_str_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "validate_req",
-+    50,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, validate_req),
-+    &sr__validate_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "commit_req",
-+    51,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, commit_req),
-+    &sr__commit_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "discard_changes_req",
-+    52,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, discard_changes_req),
-+    &sr__discard_changes_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "copy_config_req",
-+    53,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, copy_config_req),
-+    &sr__copy_config_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "lock_req",
-+    60,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, lock_req),
-+    &sr__lock_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "unlock_req",
-+    61,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, unlock_req),
-+    &sr__unlock_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "subscribe_req",
-+    70,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, subscribe_req),
-+    &sr__subscribe_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "unsubscribe_req",
-+    71,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, unsubscribe_req),
-+    &sr__unsubscribe_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "check_enabled_running_req",
-+    72,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, check_enabled_running_req),
-+    &sr__check_enabled_running_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "get_changes_req",
-+    73,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, get_changes_req),
-+    &sr__get_changes_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "data_provide_req",
-+    80,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, data_provide_req),
-+    &sr__data_provide_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "check_exec_perm_req",
-+    81,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, check_exec_perm_req),
-+    &sr__check_exec_perm_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "rpc_req",
-+    82,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, rpc_req),
-+    &sr__rpcreq__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "event_notif_req",
-+    83,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, event_notif_req),
-+    &sr__event_notif_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "event_notif_replay_req",
-+    84,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Request, event_notif_replay_req),
-+    &sr__event_notif_replay_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__request__field_indices_by_name[] = {
-+  0,   /* field[0] = _id */
-+  30,   /* field[30] = check_enabled_running_req */
-+  33,   /* field[33] = check_exec_perm_req */
-+  23,   /* field[23] = commit_req */
-+  25,   /* field[25] = copy_config_req */
-+  32,   /* field[32] = data_provide_req */
-+  19,   /* field[19] = delete_item_req */
-+  24,   /* field[24] = discard_changes_req */
-+  36,   /* field[36] = event_notif_replay_req */
-+  35,   /* field[35] = event_notif_req */
-+  12,   /* field[12] = feature_enable_req */
-+  31,   /* field[31] = get_changes_req */
-+  13,   /* field[13] = get_item_req */
-+  14,   /* field[14] = get_items_req */
-+  10,   /* field[10] = get_schema_req */
-+  17,   /* field[17] = get_subtree_chunk_req */
-+  15,   /* field[15] = get_subtree_req */
-+  16,   /* field[16] = get_subtrees_req */
-+  9,   /* field[9] = list_schemas_req */
-+  26,   /* field[26] = lock_req */
-+  11,   /* field[11] = module_install_req */
-+  20,   /* field[20] = move_item_req */
-+  1,   /* field[1] = operation */
-+  34,   /* field[34] = rpc_req */
-+  5,   /* field[5] = session_check_req */
-+  4,   /* field[4] = session_refresh_req */
-+  7,   /* field[7] = session_set_opts_req */
-+  2,   /* field[2] = session_start_req */
-+  3,   /* field[3] = session_stop_req */
-+  6,   /* field[6] = session_switch_ds_req */
-+  18,   /* field[18] = set_item_req */
-+  21,   /* field[21] = set_item_str_req */
-+  28,   /* field[28] = subscribe_req */
-+  27,   /* field[27] = unlock_req */
-+  29,   /* field[29] = unsubscribe_req */
-+  22,   /* field[22] = validate_req */
-+  8,   /* field[8] = version_verify_req */
-+};
-+static const ProtobufCIntRange sr__request__number_ranges[9 + 1] =
-+{
-+  { 1, 0 },
-+  { 10, 2 },
-+  { 20, 9 },
-+  { 30, 13 },
-+  { 40, 18 },
-+  { 50, 22 },
-+  { 60, 26 },
-+  { 70, 28 },
-+  { 80, 32 },
-+  { 0, 37 }
-+};
-+const ProtobufCMessageDescriptor sr__request__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.Request",
-+  "Request",
-+  "Sr__Request",
-+  "sr",
-+  sizeof(Sr__Request),
-+  37,
-+  sr__request__field_descriptors,
-+  sr__request__field_indices_by_name,
-+  9,  sr__request__number_ranges,
-+  (ProtobufCMessageInit) sr__request__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__response__field_descriptors[38] =
-+{
-+  {
-+    "operation",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_ENUM,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, operation),
-+    &sr__operation__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "result",
-+    2,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_UINT32,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, result),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "error",
-+    3,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, error),
-+    &sr__error__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "session_start_resp",
-+    10,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, session_start_resp),
-+    &sr__session_start_resp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "session_stop_resp",
-+    11,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, session_stop_resp),
-+    &sr__session_stop_resp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "session_refresh_resp",
-+    12,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, session_refresh_resp),
-+    &sr__session_refresh_resp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "session_check_resp",
-+    13,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, session_check_resp),
-+    &sr__session_check_resp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "session_switch_ds_resp",
-+    14,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, session_switch_ds_resp),
-+    &sr__session_switch_ds_resp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "session_set_opts_resp",
-+    15,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, session_set_opts_resp),
-+    &sr__session_set_opts_resp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "version_verify_resp",
-+    16,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, version_verify_resp),
-+    &sr__version_verify_resp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "list_schemas_resp",
-+    20,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, list_schemas_resp),
-+    &sr__list_schemas_resp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "get_schema_resp",
-+    21,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, get_schema_resp),
-+    &sr__get_schema_resp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "module_install_resp",
-+    22,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, module_install_resp),
-+    &sr__module_install_resp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "feature_enable_resp",
-+    23,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, feature_enable_resp),
-+    &sr__feature_enable_resp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "get_item_resp",
-+    30,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, get_item_resp),
-+    &sr__get_item_resp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "get_items_resp",
-+    31,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, get_items_resp),
-+    &sr__get_items_resp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "get_subtree_resp",
-+    32,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, get_subtree_resp),
-+    &sr__get_subtree_resp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "get_subtrees_resp",
-+    33,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, get_subtrees_resp),
-+    &sr__get_subtrees_resp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "get_subtree_chunk_resp",
-+    34,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, get_subtree_chunk_resp),
-+    &sr__get_subtree_chunk_resp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "set_item_resp",
-+    40,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, set_item_resp),
-+    &sr__set_item_resp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "delete_item_resp",
-+    41,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, delete_item_resp),
-+    &sr__delete_item_resp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "move_item_resp",
-+    42,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, move_item_resp),
-+    &sr__move_item_resp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "set_item_str_resp",
-+    43,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, set_item_str_resp),
-+    &sr__set_item_str_resp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "validate_resp",
-+    50,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, validate_resp),
-+    &sr__validate_resp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "commit_resp",
-+    51,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, commit_resp),
-+    &sr__commit_resp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "discard_changes_resp",
-+    52,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, discard_changes_resp),
-+    &sr__discard_changes_resp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "copy_config_resp",
-+    53,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, copy_config_resp),
-+    &sr__copy_config_resp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "lock_resp",
-+    60,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, lock_resp),
-+    &sr__lock_resp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "unlock_resp",
-+    61,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, unlock_resp),
-+    &sr__unlock_resp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "subscribe_resp",
-+    70,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, subscribe_resp),
-+    &sr__subscribe_resp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "unsubscribe_resp",
-+    71,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, unsubscribe_resp),
-+    &sr__unsubscribe_resp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "check_enabled_running_resp",
-+    72,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, check_enabled_running_resp),
-+    &sr__check_enabled_running_resp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "get_changes_resp",
-+    73,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, get_changes_resp),
-+    &sr__get_changes_resp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "data_provide_resp",
-+    80,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, data_provide_resp),
-+    &sr__data_provide_resp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "check_exec_perm_resp",
-+    81,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, check_exec_perm_resp),
-+    &sr__check_exec_perm_resp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "rpc_resp",
-+    82,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, rpc_resp),
-+    &sr__rpcresp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "event_notif_resp",
-+    83,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, event_notif_resp),
-+    &sr__event_notif_resp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "event_notif_replay_resp",
-+    84,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Response, event_notif_replay_resp),
-+    &sr__event_notif_replay_resp__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__response__field_indices_by_name[] = {
-+  31,   /* field[31] = check_enabled_running_resp */
-+  34,   /* field[34] = check_exec_perm_resp */
-+  24,   /* field[24] = commit_resp */
-+  26,   /* field[26] = copy_config_resp */
-+  33,   /* field[33] = data_provide_resp */
-+  20,   /* field[20] = delete_item_resp */
-+  25,   /* field[25] = discard_changes_resp */
-+  2,   /* field[2] = error */
-+  37,   /* field[37] = event_notif_replay_resp */
-+  36,   /* field[36] = event_notif_resp */
-+  13,   /* field[13] = feature_enable_resp */
-+  32,   /* field[32] = get_changes_resp */
-+  14,   /* field[14] = get_item_resp */
-+  15,   /* field[15] = get_items_resp */
-+  11,   /* field[11] = get_schema_resp */
-+  18,   /* field[18] = get_subtree_chunk_resp */
-+  16,   /* field[16] = get_subtree_resp */
-+  17,   /* field[17] = get_subtrees_resp */
-+  10,   /* field[10] = list_schemas_resp */
-+  27,   /* field[27] = lock_resp */
-+  12,   /* field[12] = module_install_resp */
-+  21,   /* field[21] = move_item_resp */
-+  0,   /* field[0] = operation */
-+  1,   /* field[1] = result */
-+  35,   /* field[35] = rpc_resp */
-+  6,   /* field[6] = session_check_resp */
-+  5,   /* field[5] = session_refresh_resp */
-+  8,   /* field[8] = session_set_opts_resp */
-+  3,   /* field[3] = session_start_resp */
-+  4,   /* field[4] = session_stop_resp */
-+  7,   /* field[7] = session_switch_ds_resp */
-+  19,   /* field[19] = set_item_resp */
-+  22,   /* field[22] = set_item_str_resp */
-+  29,   /* field[29] = subscribe_resp */
-+  28,   /* field[28] = unlock_resp */
-+  30,   /* field[30] = unsubscribe_resp */
-+  23,   /* field[23] = validate_resp */
-+  9,   /* field[9] = version_verify_resp */
-+};
-+static const ProtobufCIntRange sr__response__number_ranges[9 + 1] =
-+{
-+  { 1, 0 },
-+  { 10, 3 },
-+  { 20, 10 },
-+  { 30, 14 },
-+  { 40, 19 },
-+  { 50, 23 },
-+  { 60, 27 },
-+  { 70, 29 },
-+  { 80, 33 },
-+  { 0, 38 }
-+};
-+const ProtobufCMessageDescriptor sr__response__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.Response",
-+  "Response",
-+  "Sr__Response",
-+  "sr",
-+  sizeof(Sr__Response),
-+  38,
-+  sr__response__field_descriptors,
-+  sr__response__field_indices_by_name,
-+  9,  sr__response__number_ranges,
-+  (ProtobufCMessageInit) sr__response__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__notification__field_descriptors[10] =
-+{
-+  {
-+    "type",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_ENUM,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Notification, type),
-+    &sr__subscription_type__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "destination_address",
-+    2,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Notification, destination_address),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "source_address",
-+    3,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_STRING,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Notification, source_address),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "source_pid",
-+    4,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_UINT32,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Notification, source_pid),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "subscription_id",
-+    5,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_UINT32,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Notification, subscription_id),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "commit_id",
-+    6,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_UINT32,
-+    offsetof(Sr__Notification, has_commit_id),
-+    offsetof(Sr__Notification, commit_id),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "module_install_notif",
-+    10,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Notification, module_install_notif),
-+    &sr__module_install_notification__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "feature_enable_notif",
-+    11,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Notification, feature_enable_notif),
-+    &sr__feature_enable_notification__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "module_change_notif",
-+    12,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Notification, module_change_notif),
-+    &sr__module_change_notification__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "subtree_change_notif",
-+    13,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Notification, subtree_change_notif),
-+    &sr__subtree_change_notification__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__notification__field_indices_by_name[] = {
-+  5,   /* field[5] = commit_id */
-+  1,   /* field[1] = destination_address */
-+  7,   /* field[7] = feature_enable_notif */
-+  8,   /* field[8] = module_change_notif */
-+  6,   /* field[6] = module_install_notif */
-+  2,   /* field[2] = source_address */
-+  3,   /* field[3] = source_pid */
-+  4,   /* field[4] = subscription_id */
-+  9,   /* field[9] = subtree_change_notif */
-+  0,   /* field[0] = type */
-+};
-+static const ProtobufCIntRange sr__notification__number_ranges[2 + 1] =
-+{
-+  { 1, 0 },
-+  { 10, 6 },
-+  { 0, 10 }
-+};
-+const ProtobufCMessageDescriptor sr__notification__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.Notification",
-+  "Notification",
-+  "Sr__Notification",
-+  "sr",
-+  sizeof(Sr__Notification),
-+  10,
-+  sr__notification__field_descriptors,
-+  sr__notification__field_indices_by_name,
-+  2,  sr__notification__number_ranges,
-+  (ProtobufCMessageInit) sr__notification__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__notification_ack__field_descriptors[4] =
-+{
-+  {
-+    "notif",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__NotificationAck, notif),
-+    &sr__notification__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "result",
-+    2,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_UINT32,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__NotificationAck, result),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "error",
-+    3,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__NotificationAck, error),
-+    &sr__error__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "do_not_send_abort",
-+    4,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_BOOL,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__NotificationAck, do_not_send_abort),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__notification_ack__field_indices_by_name[] = {
-+  3,   /* field[3] = do_not_send_abort */
-+  2,   /* field[2] = error */
-+  0,   /* field[0] = notif */
-+  1,   /* field[1] = result */
-+};
-+static const ProtobufCIntRange sr__notification_ack__number_ranges[1 + 1] =
-+{
-+  { 1, 0 },
-+  { 0, 4 }
-+};
-+const ProtobufCMessageDescriptor sr__notification_ack__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.NotificationAck",
-+  "NotificationAck",
-+  "Sr__NotificationAck",
-+  "sr",
-+  sizeof(Sr__NotificationAck),
-+  4,
-+  sr__notification_ack__field_descriptors,
-+  sr__notification_ack__field_indices_by_name,
-+  1,  sr__notification_ack__number_ranges,
-+  (ProtobufCMessageInit) sr__notification_ack__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCFieldDescriptor sr__internal_request__field_descriptors[9] =
-+{
-+  {
-+    "operation",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_ENUM,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__InternalRequest, operation),
-+    &sr__operation__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "postpone_timeout",
-+    2,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_UINT32,
-+    offsetof(Sr__InternalRequest, has_postpone_timeout),
-+    offsetof(Sr__InternalRequest, postpone_timeout),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "unsubscribe_dst_req",
-+    10,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__InternalRequest, unsubscribe_dst_req),
-+    &sr__unsubscribe_destination_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "commit_timeout_req",
-+    11,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__InternalRequest, commit_timeout_req),
-+    &sr__commit_timeout_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "oper_data_timeout_req",
-+    12,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__InternalRequest, oper_data_timeout_req),
-+    &sr__oper_data_timeout_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "internal_state_data_req",
-+    13,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__InternalRequest, internal_state_data_req),
-+    &sr__internal_state_data_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "notif_store_cleanup_req",
-+    14,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__InternalRequest, notif_store_cleanup_req),
-+    &sr__notif_store_cleanup_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "delayed_msg_req",
-+    15,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__InternalRequest, delayed_msg_req),
-+    &sr__delayed_msg_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "nacm_reload_req",
-+    16,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__InternalRequest, nacm_reload_req),
-+    &sr__nacm_reload_req__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__internal_request__field_indices_by_name[] = {
-+  3,   /* field[3] = commit_timeout_req */
-+  7,   /* field[7] = delayed_msg_req */
-+  5,   /* field[5] = internal_state_data_req */
-+  8,   /* field[8] = nacm_reload_req */
-+  6,   /* field[6] = notif_store_cleanup_req */
-+  4,   /* field[4] = oper_data_timeout_req */
-+  0,   /* field[0] = operation */
-+  1,   /* field[1] = postpone_timeout */
-+  2,   /* field[2] = unsubscribe_dst_req */
-+};
-+static const ProtobufCIntRange sr__internal_request__number_ranges[2 + 1] =
-+{
-+  { 1, 0 },
-+  { 10, 2 },
-+  { 0, 9 }
-+};
-+const ProtobufCMessageDescriptor sr__internal_request__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.InternalRequest",
-+  "InternalRequest",
-+  "Sr__InternalRequest",
-+  "sr",
-+  sizeof(Sr__InternalRequest),
-+  9,
-+  sr__internal_request__field_descriptors,
-+  sr__internal_request__field_indices_by_name,
-+  2,  sr__internal_request__number_ranges,
-+  (ProtobufCMessageInit) sr__internal_request__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCEnumValue sr__msg__msg_type__enum_values_by_number[5] =
-+{
-+  { "REQUEST", "SR__MSG__MSG_TYPE__REQUEST", 1 },
-+  { "RESPONSE", "SR__MSG__MSG_TYPE__RESPONSE", 2 },
-+  { "NOTIFICATION", "SR__MSG__MSG_TYPE__NOTIFICATION", 3 },
-+  { "NOTIFICATION_ACK", "SR__MSG__MSG_TYPE__NOTIFICATION_ACK", 4 },
-+  { "INTERNAL_REQUEST", "SR__MSG__MSG_TYPE__INTERNAL_REQUEST", 5 },
-+};
-+static const ProtobufCIntRange sr__msg__msg_type__value_ranges[] = {
-+{1, 0},{0, 5}
-+};
-+static const ProtobufCEnumValueIndex sr__msg__msg_type__enum_values_by_name[5] =
-+{
-+  { "INTERNAL_REQUEST", 4 },
-+  { "NOTIFICATION", 2 },
-+  { "NOTIFICATION_ACK", 3 },
-+  { "REQUEST", 0 },
-+  { "RESPONSE", 1 },
-+};
-+const ProtobufCEnumDescriptor sr__msg__msg_type__descriptor =
-+{
-+  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
-+  "sr.Msg.MsgType",
-+  "MsgType",
-+  "Sr__Msg__MsgType",
-+  "sr",
-+  5,
-+  sr__msg__msg_type__enum_values_by_number,
-+  5,
-+  sr__msg__msg_type__enum_values_by_name,
-+  1,
-+  sr__msg__msg_type__value_ranges,
-+  NULL,NULL,NULL,NULL   /* reserved[1234] */
-+};
-+static const ProtobufCFieldDescriptor sr__msg__field_descriptors[8] =
-+{
-+  {
-+    "type",
-+    1,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_ENUM,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Msg, type),
-+    &sr__msg__msg_type__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "session_id",
-+    2,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_UINT32,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Msg, session_id),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "request",
-+    3,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Msg, request),
-+    &sr__request__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "response",
-+    4,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Msg, response),
-+    &sr__response__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "notification",
-+    5,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Msg, notification),
-+    &sr__notification__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "notification_ack",
-+    6,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Msg, notification_ack),
-+    &sr__notification_ack__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "internal_request",
-+    7,
-+    PROTOBUF_C_LABEL_OPTIONAL,
-+    PROTOBUF_C_TYPE_MESSAGE,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Msg, internal_request),
-+    &sr__internal_request__descriptor,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+  {
-+    "_sysrepo_mem_ctx",
-+    20,
-+    PROTOBUF_C_LABEL_REQUIRED,
-+    PROTOBUF_C_TYPE_UINT64,
-+    0,   /* quantifier_offset */
-+    offsetof(Sr__Msg, _sysrepo_mem_ctx),
-+    NULL,
-+    NULL,
-+    0,             /* flags */
-+    0,NULL,NULL    /* reserved1,reserved2, etc */
-+  },
-+};
-+static const unsigned sr__msg__field_indices_by_name[] = {
-+  7,   /* field[7] = _sysrepo_mem_ctx */
-+  6,   /* field[6] = internal_request */
-+  4,   /* field[4] = notification */
-+  5,   /* field[5] = notification_ack */
-+  2,   /* field[2] = request */
-+  3,   /* field[3] = response */
-+  1,   /* field[1] = session_id */
-+  0,   /* field[0] = type */
-+};
-+static const ProtobufCIntRange sr__msg__number_ranges[2 + 1] =
-+{
-+  { 1, 0 },
-+  { 20, 7 },
-+  { 0, 8 }
-+};
-+const ProtobufCMessageDescriptor sr__msg__descriptor =
-+{
-+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
-+  "sr.Msg",
-+  "Msg",
-+  "Sr__Msg",
-+  "sr",
-+  sizeof(Sr__Msg),
-+  8,
-+  sr__msg__field_descriptors,
-+  sr__msg__field_indices_by_name,
-+  2,  sr__msg__number_ranges,
-+  (ProtobufCMessageInit) sr__msg__init,
-+  NULL,NULL,NULL    /* reserved[123] */
-+};
-+static const ProtobufCEnumValue sr__api_variant__enum_values_by_number[2] =
-+{
-+  { "VALUES", "SR__API_VARIANT__VALUES", 1 },
-+  { "TREES", "SR__API_VARIANT__TREES", 2 },
-+};
-+static const ProtobufCIntRange sr__api_variant__value_ranges[] = {
-+{1, 0},{0, 2}
-+};
-+static const ProtobufCEnumValueIndex sr__api_variant__enum_values_by_name[2] =
-+{
-+  { "TREES", 1 },
-+  { "VALUES", 0 },
-+};
-+const ProtobufCEnumDescriptor sr__api_variant__descriptor =
-+{
-+  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
-+  "sr.ApiVariant",
-+  "ApiVariant",
-+  "Sr__ApiVariant",
-+  "sr",
-+  2,
-+  sr__api_variant__enum_values_by_number,
-+  2,
-+  sr__api_variant__enum_values_by_name,
-+  1,
-+  sr__api_variant__value_ranges,
-+  NULL,NULL,NULL,NULL   /* reserved[1234] */
-+};
-+static const ProtobufCEnumValue sr__data_store__enum_values_by_number[3] =
-+{
-+  { "STARTUP", "SR__DATA_STORE__STARTUP", 1 },
-+  { "RUNNING", "SR__DATA_STORE__RUNNING", 2 },
-+  { "CANDIDATE", "SR__DATA_STORE__CANDIDATE", 3 },
-+};
-+static const ProtobufCIntRange sr__data_store__value_ranges[] = {
-+{1, 0},{0, 3}
-+};
-+static const ProtobufCEnumValueIndex sr__data_store__enum_values_by_name[3] =
-+{
-+  { "CANDIDATE", 2 },
-+  { "RUNNING", 1 },
-+  { "STARTUP", 0 },
-+};
-+const ProtobufCEnumDescriptor sr__data_store__descriptor =
-+{
-+  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
-+  "sr.DataStore",
-+  "DataStore",
-+  "Sr__DataStore",
-+  "sr",
-+  3,
-+  sr__data_store__enum_values_by_number,
-+  3,
-+  sr__data_store__enum_values_by_name,
-+  1,
-+  sr__data_store__value_ranges,
-+  NULL,NULL,NULL,NULL   /* reserved[1234] */
-+};
-+static const ProtobufCEnumValue sr__session_flags__enum_values_by_number[4] =
-+{
-+  { "SESS_DEFAULT", "SR__SESSION_FLAGS__SESS_DEFAULT", 0 },
-+  { "SESS_CONFIG_ONLY", "SR__SESSION_FLAGS__SESS_CONFIG_ONLY", 1 },
-+  { "SESS_ENABLE_NACM", "SR__SESSION_FLAGS__SESS_ENABLE_NACM", 2 },
-+  { "SESS_NOTIFICATION", "SR__SESSION_FLAGS__SESS_NOTIFICATION", 1024 },
-+};
-+static const ProtobufCIntRange sr__session_flags__value_ranges[] = {
-+{0, 0},{1024, 3},{0, 4}
-+};
-+static const ProtobufCEnumValueIndex sr__session_flags__enum_values_by_name[4] =
-+{
-+  { "SESS_CONFIG_ONLY", 1 },
-+  { "SESS_DEFAULT", 0 },
-+  { "SESS_ENABLE_NACM", 2 },
-+  { "SESS_NOTIFICATION", 3 },
-+};
-+const ProtobufCEnumDescriptor sr__session_flags__descriptor =
-+{
-+  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
-+  "sr.SessionFlags",
-+  "SessionFlags",
-+  "Sr__SessionFlags",
-+  "sr",
-+  4,
-+  sr__session_flags__enum_values_by_number,
-+  4,
-+  sr__session_flags__enum_values_by_name,
-+  2,
-+  sr__session_flags__value_ranges,
-+  NULL,NULL,NULL,NULL   /* reserved[1234] */
-+};
-+static const ProtobufCEnumValue sr__edit_flags__enum_values_by_number[3] =
-+{
-+  { "EDIT_DEFAULT", "SR__EDIT_FLAGS__EDIT_DEFAULT", 0 },
-+  { "EDIT_NON_RECURSIVE", "SR__EDIT_FLAGS__EDIT_NON_RECURSIVE", 1 },
-+  { "EDIT_STRICT", "SR__EDIT_FLAGS__EDIT_STRICT", 2 },
-+};
-+static const ProtobufCIntRange sr__edit_flags__value_ranges[] = {
-+{0, 0},{0, 3}
-+};
-+static const ProtobufCEnumValueIndex sr__edit_flags__enum_values_by_name[3] =
-+{
-+  { "EDIT_DEFAULT", 0 },
-+  { "EDIT_NON_RECURSIVE", 1 },
-+  { "EDIT_STRICT", 2 },
-+};
-+const ProtobufCEnumDescriptor sr__edit_flags__descriptor =
-+{
-+  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
-+  "sr.EditFlags",
-+  "EditFlags",
-+  "Sr__EditFlags",
-+  "sr",
-+  3,
-+  sr__edit_flags__enum_values_by_number,
-+  3,
-+  sr__edit_flags__enum_values_by_name,
-+  1,
-+  sr__edit_flags__value_ranges,
-+  NULL,NULL,NULL,NULL   /* reserved[1234] */
-+};
-+static const ProtobufCEnumValue sr__subscription_type__enum_values_by_number[10] =
-+{
-+  { "MODULE_INSTALL_SUBS", "SR__SUBSCRIPTION_TYPE__MODULE_INSTALL_SUBS", 1 },
-+  { "FEATURE_ENABLE_SUBS", "SR__SUBSCRIPTION_TYPE__FEATURE_ENABLE_SUBS", 2 },
-+  { "MODULE_CHANGE_SUBS", "SR__SUBSCRIPTION_TYPE__MODULE_CHANGE_SUBS", 10 },
-+  { "SUBTREE_CHANGE_SUBS", "SR__SUBSCRIPTION_TYPE__SUBTREE_CHANGE_SUBS", 11 },
-+  { "DP_GET_ITEMS_SUBS", "SR__SUBSCRIPTION_TYPE__DP_GET_ITEMS_SUBS", 20 },
-+  { "RPC_SUBS", "SR__SUBSCRIPTION_TYPE__RPC_SUBS", 30 },
-+  { "ACTION_SUBS", "SR__SUBSCRIPTION_TYPE__ACTION_SUBS", 31 },
-+  { "EVENT_NOTIF_SUBS", "SR__SUBSCRIPTION_TYPE__EVENT_NOTIF_SUBS", 40 },
-+  { "HELLO_SUBS", "SR__SUBSCRIPTION_TYPE__HELLO_SUBS", 50 },
-+  { "COMMIT_END_SUBS", "SR__SUBSCRIPTION_TYPE__COMMIT_END_SUBS", 51 },
-+};
-+static const ProtobufCIntRange sr__subscription_type__value_ranges[] = {
-+{1, 0},{10, 2},{20, 4},{30, 5},{40, 7},{50, 8},{0, 10}
-+};
-+static const ProtobufCEnumValueIndex sr__subscription_type__enum_values_by_name[10] =
-+{
-+  { "ACTION_SUBS", 6 },
-+  { "COMMIT_END_SUBS", 9 },
-+  { "DP_GET_ITEMS_SUBS", 4 },
-+  { "EVENT_NOTIF_SUBS", 7 },
-+  { "FEATURE_ENABLE_SUBS", 1 },
-+  { "HELLO_SUBS", 8 },
-+  { "MODULE_CHANGE_SUBS", 2 },
-+  { "MODULE_INSTALL_SUBS", 0 },
-+  { "RPC_SUBS", 5 },
-+  { "SUBTREE_CHANGE_SUBS", 3 },
-+};
-+const ProtobufCEnumDescriptor sr__subscription_type__descriptor =
-+{
-+  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
-+  "sr.SubscriptionType",
-+  "SubscriptionType",
-+  "Sr__SubscriptionType",
-+  "sr",
-+  10,
-+  sr__subscription_type__enum_values_by_number,
-+  10,
-+  sr__subscription_type__enum_values_by_name,
-+  6,
-+  sr__subscription_type__value_ranges,
-+  NULL,NULL,NULL,NULL   /* reserved[1234] */
-+};
-+static const ProtobufCEnumValue sr__notification_event__enum_values_by_number[4] =
-+{
-+  { "VERIFY_EV", "SR__NOTIFICATION_EVENT__VERIFY_EV", 1 },
-+  { "APPLY_EV", "SR__NOTIFICATION_EVENT__APPLY_EV", 2 },
-+  { "ABORT_EV", "SR__NOTIFICATION_EVENT__ABORT_EV", 3 },
-+  { "ENABLED_EV", "SR__NOTIFICATION_EVENT__ENABLED_EV", 4 },
-+};
-+static const ProtobufCIntRange sr__notification_event__value_ranges[] = {
-+{1, 0},{0, 4}
-+};
-+static const ProtobufCEnumValueIndex sr__notification_event__enum_values_by_name[4] =
-+{
-+  { "ABORT_EV", 2 },
-+  { "APPLY_EV", 1 },
-+  { "ENABLED_EV", 3 },
-+  { "VERIFY_EV", 0 },
-+};
-+const ProtobufCEnumDescriptor sr__notification_event__descriptor =
-+{
-+  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
-+  "sr.NotificationEvent",
-+  "NotificationEvent",
-+  "Sr__NotificationEvent",
-+  "sr",
-+  4,
-+  sr__notification_event__enum_values_by_number,
-+  4,
-+  sr__notification_event__enum_values_by_name,
-+  1,
-+  sr__notification_event__value_ranges,
-+  NULL,NULL,NULL,NULL   /* reserved[1234] */
-+};
-+static const ProtobufCEnumValue sr__module_state__enum_values_by_number[3] =
-+{
-+  { "UNINSTALLED", "SR__MODULE_STATE__UNINSTALLED", 1 },
-+  { "IMPORTED", "SR__MODULE_STATE__IMPORTED", 2 },
-+  { "IMPLEMENTED", "SR__MODULE_STATE__IMPLEMENTED", 3 },
-+};
-+static const ProtobufCIntRange sr__module_state__value_ranges[] = {
-+{1, 0},{0, 3}
-+};
-+static const ProtobufCEnumValueIndex sr__module_state__enum_values_by_name[3] =
-+{
-+  { "IMPLEMENTED", 2 },
-+  { "IMPORTED", 1 },
-+  { "UNINSTALLED", 0 },
-+};
-+const ProtobufCEnumDescriptor sr__module_state__descriptor =
-+{
-+  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
-+  "sr.ModuleState",
-+  "ModuleState",
-+  "Sr__ModuleState",
-+  "sr",
-+  3,
-+  sr__module_state__enum_values_by_number,
-+  3,
-+  sr__module_state__enum_values_by_name,
-+  1,
-+  sr__module_state__value_ranges,
-+  NULL,NULL,NULL,NULL   /* reserved[1234] */
-+};
-+static const ProtobufCEnumValue sr__change_operation__enum_values_by_number[4] =
-+{
-+  { "CREATED", "SR__CHANGE_OPERATION__CREATED", 1 },
-+  { "MODIFIED", "SR__CHANGE_OPERATION__MODIFIED", 2 },
-+  { "DELETED", "SR__CHANGE_OPERATION__DELETED", 3 },
-+  { "MOVED", "SR__CHANGE_OPERATION__MOVED", 4 },
-+};
-+static const ProtobufCIntRange sr__change_operation__value_ranges[] = {
-+{1, 0},{0, 4}
-+};
-+static const ProtobufCEnumValueIndex sr__change_operation__enum_values_by_name[4] =
-+{
-+  { "CREATED", 0 },
-+  { "DELETED", 2 },
-+  { "MODIFIED", 1 },
-+  { "MOVED", 3 },
-+};
-+const ProtobufCEnumDescriptor sr__change_operation__descriptor =
-+{
-+  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
-+  "sr.ChangeOperation",
-+  "ChangeOperation",
-+  "Sr__ChangeOperation",
-+  "sr",
-+  4,
-+  sr__change_operation__enum_values_by_number,
-+  4,
-+  sr__change_operation__enum_values_by_name,
-+  1,
-+  sr__change_operation__value_ranges,
-+  NULL,NULL,NULL,NULL   /* reserved[1234] */
-+};
-+static const ProtobufCEnumValue sr__operation__enum_values_by_number[43] =
-+{
-+  { "SESSION_START", "SR__OPERATION__SESSION_START", 10 },
-+  { "SESSION_STOP", "SR__OPERATION__SESSION_STOP", 11 },
-+  { "SESSION_REFRESH", "SR__OPERATION__SESSION_REFRESH", 12 },
-+  { "SESSION_CHECK", "SR__OPERATION__SESSION_CHECK", 13 },
-+  { "SESSION_SWITCH_DS", "SR__OPERATION__SESSION_SWITCH_DS", 14 },
-+  { "SESSION_SET_OPTS", "SR__OPERATION__SESSION_SET_OPTS", 15 },
-+  { "VERSION_VERIFY", "SR__OPERATION__VERSION_VERIFY", 16 },
-+  { "LIST_SCHEMAS", "SR__OPERATION__LIST_SCHEMAS", 20 },
-+  { "GET_SCHEMA", "SR__OPERATION__GET_SCHEMA", 21 },
-+  { "MODULE_INSTALL", "SR__OPERATION__MODULE_INSTALL", 22 },
-+  { "FEATURE_ENABLE", "SR__OPERATION__FEATURE_ENABLE", 23 },
-+  { "GET_ITEM", "SR__OPERATION__GET_ITEM", 30 },
-+  { "GET_ITEMS", "SR__OPERATION__GET_ITEMS", 31 },
-+  { "GET_SUBTREE", "SR__OPERATION__GET_SUBTREE", 32 },
-+  { "GET_SUBTREES", "SR__OPERATION__GET_SUBTREES", 33 },
-+  { "GET_SUBTREE_CHUNK", "SR__OPERATION__GET_SUBTREE_CHUNK", 34 },
-+  { "SET_ITEM", "SR__OPERATION__SET_ITEM", 40 },
-+  { "DELETE_ITEM", "SR__OPERATION__DELETE_ITEM", 41 },
-+  { "MOVE_ITEM", "SR__OPERATION__MOVE_ITEM", 42 },
-+  { "SET_ITEM_STR", "SR__OPERATION__SET_ITEM_STR", 43 },
-+  { "VALIDATE", "SR__OPERATION__VALIDATE", 50 },
-+  { "COMMIT", "SR__OPERATION__COMMIT", 51 },
-+  { "DISCARD_CHANGES", "SR__OPERATION__DISCARD_CHANGES", 52 },
-+  { "COPY_CONFIG", "SR__OPERATION__COPY_CONFIG", 53 },
-+  { "LOCK", "SR__OPERATION__LOCK", 60 },
-+  { "UNLOCK", "SR__OPERATION__UNLOCK", 61 },
-+  { "SUBSCRIBE", "SR__OPERATION__SUBSCRIBE", 70 },
-+  { "UNSUBSCRIBE", "SR__OPERATION__UNSUBSCRIBE", 71 },
-+  { "CHECK_ENABLED_RUNNING", "SR__OPERATION__CHECK_ENABLED_RUNNING", 72 },
-+  { "GET_CHANGES", "SR__OPERATION__GET_CHANGES", 73 },
-+  { "DATA_PROVIDE", "SR__OPERATION__DATA_PROVIDE", 80 },
-+  { "CHECK_EXEC_PERMISSION", "SR__OPERATION__CHECK_EXEC_PERMISSION", 81 },
-+  { "RPC", "SR__OPERATION__RPC", 82 },
-+  { "ACTION", "SR__OPERATION__ACTION", 83 },
-+  { "EVENT_NOTIF", "SR__OPERATION__EVENT_NOTIF", 84 },
-+  { "EVENT_NOTIF_REPLAY", "SR__OPERATION__EVENT_NOTIF_REPLAY", 85 },
-+  { "UNSUBSCRIBE_DESTINATION", "SR__OPERATION__UNSUBSCRIBE_DESTINATION", 101 },
-+  { "COMMIT_TIMEOUT", "SR__OPERATION__COMMIT_TIMEOUT", 102 },
-+  { "OPER_DATA_TIMEOUT", "SR__OPERATION__OPER_DATA_TIMEOUT", 103 },
-+  { "INTERNAL_STATE_DATA", "SR__OPERATION__INTERNAL_STATE_DATA", 104 },
-+  { "NOTIF_STORE_CLEANUP", "SR__OPERATION__NOTIF_STORE_CLEANUP", 105 },
-+  { "DELAYED_MSG", "SR__OPERATION__DELAYED_MSG", 106 },
-+  { "NACM_RELOAD", "SR__OPERATION__NACM_RELOAD", 107 },
-+};
-+static const ProtobufCIntRange sr__operation__value_ranges[] = {
-+{10, 0},{20, 7},{30, 11},{40, 16},{50, 20},{60, 24},{70, 26},{80, 30},{101, 36},{0, 43}
-+};
-+static const ProtobufCEnumValueIndex sr__operation__enum_values_by_name[43] =
-+{
-+  { "ACTION", 33 },
-+  { "CHECK_ENABLED_RUNNING", 28 },
-+  { "CHECK_EXEC_PERMISSION", 31 },
-+  { "COMMIT", 21 },
-+  { "COMMIT_TIMEOUT", 37 },
-+  { "COPY_CONFIG", 23 },
-+  { "DATA_PROVIDE", 30 },
-+  { "DELAYED_MSG", 41 },
-+  { "DELETE_ITEM", 17 },
-+  { "DISCARD_CHANGES", 22 },
-+  { "EVENT_NOTIF", 34 },
-+  { "EVENT_NOTIF_REPLAY", 35 },
-+  { "FEATURE_ENABLE", 10 },
-+  { "GET_CHANGES", 29 },
-+  { "GET_ITEM", 11 },
-+  { "GET_ITEMS", 12 },
-+  { "GET_SCHEMA", 8 },
-+  { "GET_SUBTREE", 13 },
-+  { "GET_SUBTREES", 14 },
-+  { "GET_SUBTREE_CHUNK", 15 },
-+  { "INTERNAL_STATE_DATA", 39 },
-+  { "LIST_SCHEMAS", 7 },
-+  { "LOCK", 24 },
-+  { "MODULE_INSTALL", 9 },
-+  { "MOVE_ITEM", 18 },
-+  { "NACM_RELOAD", 42 },
-+  { "NOTIF_STORE_CLEANUP", 40 },
-+  { "OPER_DATA_TIMEOUT", 38 },
-+  { "RPC", 32 },
-+  { "SESSION_CHECK", 3 },
-+  { "SESSION_REFRESH", 2 },
-+  { "SESSION_SET_OPTS", 5 },
-+  { "SESSION_START", 0 },
-+  { "SESSION_STOP", 1 },
-+  { "SESSION_SWITCH_DS", 4 },
-+  { "SET_ITEM", 16 },
-+  { "SET_ITEM_STR", 19 },
-+  { "SUBSCRIBE", 26 },
-+  { "UNLOCK", 25 },
-+  { "UNSUBSCRIBE", 27 },
-+  { "UNSUBSCRIBE_DESTINATION", 36 },
-+  { "VALIDATE", 20 },
-+  { "VERSION_VERIFY", 6 },
-+};
-+const ProtobufCEnumDescriptor sr__operation__descriptor =
-+{
-+  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
-+  "sr.Operation",
-+  "Operation",
-+  "Sr__Operation",
-+  "sr",
-+  43,
-+  sr__operation__enum_values_by_number,
-+  43,
-+  sr__operation__enum_values_by_name,
-+  9,
-+  sr__operation__value_ranges,
-+  NULL,NULL,NULL,NULL   /* reserved[1234] */
-+};
-Index: sysrepo-7aa2f18d234267403147df92c0005c871f0aa840/src/common/sysrepo.pb-c.h
-===================================================================
---- /dev/null
-+++ sysrepo-7aa2f18d234267403147df92c0005c871f0aa840/src/common/sysrepo.pb-c.h
-@@ -0,0 +1,4238 @@
-+/* Generated by the protocol buffer compiler.  DO NOT EDIT! */
-+/* Generated from: sysrepo.proto */
-+
-+#ifndef PROTOBUF_C_sysrepo_2eproto__INCLUDED
-+#define PROTOBUF_C_sysrepo_2eproto__INCLUDED
-+
-+#include <protobuf-c/protobuf-c.h>
-+
-+PROTOBUF_C__BEGIN_DECLS
-+
-+#if PROTOBUF_C_VERSION_NUMBER < 1000000
-+# error This file was generated by a newer version of protoc-c which is incompatible with your libprotobuf-c headers. Please update your headers.
-+#elif 1002001 < PROTOBUF_C_MIN_COMPILER_VERSION
-+# error This file was generated by an older version of protoc-c which is incompatible with your libprotobuf-c headers. Please regenerate this file with a newer version of protoc-c.
-+#endif
-+
-+
-+typedef struct _Sr__Value Sr__Value;
-+typedef struct _Sr__Node Sr__Node;
-+typedef struct _Sr__Error Sr__Error;
-+typedef struct _Sr__SessionStartReq Sr__SessionStartReq;
-+typedef struct _Sr__SessionStartResp Sr__SessionStartResp;
-+typedef struct _Sr__SessionStopReq Sr__SessionStopReq;
-+typedef struct _Sr__SessionStopResp Sr__SessionStopResp;
-+typedef struct _Sr__SessionRefreshReq Sr__SessionRefreshReq;
-+typedef struct _Sr__SessionRefreshResp Sr__SessionRefreshResp;
-+typedef struct _Sr__SessionCheckReq Sr__SessionCheckReq;
-+typedef struct _Sr__SessionCheckResp Sr__SessionCheckResp;
-+typedef struct _Sr__SessionSwitchDsReq Sr__SessionSwitchDsReq;
-+typedef struct _Sr__SessionSwitchDsResp Sr__SessionSwitchDsResp;
-+typedef struct _Sr__SessionSetOptsReq Sr__SessionSetOptsReq;
-+typedef struct _Sr__SessionSetOptsResp Sr__SessionSetOptsResp;
-+typedef struct _Sr__VersionVerifyReq Sr__VersionVerifyReq;
-+typedef struct _Sr__VersionVerifyResp Sr__VersionVerifyResp;
-+typedef struct _Sr__SchemaRevision Sr__SchemaRevision;
-+typedef struct _Sr__SchemaSubmodule Sr__SchemaSubmodule;
-+typedef struct _Sr__Schema Sr__Schema;
-+typedef struct _Sr__ListSchemasReq Sr__ListSchemasReq;
-+typedef struct _Sr__ListSchemasResp Sr__ListSchemasResp;
-+typedef struct _Sr__GetSchemaReq Sr__GetSchemaReq;
-+typedef struct _Sr__GetSchemaResp Sr__GetSchemaResp;
-+typedef struct _Sr__GetItemReq Sr__GetItemReq;
-+typedef struct _Sr__GetItemResp Sr__GetItemResp;
-+typedef struct _Sr__GetItemsReq Sr__GetItemsReq;
-+typedef struct _Sr__GetItemsResp Sr__GetItemsResp;
-+typedef struct _Sr__GetSubtreeReq Sr__GetSubtreeReq;
-+typedef struct _Sr__GetSubtreeResp Sr__GetSubtreeResp;
-+typedef struct _Sr__GetSubtreesReq Sr__GetSubtreesReq;
-+typedef struct _Sr__GetSubtreesResp Sr__GetSubtreesResp;
-+typedef struct _Sr__GetSubtreeChunkReq Sr__GetSubtreeChunkReq;
-+typedef struct _Sr__GetSubtreeChunkResp Sr__GetSubtreeChunkResp;
-+typedef struct _Sr__SetItemReq Sr__SetItemReq;
-+typedef struct _Sr__SetItemResp Sr__SetItemResp;
-+typedef struct _Sr__SetItemStrReq Sr__SetItemStrReq;
-+typedef struct _Sr__SetItemStrResp Sr__SetItemStrResp;
-+typedef struct _Sr__DeleteItemReq Sr__DeleteItemReq;
-+typedef struct _Sr__DeleteItemResp Sr__DeleteItemResp;
-+typedef struct _Sr__MoveItemReq Sr__MoveItemReq;
-+typedef struct _Sr__MoveItemResp Sr__MoveItemResp;
-+typedef struct _Sr__ValidateReq Sr__ValidateReq;
-+typedef struct _Sr__ValidateResp Sr__ValidateResp;
-+typedef struct _Sr__CommitReq Sr__CommitReq;
-+typedef struct _Sr__CommitResp Sr__CommitResp;
-+typedef struct _Sr__DiscardChangesReq Sr__DiscardChangesReq;
-+typedef struct _Sr__DiscardChangesResp Sr__DiscardChangesResp;
-+typedef struct _Sr__CopyConfigReq Sr__CopyConfigReq;
-+typedef struct _Sr__CopyConfigResp Sr__CopyConfigResp;
-+typedef struct _Sr__LockReq Sr__LockReq;
-+typedef struct _Sr__LockResp Sr__LockResp;
-+typedef struct _Sr__UnlockReq Sr__UnlockReq;
-+typedef struct _Sr__UnlockResp Sr__UnlockResp;
-+typedef struct _Sr__SubscribeReq Sr__SubscribeReq;
-+typedef struct _Sr__SubscribeResp Sr__SubscribeResp;
-+typedef struct _Sr__UnsubscribeReq Sr__UnsubscribeReq;
-+typedef struct _Sr__UnsubscribeResp Sr__UnsubscribeResp;
-+typedef struct _Sr__CheckEnabledRunningReq Sr__CheckEnabledRunningReq;
-+typedef struct _Sr__CheckEnabledRunningResp Sr__CheckEnabledRunningResp;
-+typedef struct _Sr__ModuleInstallNotification Sr__ModuleInstallNotification;
-+typedef struct _Sr__FeatureEnableNotification Sr__FeatureEnableNotification;
-+typedef struct _Sr__ModuleChangeNotification Sr__ModuleChangeNotification;
-+typedef struct _Sr__SubtreeChangeNotification Sr__SubtreeChangeNotification;
-+typedef struct _Sr__Change Sr__Change;
-+typedef struct _Sr__GetChangesReq Sr__GetChangesReq;
-+typedef struct _Sr__GetChangesResp Sr__GetChangesResp;
-+typedef struct _Sr__CheckExecPermReq Sr__CheckExecPermReq;
-+typedef struct _Sr__CheckExecPermResp Sr__CheckExecPermResp;
-+typedef struct _Sr__RPCReq Sr__RPCReq;
-+typedef struct _Sr__RPCResp Sr__RPCResp;
-+typedef struct _Sr__EventNotifReq Sr__EventNotifReq;
-+typedef struct _Sr__EventNotifResp Sr__EventNotifResp;
-+typedef struct _Sr__EventNotifReplayReq Sr__EventNotifReplayReq;
-+typedef struct _Sr__EventNotifReplayResp Sr__EventNotifReplayResp;
-+typedef struct _Sr__DataProvideReq Sr__DataProvideReq;
-+typedef struct _Sr__DataProvideResp Sr__DataProvideResp;
-+typedef struct _Sr__ModuleInstallReq Sr__ModuleInstallReq;
-+typedef struct _Sr__ModuleInstallResp Sr__ModuleInstallResp;
-+typedef struct _Sr__FeatureEnableReq Sr__FeatureEnableReq;
-+typedef struct _Sr__FeatureEnableResp Sr__FeatureEnableResp;
-+typedef struct _Sr__UnsubscribeDestinationReq Sr__UnsubscribeDestinationReq;
-+typedef struct _Sr__CommitTimeoutReq Sr__CommitTimeoutReq;
-+typedef struct _Sr__OperDataTimeoutReq Sr__OperDataTimeoutReq;
-+typedef struct _Sr__InternalStateDataReq Sr__InternalStateDataReq;
-+typedef struct _Sr__NotifStoreCleanupReq Sr__NotifStoreCleanupReq;
-+typedef struct _Sr__DelayedMsgReq Sr__DelayedMsgReq;
-+typedef struct _Sr__NacmReloadReq Sr__NacmReloadReq;
-+typedef struct _Sr__Request Sr__Request;
-+typedef struct _Sr__Response Sr__Response;
-+typedef struct _Sr__Notification Sr__Notification;
-+typedef struct _Sr__NotificationAck Sr__NotificationAck;
-+typedef struct _Sr__InternalRequest Sr__InternalRequest;
-+typedef struct _Sr__Msg Sr__Msg;
-+
-+
-+/* --- enums --- */
-+
-+typedef enum _Sr__Value__Types {
-+  SR__VALUE__TYPES__LIST = 1,
-+  SR__VALUE__TYPES__CONTAINER = 2,
-+  SR__VALUE__TYPES__CONTAINER_PRESENCE = 3,
-+  SR__VALUE__TYPES__LEAF_EMPTY = 4,
-+  SR__VALUE__TYPES__BINARY = 10,
-+  SR__VALUE__TYPES__BITS = 11,
-+  SR__VALUE__TYPES__BOOL = 12,
-+  SR__VALUE__TYPES__DECIMAL64 = 13,
-+  SR__VALUE__TYPES__ENUM = 14,
-+  SR__VALUE__TYPES__IDENTITYREF = 15,
-+  SR__VALUE__TYPES__INSTANCEID = 16,
-+  SR__VALUE__TYPES__INT8 = 17,
-+  SR__VALUE__TYPES__INT16 = 18,
-+  SR__VALUE__TYPES__INT32 = 19,
-+  SR__VALUE__TYPES__INT64 = 20,
-+  SR__VALUE__TYPES__STRING = 21,
-+  SR__VALUE__TYPES__UINT8 = 22,
-+  SR__VALUE__TYPES__UINT16 = 23,
-+  SR__VALUE__TYPES__UINT32 = 24,
-+  SR__VALUE__TYPES__UINT64 = 25,
-+  SR__VALUE__TYPES__ANYXML = 26,
-+  SR__VALUE__TYPES__ANYDATA = 27
-+    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(SR__VALUE__TYPES)
-+} Sr__Value__Types;
-+typedef enum _Sr__MoveItemReq__MovePosition {
-+  SR__MOVE_ITEM_REQ__MOVE_POSITION__BEFORE = 1,
-+  SR__MOVE_ITEM_REQ__MOVE_POSITION__AFTER = 2,
-+  SR__MOVE_ITEM_REQ__MOVE_POSITION__FIRST = 3,
-+  SR__MOVE_ITEM_REQ__MOVE_POSITION__LAST = 4
-+    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(SR__MOVE_ITEM_REQ__MOVE_POSITION)
-+} Sr__MoveItemReq__MovePosition;
-+/*
-+ **
-+ * @brief Type of the event notification.
-+ */
-+typedef enum _Sr__EventNotifReq__NotifType {
-+  SR__EVENT_NOTIF_REQ__NOTIF_TYPE__REALTIME = 1,
-+  SR__EVENT_NOTIF_REQ__NOTIF_TYPE__REPLAY = 2,
-+  SR__EVENT_NOTIF_REQ__NOTIF_TYPE__REPLAY_COMPLETE = 3,
-+  SR__EVENT_NOTIF_REQ__NOTIF_TYPE__REPLAY_STOP = 4
-+    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(SR__EVENT_NOTIF_REQ__NOTIF_TYPE)
-+} Sr__EventNotifReq__NotifType;
-+/*
-+ **
-+ * @brief Flags used to override default session handling.
-+ */
-+typedef enum _Sr__EventNotifReq__NotifFlags {
-+  /*
-+   **< Notification will be handled normally. 
-+   */
-+  SR__EVENT_NOTIF_REQ__NOTIF_FLAGS__DEFAULT = 0,
-+  /*
-+   **< Notification will not be stored in the notification store. 
-+   */
-+  SR__EVENT_NOTIF_REQ__NOTIF_FLAGS__EPHEMERAL = 1
-+    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(SR__EVENT_NOTIF_REQ__NOTIF_FLAGS)
-+} Sr__EventNotifReq__NotifFlags;
-+/*
-+ **
-+ * @brief Type of the message.
-+ */
-+typedef enum _Sr__Msg__MsgType {
-+  /*
-+   **< The message is a request. 
-+   */
-+  SR__MSG__MSG_TYPE__REQUEST = 1,
-+  /*
-+   **< The message is a response to the request. 
-+   */
-+  SR__MSG__MSG_TYPE__RESPONSE = 2,
-+  /*
-+   **< The message is a notification. 
-+   */
-+  SR__MSG__MSG_TYPE__NOTIFICATION = 3,
-+  /*
-+   **< The message is a notification acknowledgment. 
-+   */
-+  SR__MSG__MSG_TYPE__NOTIFICATION_ACK = 4,
-+  /*
-+   **< The message is an internal request, should not be used from the public API. 
-+   */
-+  SR__MSG__MSG_TYPE__INTERNAL_REQUEST = 5
-+    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(SR__MSG__MSG_TYPE)
-+} Sr__Msg__MsgType;
-+/*
-+ **
-+ * @brief Variant of the API. Currently only values (sr_val_t) vs. trees (sr_node_t).
-+ */
-+typedef enum _Sr__ApiVariant {
-+  SR__API_VARIANT__VALUES = 1,
-+  SR__API_VARIANT__TREES = 2
-+    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(SR__API_VARIANT)
-+} Sr__ApiVariant;
-+/*
-+ **
-+ * @brief Datastore on which the configuration session will operate.
-+ */
-+typedef enum _Sr__DataStore {
-+  SR__DATA_STORE__STARTUP = 1,
-+  SR__DATA_STORE__RUNNING = 2,
-+  SR__DATA_STORE__CANDIDATE = 3
-+    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(SR__DATA_STORE)
-+} Sr__DataStore;
-+/*
-+ **
-+ * @brief Flags used to override default session handling.
-+ */
-+typedef enum _Sr__SessionFlags {
-+  /*
-+   **< Default (normal) session behavior. 
-+   */
-+  SR__SESSION_FLAGS__SESS_DEFAULT = 0,
-+  /*
-+   **< Session will process only configuration data (e.g. sysrepo won't
-+   *return any state data by ::sr_get_items / ::sr_get_items_iter calls). 
-+   */
-+  SR__SESSION_FLAGS__SESS_CONFIG_ONLY = 1,
-+  /*
-+   **< Enable NETCONF access control for this session. 
-+   */
-+  SR__SESSION_FLAGS__SESS_ENABLE_NACM = 2,
-+  /*
-+   **< Notification session (internal type of session). 
-+   */
-+  SR__SESSION_FLAGS__SESS_NOTIFICATION = 1024
-+    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(SR__SESSION_FLAGS)
-+} Sr__SessionFlags;
-+/*
-+ **
-+ * @brief Flags used to override default behavior of data manipulation calls.
-+ */
-+typedef enum _Sr__EditFlags {
-+  /*
-+   **< Default behavior - recursive and non-strict. 
-+   */
-+  SR__EDIT_FLAGS__EDIT_DEFAULT = 0,
-+  /*
-+   **< Non-recursive behavior:
-+   *by ::SetItemReq, all preceding nodes (parents) of the identified element must exist,
-+   *by ::DeleteItemReq xpath must not identify an non-empty list or non-empty container. 
-+   */
-+  SR__EDIT_FLAGS__EDIT_NON_RECURSIVE = 1,
-+  /*
-+   **< Strict behavior:
-+   *by ::SetItemReq the identified element must not exist (similar to netconf create operation),
-+   *by ::DeleteItemReq the identified element must exist (similar to netconf delete operation). 
-+   */
-+  SR__EDIT_FLAGS__EDIT_STRICT = 2
-+    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(SR__EDIT_FLAGS)
-+} Sr__EditFlags;
-+typedef enum _Sr__SubscriptionType {
-+  SR__SUBSCRIPTION_TYPE__MODULE_INSTALL_SUBS = 1,
-+  SR__SUBSCRIPTION_TYPE__FEATURE_ENABLE_SUBS = 2,
-+  SR__SUBSCRIPTION_TYPE__MODULE_CHANGE_SUBS = 10,
-+  SR__SUBSCRIPTION_TYPE__SUBTREE_CHANGE_SUBS = 11,
-+  SR__SUBSCRIPTION_TYPE__DP_GET_ITEMS_SUBS = 20,
-+  SR__SUBSCRIPTION_TYPE__RPC_SUBS = 30,
-+  SR__SUBSCRIPTION_TYPE__ACTION_SUBS = 31,
-+  SR__SUBSCRIPTION_TYPE__EVENT_NOTIF_SUBS = 40,
-+  /*
-+   **< Used only internally to test for inactive notification subscriptions. 
-+   */
-+  SR__SUBSCRIPTION_TYPE__HELLO_SUBS = 50,
-+  /*
-+   **< Used only internally to notify about the end of the commit process. 
-+   */
-+  SR__SUBSCRIPTION_TYPE__COMMIT_END_SUBS = 51
-+    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(SR__SUBSCRIPTION_TYPE)
-+} Sr__SubscriptionType;
-+typedef enum _Sr__NotificationEvent {
-+  SR__NOTIFICATION_EVENT__VERIFY_EV = 1,
-+  SR__NOTIFICATION_EVENT__APPLY_EV = 2,
-+  SR__NOTIFICATION_EVENT__ABORT_EV = 3,
-+  SR__NOTIFICATION_EVENT__ENABLED_EV = 4
-+    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(SR__NOTIFICATION_EVENT)
-+} Sr__NotificationEvent;
-+typedef enum _Sr__ModuleState {
-+  SR__MODULE_STATE__UNINSTALLED = 1,
-+  SR__MODULE_STATE__IMPORTED = 2,
-+  SR__MODULE_STATE__IMPLEMENTED = 3
-+    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(SR__MODULE_STATE)
-+} Sr__ModuleState;
-+typedef enum _Sr__ChangeOperation {
-+  SR__CHANGE_OPERATION__CREATED = 1,
-+  SR__CHANGE_OPERATION__MODIFIED = 2,
-+  SR__CHANGE_OPERATION__DELETED = 3,
-+  SR__CHANGE_OPERATION__MOVED = 4
-+    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(SR__CHANGE_OPERATION)
-+} Sr__ChangeOperation;
-+/*
-+ **
-+ * @brief Requested operation.
-+ */
-+typedef enum _Sr__Operation {
-+  SR__OPERATION__SESSION_START = 10,
-+  SR__OPERATION__SESSION_STOP = 11,
-+  SR__OPERATION__SESSION_REFRESH = 12,
-+  SR__OPERATION__SESSION_CHECK = 13,
-+  SR__OPERATION__SESSION_SWITCH_DS = 14,
-+  SR__OPERATION__SESSION_SET_OPTS = 15,
-+  SR__OPERATION__VERSION_VERIFY = 16,
-+  SR__OPERATION__LIST_SCHEMAS = 20,
-+  SR__OPERATION__GET_SCHEMA = 21,
-+  SR__OPERATION__MODULE_INSTALL = 22,
-+  SR__OPERATION__FEATURE_ENABLE = 23,
-+  SR__OPERATION__GET_ITEM = 30,
-+  SR__OPERATION__GET_ITEMS = 31,
-+  SR__OPERATION__GET_SUBTREE = 32,
-+  SR__OPERATION__GET_SUBTREES = 33,
-+  SR__OPERATION__GET_SUBTREE_CHUNK = 34,
-+  SR__OPERATION__SET_ITEM = 40,
-+  SR__OPERATION__DELETE_ITEM = 41,
-+  SR__OPERATION__MOVE_ITEM = 42,
-+  SR__OPERATION__SET_ITEM_STR = 43,
-+  SR__OPERATION__VALIDATE = 50,
-+  SR__OPERATION__COMMIT = 51,
-+  SR__OPERATION__DISCARD_CHANGES = 52,
-+  SR__OPERATION__COPY_CONFIG = 53,
-+  SR__OPERATION__LOCK = 60,
-+  SR__OPERATION__UNLOCK = 61,
-+  SR__OPERATION__SUBSCRIBE = 70,
-+  SR__OPERATION__UNSUBSCRIBE = 71,
-+  SR__OPERATION__CHECK_ENABLED_RUNNING = 72,
-+  SR__OPERATION__GET_CHANGES = 73,
-+  SR__OPERATION__DATA_PROVIDE = 80,
-+  SR__OPERATION__CHECK_EXEC_PERMISSION = 81,
-+  SR__OPERATION__RPC = 82,
-+  SR__OPERATION__ACTION = 83,
-+  SR__OPERATION__EVENT_NOTIF = 84,
-+  SR__OPERATION__EVENT_NOTIF_REPLAY = 85,
-+  SR__OPERATION__UNSUBSCRIBE_DESTINATION = 101,
-+  SR__OPERATION__COMMIT_TIMEOUT = 102,
-+  SR__OPERATION__OPER_DATA_TIMEOUT = 103,
-+  SR__OPERATION__INTERNAL_STATE_DATA = 104,
-+  SR__OPERATION__NOTIF_STORE_CLEANUP = 105,
-+  SR__OPERATION__DELAYED_MSG = 106,
-+  SR__OPERATION__NACM_RELOAD = 107
-+    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(SR__OPERATION)
-+} Sr__Operation;
-+
-+/* --- messages --- */
-+
-+/*
-+ **
-+ * @brief Value of an item stored (or to be stored) in the datastore.
-+ * Can be mapped to sr_val_t data structure from sysrepo library API.
-+ */
-+struct  _Sr__Value
-+{
-+  ProtobufCMessage base;
-+  char *xpath;
-+  Sr__Value__Types type;
-+  protobuf_c_boolean dflt;
-+  char *binary_val;
-+  char *bits_val;
-+  protobuf_c_boolean has_bool_val;
-+  protobuf_c_boolean bool_val;
-+  protobuf_c_boolean has_decimal64_val;
-+  double decimal64_val;
-+  char *enum_val;
-+  char *identityref_val;
-+  char *instanceid_val;
-+  protobuf_c_boolean has_int8_val;
-+  int32_t int8_val;
-+  protobuf_c_boolean has_int16_val;
-+  int32_t int16_val;
-+  protobuf_c_boolean has_int32_val;
-+  int32_t int32_val;
-+  protobuf_c_boolean has_int64_val;
-+  int64_t int64_val;
-+  char *string_val;
-+  protobuf_c_boolean has_uint8_val;
-+  uint32_t uint8_val;
-+  protobuf_c_boolean has_uint16_val;
-+  uint32_t uint16_val;
-+  protobuf_c_boolean has_uint32_val;
-+  uint32_t uint32_val;
-+  protobuf_c_boolean has_uint64_val;
-+  uint64_t uint64_val;
-+  char *anyxml_val;
-+  char *anydata_val;
-+};
-+#define SR__VALUE__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__value__descriptor) \
-+    , NULL, 0, 0, NULL, NULL, 0,0, 0,0, NULL, NULL, NULL, 0,0, 0,0, 0,0, 0,0, NULL, 0,0, 0,0, 0,0, 0,0, NULL, NULL }
-+
-+
-+/*
-+ **
-+ * @brief Item stored (or to be stored) in the datastore represented as a tree node
-+ * reflecting module schema. Can be mapped to sr_node_t data structure from sysrepo library API.
-+ */
-+struct  _Sr__Node
-+{
-+  ProtobufCMessage base;
-+  /*
-+   **< Value of the node; member *xpath* is used to store node's name. 
-+   */
-+  Sr__Value *value;
-+  /*
-+   **< Name of the module that defines scheme of this node. 
-+   */
-+  char *module_name;
-+  /*
-+   **< Direct descendands of this node. 
-+   */
-+  size_t n_children;
-+  Sr__Node **children;
-+};
-+#define SR__NODE__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__node__descriptor) \
-+    , NULL, NULL, 0,NULL }
-+
-+
-+/*
-+ **
-+ * @brief Error message retuned from the Sysrepo Engine.
-+ */
-+struct  _Sr__Error
-+{
-+  ProtobufCMessage base;
-+  char *message;
-+  char *xpath;
-+};
-+#define SR__ERROR__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__error__descriptor) \
-+    , NULL, NULL }
-+
-+
-+/*
-+ **
-+ * @brief Request for starting a session. Sent by sr_session_start API call.
-+ */
-+struct  _Sr__SessionStartReq
-+{
-+  ProtobufCMessage base;
-+  Sr__DataStore datastore;
-+  char *user_name;
-+  /*
-+   **< Bitwise OR of SessionFlags. 
-+   */
-+  uint32_t options;
-+  /*
-+   **< Applicable if SESS_NOTIFICATION was specified. 
-+   */
-+  protobuf_c_boolean has_commit_id;
-+  uint32_t commit_id;
-+};
-+#define SR__SESSION_START_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__session_start_req__descriptor) \
-+    , 0, NULL, 0, 0,0 }
-+
-+
-+/*
-+ **
-+ * @brief Response to session_start request.
-+ */
-+struct  _Sr__SessionStartResp
-+{
-+  ProtobufCMessage base;
-+  uint32_t session_id;
-+};
-+#define SR__SESSION_START_RESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__session_start_resp__descriptor) \
-+    , 0 }
-+
-+
-+/*
-+ **
-+ * @brief Request for stopping the session. Sent by sr_session_stop API call.
-+ */
-+struct  _Sr__SessionStopReq
-+{
-+  ProtobufCMessage base;
-+  uint32_t session_id;
-+};
-+#define SR__SESSION_STOP_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__session_stop_req__descriptor) \
-+    , 0 }
-+
-+
-+/*
-+ **
-+ * @brief Response to session_stop request.
-+ */
-+struct  _Sr__SessionStopResp
-+{
-+  ProtobufCMessage base;
-+  uint32_t session_id;
-+};
-+#define SR__SESSION_STOP_RESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__session_stop_resp__descriptor) \
-+    , 0 }
-+
-+
-+/*
-+ **
-+ * @brief Refreshes configuration data cached within the session.
-+ * Sent by sr_session_refresh API call.
-+ */
-+struct  _Sr__SessionRefreshReq
-+{
-+  ProtobufCMessage base;
-+};
-+#define SR__SESSION_REFRESH_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__session_refresh_req__descriptor) \
-+     }
-+
-+
-+/*
-+ **
-+ * @brief Response to sr_session_refresh request.
-+ */
-+struct  _Sr__SessionRefreshResp
-+{
-+  ProtobufCMessage base;
-+  size_t n_errors;
-+  Sr__Error **errors;
-+};
-+#define SR__SESSION_REFRESH_RESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__session_refresh_resp__descriptor) \
-+    , 0,NULL }
-+
-+
-+/*
-+ **
-+ * @brief Checks aliveness and validity of the session & connection tied to it.
-+ * Sent by sr_session_check API call.
-+ */
-+struct  _Sr__SessionCheckReq
-+{
-+  ProtobufCMessage base;
-+};
-+#define SR__SESSION_CHECK_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__session_check_req__descriptor) \
-+     }
-+
-+
-+/*
-+ **
-+ * @brief Response to sr_session_check request.
-+ */
-+struct  _Sr__SessionCheckResp
-+{
-+  ProtobufCMessage base;
-+  size_t n_errors;
-+  Sr__Error **errors;
-+};
-+#define SR__SESSION_CHECK_RESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__session_check_resp__descriptor) \
-+    , 0,NULL }
-+
-+
-+/*
-+ **
-+ * @brief Changes the datastore to which the session is tied to.
-+ */
-+struct  _Sr__SessionSwitchDsReq
-+{
-+  ProtobufCMessage base;
-+  Sr__DataStore datastore;
-+};
-+#define SR__SESSION_SWITCH_DS_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__session_switch_ds_req__descriptor) \
-+    , 0 }
-+
-+
-+/*
-+ **
-+ * @brief Response to sr_session_switch_ds request.
-+ */
-+struct  _Sr__SessionSwitchDsResp
-+{
-+  ProtobufCMessage base;
-+};
-+#define SR__SESSION_SWITCH_DS_RESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__session_switch_ds_resp__descriptor) \
-+     }
-+
-+
-+/*
-+ **
-+ * @brief Request for modification of session options.
-+ */
-+struct  _Sr__SessionSetOptsReq
-+{
-+  ProtobufCMessage base;
-+  uint32_t options;
-+};
-+#define SR__SESSION_SET_OPTS_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__session_set_opts_req__descriptor) \
-+    , 0 }
-+
-+
-+/*
-+ **
-+ * @brief Response to sr_session_set_options.
-+ */
-+struct  _Sr__SessionSetOptsResp
-+{
-+  ProtobufCMessage base;
-+};
-+#define SR__SESSION_SET_OPTS_RESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__session_set_opts_resp__descriptor) \
-+     }
-+
-+
-+/*
-+ **
-+ * @brief Request to verify version compatibility.
-+ */
-+struct  _Sr__VersionVerifyReq
-+{
-+  ProtobufCMessage base;
-+  char *soname;
-+};
-+#define SR__VERSION_VERIFY_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__version_verify_req__descriptor) \
-+    , NULL }
-+
-+
-+/*
-+ **
-+ * @brief Response to version verification.
-+ */
-+struct  _Sr__VersionVerifyResp
-+{
-+  ProtobufCMessage base;
-+  /*
-+   **< server-side SONAME version in case of versions incompatibility. 
-+   */
-+  char *soname;
-+};
-+#define SR__VERSION_VERIFY_RESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__version_verify_resp__descriptor) \
-+    , NULL }
-+
-+
-+/*
-+ **
-+ * @brief Schema revision details.
-+ */
-+struct  _Sr__SchemaRevision
-+{
-+  ProtobufCMessage base;
-+  /*
-+   **< Latest revision date of the module. 
-+   */
-+  char *revision;
-+  /*
-+   **< Absolute path to file where the schema is stored (YANG format). 
-+   */
-+  char *file_path_yang;
-+  /*
-+   **< Absolute path to file where the schema is stored (.yin format). 
-+   */
-+  char *file_path_yin;
-+};
-+#define SR__SCHEMA_REVISION__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__schema_revision__descriptor) \
-+    , NULL, NULL, NULL }
-+
-+
-+/*
-+ **
-+ * @brief Schema submodule information.
-+ */
-+struct  _Sr__SchemaSubmodule
-+{
-+  ProtobufCMessage base;
-+  /*
-+   **< Submodule name 
-+   */
-+  char *submodule_name;
-+  /*
-+   **< Revision of the submodule 
-+   */
-+  Sr__SchemaRevision *revision;
-+};
-+#define SR__SCHEMA_SUBMODULE__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__schema_submodule__descriptor) \
-+    , NULL, NULL }
-+
-+
-+/*
-+ **
-+ * @brief Information about a schema installed in sysrepo datastore.
-+ */
-+struct  _Sr__Schema
-+{
-+  ProtobufCMessage base;
-+  /*
-+   **< Name of the module. 
-+   */
-+  char *module_name;
-+  /*
-+   **< Namespace of the module. 
-+   */
-+  char *ns;
-+  /*
-+   **< Prefix of he module. 
-+   */
-+  char *prefix;
-+  /*
-+   **< TRUE only for explicitly installed modules (those are always implemented). 
-+   */
-+  protobuf_c_boolean installed;
-+  /*
-+   **< TRUE for implemented modules (do not have to be installed if they have augments,
-+   *deviations or are targets for leafrefs of other implemented modules). 
-+   */
-+  protobuf_c_boolean implemented;
-+  /*
-+   **< Revision of the module
-+   */
-+  Sr__SchemaRevision *revision;
-+  /*
-+   **< Submodules 
-+   */
-+  size_t n_submodules;
-+  Sr__SchemaSubmodule **submodules;
-+  /*
-+   **< Features enabled for the module 
-+   */
-+  size_t n_enabled_features;
-+  char **enabled_features;
-+};
-+#define SR__SCHEMA__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__schema__descriptor) \
-+    , NULL, NULL, NULL, 0, 0, NULL, 0,NULL, 0,NULL }
-+
-+
-+/*
-+ **
-+ * @brief Retrieves an array of schemas installed in the sysrepo datastore.
-+ * Sent by sr_list_schemas API call.
-+ */
-+struct  _Sr__ListSchemasReq
-+{
-+  ProtobufCMessage base;
-+};
-+#define SR__LIST_SCHEMAS_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__list_schemas_req__descriptor) \
-+     }
-+
-+
-+/*
-+ **
-+ * @brief Response to sr_list_schemas request.
-+ */
-+struct  _Sr__ListSchemasResp
-+{
-+  ProtobufCMessage base;
-+  size_t n_schemas;
-+  Sr__Schema **schemas;
-+};
-+#define SR__LIST_SCHEMAS_RESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__list_schemas_resp__descriptor) \
-+    , 0,NULL }
-+
-+
-+/*
-+ **
-+ * @brief Retrieves the content of specified schema file.
-+ * Sent by sr_get_schema API call.
-+ */
-+struct  _Sr__GetSchemaReq
-+{
-+  ProtobufCMessage base;
-+  char *module_name;
-+  char *revision;
-+  char *submodule_name;
-+  char *submodule_revision;
-+  protobuf_c_boolean yang_format;
-+};
-+#define SR__GET_SCHEMA_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__get_schema_req__descriptor) \
-+    , NULL, NULL, NULL, NULL, 0 }
-+
-+
-+/*
-+ **
-+ * @brief Response to sr_get_schema request.
-+ */
-+struct  _Sr__GetSchemaResp
-+{
-+  ProtobufCMessage base;
-+  char *schema_content;
-+};
-+#define SR__GET_SCHEMA_RESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__get_schema_resp__descriptor) \
-+    , NULL }
-+
-+
-+/*
-+ **
-+ * @brief Retrieves a single data element stored under provided path.
-+ * Sent by sr_get_item API call.
-+ */
-+struct  _Sr__GetItemReq
-+{
-+  ProtobufCMessage base;
-+  char *xpath;
-+};
-+#define SR__GET_ITEM_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__get_item_req__descriptor) \
-+    , NULL }
-+
-+
-+/*
-+ **
-+ * @brief Response to get_item request.
-+ */
-+struct  _Sr__GetItemResp
-+{
-+  ProtobufCMessage base;
-+  Sr__Value *value;
-+};
-+#define SR__GET_ITEM_RESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__get_item_resp__descriptor) \
-+    , NULL }
-+
-+
-+/*
-+ **
-+ * @brief Retrieves an array of data elements stored under provided path.
-+ * Sent by sr_get_items and sr_get_items_iter API calls.
-+ */
-+struct  _Sr__GetItemsReq
-+{
-+  ProtobufCMessage base;
-+  char *xpath;
-+  /*
-+   * The options below are applicable only for sr_get_items_iter
-+   * (not set by sr_get_items).
-+   */
-+  protobuf_c_boolean has_limit;
-+  uint32_t limit;
-+  protobuf_c_boolean has_offset;
-+  uint32_t offset;
-+};
-+#define SR__GET_ITEMS_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__get_items_req__descriptor) \
-+    , NULL, 0,0, 0,0 }
-+
-+
-+/*
-+ **
-+ * @brief Response to get_items / sr_get_items_iter request.
-+ */
-+struct  _Sr__GetItemsResp
-+{
-+  ProtobufCMessage base;
-+  size_t n_values;
-+  Sr__Value **values;
-+};
-+#define SR__GET_ITEMS_RESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__get_items_resp__descriptor) \
-+    , 0,NULL }
-+
-+
-+/*
-+ **
-+ * @brief Retrieves a single subtree whose root is stored under provided path.
-+ * Sent by sr_get_subtree API call.
-+ */
-+struct  _Sr__GetSubtreeReq
-+{
-+  ProtobufCMessage base;
-+  char *xpath;
-+};
-+#define SR__GET_SUBTREE_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__get_subtree_req__descriptor) \
-+    , NULL }
-+
-+
-+/*
-+ **
-+ * @brief Response to sr_get_subtree request.
-+ */
-+struct  _Sr__GetSubtreeResp
-+{
-+  ProtobufCMessage base;
-+  Sr__Node *tree;
-+};
-+#define SR__GET_SUBTREE_RESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__get_subtree_resp__descriptor) \
-+    , NULL }
-+
-+
-+/*
-+ **
-+ * @brief Retrieves an array of subtrees whose root nodes match provided path.
-+ * Sent by sr_get_subtrees API call.
-+ */
-+struct  _Sr__GetSubtreesReq
-+{
-+  ProtobufCMessage base;
-+  char *xpath;
-+};
-+#define SR__GET_SUBTREES_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__get_subtrees_req__descriptor) \
-+    , NULL }
-+
-+
-+/*
-+ **
-+ * @brief Response to sr_get_subtrees request.
-+ */
-+struct  _Sr__GetSubtreesResp
-+{
-+  ProtobufCMessage base;
-+  size_t n_trees;
-+  Sr__Node **trees;
-+};
-+#define SR__GET_SUBTREES_RESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__get_subtrees_resp__descriptor) \
-+    , 0,NULL }
-+
-+
-+/*
-+ **
-+ * @brief Retrieves a chunk of a single or multiple subtrees.
-+ * A subtree chunk is also a tree, where the root node is the node referenced by XPath,
-+ * the next level consists of its children skipping the first "slice_offset" nodes and including
-+ * at most "slice_limit" nodes, while the remaining (depth_limit-2) levels always start with
-+ * the first child (slice_offset is ignored) and include at most "child_limit" nodes.
-+ * The chunk consists of at most "depth_limit" levels.
-+ * @note Order of child nodes depends on the libyang implementation.
-+ */
-+struct  _Sr__GetSubtreeChunkReq
-+{
-+  ProtobufCMessage base;
-+  char *xpath;
-+  protobuf_c_boolean single;
-+  uint32_t slice_offset;
-+  uint32_t slice_width;
-+  uint32_t child_limit;
-+  uint32_t depth_limit;
-+};
-+#define SR__GET_SUBTREE_CHUNK_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__get_subtree_chunk_req__descriptor) \
-+    , NULL, 0, 0, 0, 0, 0 }
-+
-+
-+/*
-+ **
-+ * @brief Response to sr_get_subtree_chunk request.
-+ */
-+struct  _Sr__GetSubtreeChunkResp
-+{
-+  ProtobufCMessage base;
-+  /*
-+   **< JSON node-id of the root node for each subtree chunk 
-+   */
-+  size_t n_xpath;
-+  char **xpath;
-+  /*
-+   **< first chunk may carry mutliple trees 
-+   */
-+  size_t n_chunk;
-+  Sr__Node **chunk;
-+};
-+#define SR__GET_SUBTREE_CHUNK_RESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__get_subtree_chunk_resp__descriptor) \
-+    , 0,NULL, 0,NULL }
-+
-+
-+/*
-+ **
-+ * @brief Sets the value of the leaf, leaf-list or presence container.
-+ * Sent by sr_set_item API call.
-+ */
-+struct  _Sr__SetItemReq
-+{
-+  ProtobufCMessage base;
-+  char *xpath;
-+  Sr__Value *value;
-+  /*
-+   **< Bitwise OR of EditFlags 
-+   */
-+  uint32_t options;
-+};
-+#define SR__SET_ITEM_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__set_item_req__descriptor) \
-+    , NULL, NULL, 0 }
-+
-+
-+/*
-+ **
-+ * @brief Response to sr_set_item request.
-+ */
-+struct  _Sr__SetItemResp
-+{
-+  ProtobufCMessage base;
-+};
-+#define SR__SET_ITEM_RESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__set_item_resp__descriptor) \
-+     }
-+
-+
-+/*
-+ **
-+ * @brief Sets the value of the leaf, leaf-list or presence container.
-+ * The value is transferred as string.
-+ * Sent by sr_set_item_str API call.
-+ */
-+struct  _Sr__SetItemStrReq
-+{
-+  ProtobufCMessage base;
-+  char *xpath;
-+  char *value;
-+  /*
-+   **< Bitwise OR of EditFlags 
-+   */
-+  uint32_t options;
-+};
-+#define SR__SET_ITEM_STR_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__set_item_str_req__descriptor) \
-+    , NULL, NULL, 0 }
-+
-+
-+/*
-+ **
-+ * @brief Response to sr_set_item_str request.
-+ */
-+struct  _Sr__SetItemStrResp
-+{
-+  ProtobufCMessage base;
-+};
-+#define SR__SET_ITEM_STR_RESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__set_item_str_resp__descriptor) \
-+     }
-+
-+
-+/*
-+ **
-+ * @brief Deletes the nodes under the specified xpath.
-+ * Sent by sr_delete_item API call.
-+ */
-+struct  _Sr__DeleteItemReq
-+{
-+  ProtobufCMessage base;
-+  char *xpath;
-+  /*
-+   **< Bitwise OR of EditFlags 
-+   */
-+  uint32_t options;
-+};
-+#define SR__DELETE_ITEM_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__delete_item_req__descriptor) \
-+    , NULL, 0 }
-+
-+
-+/*
-+ **
-+ * @brief Response to sr_delete_item request.
-+ */
-+struct  _Sr__DeleteItemResp
-+{
-+  ProtobufCMessage base;
-+};
-+#define SR__DELETE_ITEM_RESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__delete_item_resp__descriptor) \
-+     }
-+
-+
-+/*
-+ **
-+ * @brief Move the instance of an ordered list in specified direction.
-+ * Sent by sr_move_item API call.
-+ */
-+struct  _Sr__MoveItemReq
-+{
-+  ProtobufCMessage base;
-+  char *xpath;
-+  Sr__MoveItemReq__MovePosition position;
-+  char *relative_item;
-+};
-+#define SR__MOVE_ITEM_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__move_item_req__descriptor) \
-+    , NULL, 0, NULL }
-+
-+
-+/*
-+ **
-+ * @brief Response to sr_move_item request.
-+ */
-+struct  _Sr__MoveItemResp
-+{
-+  ProtobufCMessage base;
-+};
-+#define SR__MOVE_ITEM_RESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__move_item_resp__descriptor) \
-+     }
-+
-+
-+/*
-+ **
-+ * @brief Perform the validation of changes made in current session, but do not
-+ * commit nor discard them. Sent by sr_validate API call.
-+ */
-+struct  _Sr__ValidateReq
-+{
-+  ProtobufCMessage base;
-+};
-+#define SR__VALIDATE_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__validate_req__descriptor) \
-+     }
-+
-+
-+/*
-+ **
-+ * @brief Response to sr_validate request.
-+ */
-+struct  _Sr__ValidateResp
-+{
-+  ProtobufCMessage base;
-+  size_t n_errors;
-+  Sr__Error **errors;
-+};
-+#define SR__VALIDATE_RESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__validate_resp__descriptor) \
-+    , 0,NULL }
-+
-+
-+/*
-+ **
-+ * @brief Apply changes made in current session.
-+ * Sent by sr_commit API call.
-+ */
-+struct  _Sr__CommitReq
-+{
-+  ProtobufCMessage base;
-+};
-+#define SR__COMMIT_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__commit_req__descriptor) \
-+     }
-+
-+
-+/*
-+ **
-+ * @brief Response to sr_commit request.
-+ */
-+struct  _Sr__CommitResp
-+{
-+  ProtobufCMessage base;
-+  size_t n_errors;
-+  Sr__Error **errors;
-+};
-+#define SR__COMMIT_RESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__commit_resp__descriptor) \
-+    , 0,NULL }
-+
-+
-+/*
-+ **
-+ * @brief Discard non-committed changes made in current session.
-+ * Sent by sr_discard_changes API call.
-+ */
-+struct  _Sr__DiscardChangesReq
-+{
-+  ProtobufCMessage base;
-+};
-+#define SR__DISCARD_CHANGES_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__discard_changes_req__descriptor) \
-+     }
-+
-+
-+/*
-+ **
-+ * @brief Response to sr_discard_changes request.
-+ */
-+struct  _Sr__DiscardChangesResp
-+{
-+  ProtobufCMessage base;
-+};
-+#define SR__DISCARD_CHANGES_RESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__discard_changes_resp__descriptor) \
-+     }
-+
-+
-+/*
-+ **
-+ * @brief Replaces an entire configuration datastore  with the contents of
-+ * another complete configuration datastore. Sent by sr_copy_config request.
-+ */
-+struct  _Sr__CopyConfigReq
-+{
-+  ProtobufCMessage base;
-+  Sr__DataStore src_datastore;
-+  Sr__DataStore dst_datastore;
-+  /*
-+   **< If not specified, the operation is performed on all
-+   *modules that are currently active in the source datastore 
-+   */
-+  char *module_name;
-+};
-+#define SR__COPY_CONFIG_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__copy_config_req__descriptor) \
-+    , 0, 0, NULL }
-+
-+
-+/*
-+ **
-+ * @brief Response to sr_copy_config request.
-+ */
-+struct  _Sr__CopyConfigResp
-+{
-+  ProtobufCMessage base;
-+  size_t n_errors;
-+  Sr__Error **errors;
-+};
-+#define SR__COPY_CONFIG_RESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__copy_config_resp__descriptor) \
-+    , 0,NULL }
-+
-+
-+/*
-+ **
-+ * @brief Locks specified data model or the datastore which the session is tied to.
-+ * Sent by sr_lock_datastore and sr_lock_model API calls.
-+ */
-+struct  _Sr__LockReq
-+{
-+  ProtobufCMessage base;
-+  /*
-+   **< If module name is not set, LockReq locks whole datastore. 
-+   */
-+  char *module_name;
-+};
-+#define SR__LOCK_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__lock_req__descriptor) \
-+    , NULL }
-+
-+
-+/*
-+ **
-+ * @brief Response to sr_lock_datastore or sr_lock_model request.
-+ */
-+struct  _Sr__LockResp
-+{
-+  ProtobufCMessage base;
-+};
-+#define SR__LOCK_RESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__lock_resp__descriptor) \
-+     }
-+
-+
-+/*
-+ **
-+ * @brief Unlocks specified data model or the datastore which the session is tied to.
-+ * Sent by sr_unlock_datastore and sr_unlock_model API calls.
-+ */
-+struct  _Sr__UnlockReq
-+{
-+  ProtobufCMessage base;
-+  /*
-+   **< If module name is not set, UnlockReq unlocks whole datastore. 
-+   */
-+  char *module_name;
-+};
-+#define SR__UNLOCK_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__unlock_req__descriptor) \
-+    , NULL }
-+
-+
-+/*
-+ **
-+ * @brief Response to sr_lock_datastore or sr_lock_model request.
-+ */
-+struct  _Sr__UnlockResp
-+{
-+  ProtobufCMessage base;
-+};
-+#define SR__UNLOCK_RESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__unlock_resp__descriptor) \
-+     }
-+
-+
-+struct  _Sr__SubscribeReq
-+{
-+  ProtobufCMessage base;
-+  Sr__SubscriptionType type;
-+  char *destination;
-+  uint32_t subscription_id;
-+  char *module_name;
-+  char *xpath;
-+  protobuf_c_boolean has_notif_event;
-+  Sr__NotificationEvent notif_event;
-+  protobuf_c_boolean has_priority;
-+  uint32_t priority;
-+  protobuf_c_boolean has_enable_running;
-+  protobuf_c_boolean enable_running;
-+  protobuf_c_boolean has_enable_event;
-+  protobuf_c_boolean enable_event;
-+  Sr__ApiVariant api_variant;
-+};
-+#define SR__SUBSCRIBE_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__subscribe_req__descriptor) \
-+    , 0, NULL, 0, NULL, NULL, 0,0, 0,0, 0,0, 0,0, 0 }
-+
-+
-+struct  _Sr__SubscribeResp
-+{
-+  ProtobufCMessage base;
-+};
-+#define SR__SUBSCRIBE_RESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__subscribe_resp__descriptor) \
-+     }
-+
-+
-+struct  _Sr__UnsubscribeReq
-+{
-+  ProtobufCMessage base;
-+  Sr__SubscriptionType type;
-+  char *destination;
-+  uint32_t subscription_id;
-+  char *module_name;
-+};
-+#define SR__UNSUBSCRIBE_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__unsubscribe_req__descriptor) \
-+    , 0, NULL, 0, NULL }
-+
-+
-+struct  _Sr__UnsubscribeResp
-+{
-+  ProtobufCMessage base;
-+};
-+#define SR__UNSUBSCRIBE_RESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__unsubscribe_resp__descriptor) \
-+     }
-+
-+
-+/*
-+ **
-+ * @brief Checks whether the module has any enabled subtree.
-+ * Sent by sr_check_enabled_running.
-+ */
-+struct  _Sr__CheckEnabledRunningReq
-+{
-+  ProtobufCMessage base;
-+  char *module_name;
-+};
-+#define SR__CHECK_ENABLED_RUNNING_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__check_enabled_running_req__descriptor) \
-+    , NULL }
-+
-+
-+struct  _Sr__CheckEnabledRunningResp
-+{
-+  ProtobufCMessage base;
-+  protobuf_c_boolean enabled;
-+};
-+#define SR__CHECK_ENABLED_RUNNING_RESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__check_enabled_running_resp__descriptor) \
-+    , 0 }
-+
-+
-+struct  _Sr__ModuleInstallNotification
-+{
-+  ProtobufCMessage base;
-+  char *module_name;
-+  char *revision;
-+  Sr__ModuleState state;
-+};
-+#define SR__MODULE_INSTALL_NOTIFICATION__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__module_install_notification__descriptor) \
-+    , NULL, NULL, 0 }
-+
-+
-+struct  _Sr__FeatureEnableNotification
-+{
-+  ProtobufCMessage base;
-+  char *module_name;
-+  char *feature_name;
-+  protobuf_c_boolean enabled;
-+};
-+#define SR__FEATURE_ENABLE_NOTIFICATION__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__feature_enable_notification__descriptor) \
-+    , NULL, NULL, 0 }
-+
-+
-+struct  _Sr__ModuleChangeNotification
-+{
-+  ProtobufCMessage base;
-+  Sr__NotificationEvent event;
-+  char *module_name;
-+};
-+#define SR__MODULE_CHANGE_NOTIFICATION__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__module_change_notification__descriptor) \
-+    , 0, NULL }
-+
-+
-+struct  _Sr__SubtreeChangeNotification
-+{
-+  ProtobufCMessage base;
-+  Sr__NotificationEvent event;
-+  char *xpath;
-+};
-+#define SR__SUBTREE_CHANGE_NOTIFICATION__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__subtree_change_notification__descriptor) \
-+    , 0, NULL }
-+
-+
-+struct  _Sr__Change
-+{
-+  ProtobufCMessage base;
-+  Sr__ChangeOperation changeoperation;
-+  Sr__Value *new_value;
-+  Sr__Value *old_value;
-+};
-+#define SR__CHANGE__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__change__descriptor) \
-+    , 0, NULL, NULL }
-+
-+
-+/*
-+ **
-+ * @brief Retrieves an array of changes made under provided path.
-+ * Sent by sr_get_changes_iter or sr_get_change_next API calls.
-+ */
-+struct  _Sr__GetChangesReq
-+{
-+  ProtobufCMessage base;
-+  char *xpath;
-+  uint32_t limit;
-+  uint32_t offset;
-+};
-+#define SR__GET_CHANGES_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__get_changes_req__descriptor) \
-+    , NULL, 0, 0 }
-+
-+
-+/*
-+ **
-+ * @brief Response to get_changes request.
-+ */
-+struct  _Sr__GetChangesResp
-+{
-+  ProtobufCMessage base;
-+  size_t n_changes;
-+  Sr__Change **changes;
-+};
-+#define SR__GET_CHANGES_RESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__get_changes_resp__descriptor) \
-+    , 0,NULL }
-+
-+
-+/*
-+ **
-+ * @brief Sends a request to check if the owner of this session is authorized to invoke
-+ * the protocol operation referenced by the xpath.
-+ * Sent by sr_check_exec_permission.
-+ */
-+struct  _Sr__CheckExecPermReq
-+{
-+  ProtobufCMessage base;
-+  char *xpath;
-+};
-+#define SR__CHECK_EXEC_PERM_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__check_exec_perm_req__descriptor) \
-+    , NULL }
-+
-+
-+/*
-+ **
-+ * @brief Response to sr_check_exec_permission request.
-+ */
-+struct  _Sr__CheckExecPermResp
-+{
-+  ProtobufCMessage base;
-+  protobuf_c_boolean permitted;
-+};
-+#define SR__CHECK_EXEC_PERM_RESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__check_exec_perm_resp__descriptor) \
-+    , 0 }
-+
-+
-+/*
-+ **
-+ * @brief Sends a RPC / action request into the datastore, will be delivered to the RPC subscriber.
-+ * Sent by sr_rpc_send / sr_rpc_send_tree and sr_action_send / sr_action_send_tree API calls.
-+ */
-+struct  _Sr__RPCReq
-+{
-+  ProtobufCMessage base;
-+  protobuf_c_boolean action;
-+  char *xpath;
-+  /*
-+   **< which API variant was used to send RPC req. 
-+   */
-+  Sr__ApiVariant orig_api_variant;
-+  size_t n_input;
-+  Sr__Value **input;
-+  size_t n_input_tree;
-+  Sr__Node **input_tree;
-+  char *subscriber_address;
-+  protobuf_c_boolean has_subscription_id;
-+  uint32_t subscription_id;
-+};
-+#define SR__RPCREQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__rpcreq__descriptor) \
-+    , 0, NULL, 0, 0,NULL, 0,NULL, NULL, 0,0 }
-+
-+
-+/*
-+ **
-+ * @brief Response to sr_rpc_send / sr_rpc_send_tree or sr_action_send / sr_action_send_tree request.
-+ */
-+struct  _Sr__RPCResp
-+{
-+  ProtobufCMessage base;
-+  protobuf_c_boolean action;
-+  char *xpath;
-+  /*
-+   **< which API variant was used to send RPC req. 
-+   */
-+  Sr__ApiVariant orig_api_variant;
-+  size_t n_output;
-+  Sr__Value **output;
-+  size_t n_output_tree;
-+  Sr__Node **output_tree;
-+};
-+#define SR__RPCRESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__rpcresp__descriptor) \
-+    , 0, NULL, 0, 0,NULL, 0,NULL }
-+
-+
-+/*
-+ **
-+ * @brief Sends an event notification into the datastore, will be delivered to all notification subscribers.
-+ * Sent by sr_event_notif_send API call.
-+ */
-+struct  _Sr__EventNotifReq
-+{
-+  ProtobufCMessage base;
-+  Sr__EventNotifReq__NotifType type;
-+  /*
-+   **< Bitwise OR of NotifFlags. 
-+   */
-+  uint32_t options;
-+  char *xpath;
-+  size_t n_values;
-+  Sr__Value **values;
-+  size_t n_trees;
-+  Sr__Node **trees;
-+  uint64_t timestamp;
-+  char *subscriber_address;
-+  protobuf_c_boolean has_subscription_id;
-+  uint32_t subscription_id;
-+  protobuf_c_boolean do_not_send_reply;
-+};
-+#define SR__EVENT_NOTIF_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__event_notif_req__descriptor) \
-+    , 0, 0, NULL, 0,NULL, 0,NULL, 0, NULL, 0,0, 0 }
-+
-+
-+/*
-+ **
-+ * @brief Response to sr_event_notif_send request.
-+ */
-+struct  _Sr__EventNotifResp
-+{
-+  ProtobufCMessage base;
-+};
-+#define SR__EVENT_NOTIF_RESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__event_notif_resp__descriptor) \
-+     }
-+
-+
-+/*
-+ **
-+ * @brief Sends a request to replay event notifications stored in the datastore.
-+ * Sent by sr_event_notif_replay API call.
-+ */
-+struct  _Sr__EventNotifReplayReq
-+{
-+  ProtobufCMessage base;
-+  char *xpath;
-+  uint64_t start_time;
-+  uint64_t stop_time;
-+  char *subscriber_address;
-+  uint32_t subscription_id;
-+  Sr__ApiVariant api_variant;
-+};
-+#define SR__EVENT_NOTIF_REPLAY_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__event_notif_replay_req__descriptor) \
-+    , NULL, 0, 0, NULL, 0, 0 }
-+
-+
-+/*
-+ **
-+ * @brief Response to sr_event_notif_replay request.
-+ */
-+struct  _Sr__EventNotifReplayResp
-+{
-+  ProtobufCMessage base;
-+};
-+#define SR__EVENT_NOTIF_REPLAY_RESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__event_notif_replay_resp__descriptor) \
-+     }
-+
-+
-+/*
-+ **
-+ * @brief Requests operational data under given path form an operational data
-+ * provider.
-+ */
-+struct  _Sr__DataProvideReq
-+{
-+  ProtobufCMessage base;
-+  char *xpath;
-+  char *subscriber_address;
-+  uint32_t subscription_id;
-+  uint64_t request_id;
-+};
-+#define SR__DATA_PROVIDE_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__data_provide_req__descriptor) \
-+    , NULL, NULL, 0, 0 }
-+
-+
-+/*
-+ **
-+ * @brief Response to a request of operational data under given path form an
-+ * operational data provider.
-+ */
-+struct  _Sr__DataProvideResp
-+{
-+  ProtobufCMessage base;
-+  char *xpath;
-+  size_t n_values;
-+  Sr__Value **values;
-+  uint64_t request_id;
-+};
-+#define SR__DATA_PROVIDE_RESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__data_provide_resp__descriptor) \
-+    , NULL, 0,NULL, 0 }
-+
-+
-+/*
-+ **
-+ * @brief Requests installation / uinstallation of specified YANG model.
-+ * Sent by sr_module_install internal API calls.
-+ */
-+struct  _Sr__ModuleInstallReq
-+{
-+  ProtobufCMessage base;
-+  char *module_name;
-+  char *revision;
-+  char *file_name;
-+  protobuf_c_boolean installed;
-+};
-+#define SR__MODULE_INSTALL_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__module_install_req__descriptor) \
-+    , NULL, NULL, NULL, 0 }
-+
-+
-+/*
-+ **
-+ * @brief Response to sr_module_install request.
-+ */
-+struct  _Sr__ModuleInstallResp
-+{
-+  ProtobufCMessage base;
-+};
-+#define SR__MODULE_INSTALL_RESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__module_install_resp__descriptor) \
-+     }
-+
-+
-+/*
-+ **
-+ * @brief Requests enabling / disabling of specified YANG feature within the
-+ * YANG model. Sent by sr_feature_enable internal API calls.
-+ */
-+struct  _Sr__FeatureEnableReq
-+{
-+  ProtobufCMessage base;
-+  char *module_name;
-+  char *feature_name;
-+  protobuf_c_boolean enabled;
-+};
-+#define SR__FEATURE_ENABLE_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__feature_enable_req__descriptor) \
-+    , NULL, NULL, 0 }
-+
-+
-+/*
-+ **
-+ * @brief Response to sr_feature_enable request.
-+ */
-+struct  _Sr__FeatureEnableResp
-+{
-+  ProtobufCMessage base;
-+};
-+#define SR__FEATURE_ENABLE_RESP__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__feature_enable_resp__descriptor) \
-+     }
-+
-+
-+/*
-+ **
-+ * @brief Internal request to unsubscribe all subscriptions of a subscriber on given destination address.
-+ */
-+struct  _Sr__UnsubscribeDestinationReq
-+{
-+  ProtobufCMessage base;
-+  char *destination;
-+};
-+#define SR__UNSUBSCRIBE_DESTINATION_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__unsubscribe_destination_req__descriptor) \
-+    , NULL }
-+
-+
-+/*
-+ **
-+ * @brief Internal request to timeout a commit, if it hasn't been terminated yet.
-+ */
-+struct  _Sr__CommitTimeoutReq
-+{
-+  ProtobufCMessage base;
-+  uint32_t commit_id;
-+  protobuf_c_boolean expired;
-+};
-+#define SR__COMMIT_TIMEOUT_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__commit_timeout_req__descriptor) \
-+    , 0, 0 }
-+
-+
-+/*
-+ **
-+ * @brief Internal request to timeout a request for operational data, if it hasn't been terminated yet.
-+ */
-+struct  _Sr__OperDataTimeoutReq
-+{
-+  ProtobufCMessage base;
-+  uint64_t request_id;
-+};
-+#define SR__OPER_DATA_TIMEOUT_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__oper_data_timeout_req__descriptor) \
-+    , 0 }
-+
-+
-+/*
-+ **
-+ * @brief Internal request for internal state data (state data provided by Sysrepo Engine itself).
-+ */
-+struct  _Sr__InternalStateDataReq
-+{
-+  ProtobufCMessage base;
-+  uint64_t request_id;
-+  char *xpath;
-+};
-+#define SR__INTERNAL_STATE_DATA_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__internal_state_data_req__descriptor) \
-+    , 0, NULL }
-+
-+
-+/*
-+ **
-+ * @brief Internal request to cleanup aged notifications in the Notification Store.
-+ */
-+struct  _Sr__NotifStoreCleanupReq
-+{
-+  ProtobufCMessage base;
-+};
-+#define SR__NOTIF_STORE_CLEANUP_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__notif_store_cleanup_req__descriptor) \
-+     }
-+
-+
-+/*
-+ **
-+ * @brief Message to be delivered to the client after some timeout.
-+ */
-+struct  _Sr__DelayedMsgReq
-+{
-+  ProtobufCMessage base;
-+  Sr__Msg *message;
-+};
-+#define SR__DELAYED_MSG_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__delayed_msg_req__descriptor) \
-+    , NULL }
-+
-+
-+/*
-+ **
-+ * @brief Internal request to reload NACM configuration from the running datastore.
-+ */
-+struct  _Sr__NacmReloadReq
-+{
-+  ProtobufCMessage base;
-+};
-+#define SR__NACM_RELOAD_REQ__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__nacm_reload_req__descriptor) \
-+     }
-+
-+
-+/*
-+ **
-+ * @brief Request for an operation.
-+ */
-+struct  _Sr__Request
-+{
-+  ProtobufCMessage base;
-+  /*
-+   * Request ID used internally by sysrepo 
-+   */
-+  uint64_t _id;
-+  Sr__Operation operation;
-+  Sr__SessionStartReq *session_start_req;
-+  Sr__SessionStopReq *session_stop_req;
-+  Sr__SessionRefreshReq *session_refresh_req;
-+  Sr__SessionCheckReq *session_check_req;
-+  Sr__SessionSwitchDsReq *session_switch_ds_req;
-+  Sr__SessionSetOptsReq *session_set_opts_req;
-+  Sr__VersionVerifyReq *version_verify_req;
-+  Sr__ListSchemasReq *list_schemas_req;
-+  Sr__GetSchemaReq *get_schema_req;
-+  Sr__ModuleInstallReq *module_install_req;
-+  Sr__FeatureEnableReq *feature_enable_req;
-+  Sr__GetItemReq *get_item_req;
-+  Sr__GetItemsReq *get_items_req;
-+  Sr__GetSubtreeReq *get_subtree_req;
-+  Sr__GetSubtreesReq *get_subtrees_req;
-+  Sr__GetSubtreeChunkReq *get_subtree_chunk_req;
-+  Sr__SetItemReq *set_item_req;
-+  Sr__DeleteItemReq *delete_item_req;
-+  Sr__MoveItemReq *move_item_req;
-+  Sr__SetItemStrReq *set_item_str_req;
-+  Sr__ValidateReq *validate_req;
-+  Sr__CommitReq *commit_req;
-+  Sr__DiscardChangesReq *discard_changes_req;
-+  Sr__CopyConfigReq *copy_config_req;
-+  Sr__LockReq *lock_req;
-+  Sr__UnlockReq *unlock_req;
-+  Sr__SubscribeReq *subscribe_req;
-+  Sr__UnsubscribeReq *unsubscribe_req;
-+  Sr__CheckEnabledRunningReq *check_enabled_running_req;
-+  Sr__GetChangesReq *get_changes_req;
-+  Sr__DataProvideReq *data_provide_req;
-+  Sr__CheckExecPermReq *check_exec_perm_req;
-+  Sr__RPCReq *rpc_req;
-+  Sr__EventNotifReq *event_notif_req;
-+  Sr__EventNotifReplayReq *event_notif_replay_req;
-+};
-+#define SR__REQUEST__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__request__descriptor) \
-+    , 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }
-+
-+
-+/*
-+ **
-+ * @brief Response to the received request.
-+ */
-+struct  _Sr__Response
-+{
-+  ProtobufCMessage base;
-+  Sr__Operation operation;
-+  /*
-+   **< Result of the operation. 0 on success, non-zero values map to sr_error_t enum in sysrepo.h. 
-+   */
-+  uint32_t result;
-+  /*
-+   **< Additional error information. 
-+   */
-+  Sr__Error *error;
-+  Sr__SessionStartResp *session_start_resp;
-+  Sr__SessionStopResp *session_stop_resp;
-+  Sr__SessionRefreshResp *session_refresh_resp;
-+  Sr__SessionCheckResp *session_check_resp;
-+  Sr__SessionSwitchDsResp *session_switch_ds_resp;
-+  Sr__SessionSetOptsResp *session_set_opts_resp;
-+  Sr__VersionVerifyResp *version_verify_resp;
-+  Sr__ListSchemasResp *list_schemas_resp;
-+  Sr__GetSchemaResp *get_schema_resp;
-+  Sr__ModuleInstallResp *module_install_resp;
-+  Sr__FeatureEnableResp *feature_enable_resp;
-+  Sr__GetItemResp *get_item_resp;
-+  Sr__GetItemsResp *get_items_resp;
-+  Sr__GetSubtreeResp *get_subtree_resp;
-+  Sr__GetSubtreesResp *get_subtrees_resp;
-+  Sr__GetSubtreeChunkResp *get_subtree_chunk_resp;
-+  Sr__SetItemResp *set_item_resp;
-+  Sr__DeleteItemResp *delete_item_resp;
-+  Sr__MoveItemResp *move_item_resp;
-+  Sr__SetItemStrResp *set_item_str_resp;
-+  Sr__ValidateResp *validate_resp;
-+  Sr__CommitResp *commit_resp;
-+  Sr__DiscardChangesResp *discard_changes_resp;
-+  Sr__CopyConfigResp *copy_config_resp;
-+  Sr__LockResp *lock_resp;
-+  Sr__UnlockResp *unlock_resp;
-+  Sr__SubscribeResp *subscribe_resp;
-+  Sr__UnsubscribeResp *unsubscribe_resp;
-+  Sr__CheckEnabledRunningResp *check_enabled_running_resp;
-+  Sr__GetChangesResp *get_changes_resp;
-+  Sr__DataProvideResp *data_provide_resp;
-+  Sr__CheckExecPermResp *check_exec_perm_resp;
-+  Sr__RPCResp *rpc_resp;
-+  Sr__EventNotifResp *event_notif_resp;
-+  Sr__EventNotifReplayResp *event_notif_replay_resp;
-+};
-+#define SR__RESPONSE__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__response__descriptor) \
-+    , 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }
-+
-+
-+/*
-+ **
-+ * @brief Notification about an event that occurred in the datastore.
-+ */
-+struct  _Sr__Notification
-+{
-+  ProtobufCMessage base;
-+  Sr__SubscriptionType type;
-+  char *destination_address;
-+  char *source_address;
-+  uint32_t source_pid;
-+  uint32_t subscription_id;
-+  protobuf_c_boolean has_commit_id;
-+  uint32_t commit_id;
-+  Sr__ModuleInstallNotification *module_install_notif;
-+  Sr__FeatureEnableNotification *feature_enable_notif;
-+  Sr__ModuleChangeNotification *module_change_notif;
-+  Sr__SubtreeChangeNotification *subtree_change_notif;
-+};
-+#define SR__NOTIFICATION__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__notification__descriptor) \
-+    , 0, NULL, NULL, 0, 0, 0,0, NULL, NULL, NULL, NULL }
-+
-+
-+/*
-+ **
-+ * @brief Notification Acknowledgment.
-+ */
-+struct  _Sr__NotificationAck
-+{
-+  ProtobufCMessage base;
-+  /*
-+   **< Original notification. 
-+   */
-+  Sr__Notification *notif;
-+  /*
-+   **< Result of the notification (success / error code). 
-+   */
-+  uint32_t result;
-+  /*
-+   **< Additional error information. 
-+   */
-+  Sr__Error *error;
-+  /*
-+   **< If the result is error and this flag is set to true abort notification
-+   * will not be delivered to this subscriber
-+   * (Subscriber doesn't want notification about changes that he refused). 
-+   */
-+  protobuf_c_boolean do_not_send_abort;
-+};
-+#define SR__NOTIFICATION_ACK__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__notification_ack__descriptor) \
-+    , NULL, 0, NULL, 0 }
-+
-+
-+/*
-+ **
-+ * @brief Internal request sent by sysrepo. Should not be used from the public API.
-+ */
-+struct  _Sr__InternalRequest
-+{
-+  ProtobufCMessage base;
-+  Sr__Operation operation;
-+  protobuf_c_boolean has_postpone_timeout;
-+  uint32_t postpone_timeout;
-+  Sr__UnsubscribeDestinationReq *unsubscribe_dst_req;
-+  Sr__CommitTimeoutReq *commit_timeout_req;
-+  Sr__OperDataTimeoutReq *oper_data_timeout_req;
-+  Sr__InternalStateDataReq *internal_state_data_req;
-+  Sr__NotifStoreCleanupReq *notif_store_cleanup_req;
-+  Sr__DelayedMsgReq *delayed_msg_req;
-+  Sr__NacmReloadReq *nacm_reload_req;
-+};
-+#define SR__INTERNAL_REQUEST__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__internal_request__descriptor) \
-+    , 0, 0,0, NULL, NULL, NULL, NULL, NULL, NULL, NULL }
-+
-+
-+/*
-+ **
-+ * @brief Umbrella sysrepo message used for communication between sysrepo
-+ * engine and client library.
-+ */
-+struct  _Sr__Msg
-+{
-+  ProtobufCMessage base;
-+  /*
-+   **< Indicates type of the message. 
-+   */
-+  Sr__Msg__MsgType type;
-+  /*
-+   **< Session identifier. Can be 0 (value is ignored) for session_start and version_verify requests. 
-+   */
-+  uint32_t session_id;
-+  /*
-+   **< Filled in in case of type == REQUEST. 
-+   */
-+  Sr__Request *request;
-+  /*
-+   **< Filled in in case of type == RESPONSE. 
-+   */
-+  Sr__Response *response;
-+  /*
-+   **< Filled in in case of type == NOTIFICATION. 
-+   */
-+  Sr__Notification *notification;
-+  /*
-+   **< Filled in in case of type == NOTIFICATION_ACK 
-+   */
-+  Sr__NotificationAck *notification_ack;
-+  /*
-+   **< Filled in in case of type == INTERNAL. 
-+   */
-+  Sr__InternalRequest *internal_request;
-+  /*
-+   **< Not part of the protocol. Used internally by Sysrepo to store a pointer to memory context. 
-+   */
-+  uint64_t _sysrepo_mem_ctx;
-+};
-+#define SR__MSG__INIT \
-+ { PROTOBUF_C_MESSAGE_INIT (&sr__msg__descriptor) \
-+    , 0, 0, NULL, NULL, NULL, NULL, NULL, 0 }
-+
-+
-+/* Sr__Value methods */
-+void   sr__value__init
-+                     (Sr__Value         *message);
-+size_t sr__value__get_packed_size
-+                     (const Sr__Value   *message);
-+size_t sr__value__pack
-+                     (const Sr__Value   *message,
-+                      uint8_t             *out);
-+size_t sr__value__pack_to_buffer
-+                     (const Sr__Value   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__Value *
-+       sr__value__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__value__free_unpacked
-+                     (Sr__Value *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__Node methods */
-+void   sr__node__init
-+                     (Sr__Node         *message);
-+size_t sr__node__get_packed_size
-+                     (const Sr__Node   *message);
-+size_t sr__node__pack
-+                     (const Sr__Node   *message,
-+                      uint8_t             *out);
-+size_t sr__node__pack_to_buffer
-+                     (const Sr__Node   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__Node *
-+       sr__node__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__node__free_unpacked
-+                     (Sr__Node *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__Error methods */
-+void   sr__error__init
-+                     (Sr__Error         *message);
-+size_t sr__error__get_packed_size
-+                     (const Sr__Error   *message);
-+size_t sr__error__pack
-+                     (const Sr__Error   *message,
-+                      uint8_t             *out);
-+size_t sr__error__pack_to_buffer
-+                     (const Sr__Error   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__Error *
-+       sr__error__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__error__free_unpacked
-+                     (Sr__Error *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__SessionStartReq methods */
-+void   sr__session_start_req__init
-+                     (Sr__SessionStartReq         *message);
-+size_t sr__session_start_req__get_packed_size
-+                     (const Sr__SessionStartReq   *message);
-+size_t sr__session_start_req__pack
-+                     (const Sr__SessionStartReq   *message,
-+                      uint8_t             *out);
-+size_t sr__session_start_req__pack_to_buffer
-+                     (const Sr__SessionStartReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__SessionStartReq *
-+       sr__session_start_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__session_start_req__free_unpacked
-+                     (Sr__SessionStartReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__SessionStartResp methods */
-+void   sr__session_start_resp__init
-+                     (Sr__SessionStartResp         *message);
-+size_t sr__session_start_resp__get_packed_size
-+                     (const Sr__SessionStartResp   *message);
-+size_t sr__session_start_resp__pack
-+                     (const Sr__SessionStartResp   *message,
-+                      uint8_t             *out);
-+size_t sr__session_start_resp__pack_to_buffer
-+                     (const Sr__SessionStartResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__SessionStartResp *
-+       sr__session_start_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__session_start_resp__free_unpacked
-+                     (Sr__SessionStartResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__SessionStopReq methods */
-+void   sr__session_stop_req__init
-+                     (Sr__SessionStopReq         *message);
-+size_t sr__session_stop_req__get_packed_size
-+                     (const Sr__SessionStopReq   *message);
-+size_t sr__session_stop_req__pack
-+                     (const Sr__SessionStopReq   *message,
-+                      uint8_t             *out);
-+size_t sr__session_stop_req__pack_to_buffer
-+                     (const Sr__SessionStopReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__SessionStopReq *
-+       sr__session_stop_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__session_stop_req__free_unpacked
-+                     (Sr__SessionStopReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__SessionStopResp methods */
-+void   sr__session_stop_resp__init
-+                     (Sr__SessionStopResp         *message);
-+size_t sr__session_stop_resp__get_packed_size
-+                     (const Sr__SessionStopResp   *message);
-+size_t sr__session_stop_resp__pack
-+                     (const Sr__SessionStopResp   *message,
-+                      uint8_t             *out);
-+size_t sr__session_stop_resp__pack_to_buffer
-+                     (const Sr__SessionStopResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__SessionStopResp *
-+       sr__session_stop_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__session_stop_resp__free_unpacked
-+                     (Sr__SessionStopResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__SessionRefreshReq methods */
-+void   sr__session_refresh_req__init
-+                     (Sr__SessionRefreshReq         *message);
-+size_t sr__session_refresh_req__get_packed_size
-+                     (const Sr__SessionRefreshReq   *message);
-+size_t sr__session_refresh_req__pack
-+                     (const Sr__SessionRefreshReq   *message,
-+                      uint8_t             *out);
-+size_t sr__session_refresh_req__pack_to_buffer
-+                     (const Sr__SessionRefreshReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__SessionRefreshReq *
-+       sr__session_refresh_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__session_refresh_req__free_unpacked
-+                     (Sr__SessionRefreshReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__SessionRefreshResp methods */
-+void   sr__session_refresh_resp__init
-+                     (Sr__SessionRefreshResp         *message);
-+size_t sr__session_refresh_resp__get_packed_size
-+                     (const Sr__SessionRefreshResp   *message);
-+size_t sr__session_refresh_resp__pack
-+                     (const Sr__SessionRefreshResp   *message,
-+                      uint8_t             *out);
-+size_t sr__session_refresh_resp__pack_to_buffer
-+                     (const Sr__SessionRefreshResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__SessionRefreshResp *
-+       sr__session_refresh_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__session_refresh_resp__free_unpacked
-+                     (Sr__SessionRefreshResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__SessionCheckReq methods */
-+void   sr__session_check_req__init
-+                     (Sr__SessionCheckReq         *message);
-+size_t sr__session_check_req__get_packed_size
-+                     (const Sr__SessionCheckReq   *message);
-+size_t sr__session_check_req__pack
-+                     (const Sr__SessionCheckReq   *message,
-+                      uint8_t             *out);
-+size_t sr__session_check_req__pack_to_buffer
-+                     (const Sr__SessionCheckReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__SessionCheckReq *
-+       sr__session_check_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__session_check_req__free_unpacked
-+                     (Sr__SessionCheckReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__SessionCheckResp methods */
-+void   sr__session_check_resp__init
-+                     (Sr__SessionCheckResp         *message);
-+size_t sr__session_check_resp__get_packed_size
-+                     (const Sr__SessionCheckResp   *message);
-+size_t sr__session_check_resp__pack
-+                     (const Sr__SessionCheckResp   *message,
-+                      uint8_t             *out);
-+size_t sr__session_check_resp__pack_to_buffer
-+                     (const Sr__SessionCheckResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__SessionCheckResp *
-+       sr__session_check_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__session_check_resp__free_unpacked
-+                     (Sr__SessionCheckResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__SessionSwitchDsReq methods */
-+void   sr__session_switch_ds_req__init
-+                     (Sr__SessionSwitchDsReq         *message);
-+size_t sr__session_switch_ds_req__get_packed_size
-+                     (const Sr__SessionSwitchDsReq   *message);
-+size_t sr__session_switch_ds_req__pack
-+                     (const Sr__SessionSwitchDsReq   *message,
-+                      uint8_t             *out);
-+size_t sr__session_switch_ds_req__pack_to_buffer
-+                     (const Sr__SessionSwitchDsReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__SessionSwitchDsReq *
-+       sr__session_switch_ds_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__session_switch_ds_req__free_unpacked
-+                     (Sr__SessionSwitchDsReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__SessionSwitchDsResp methods */
-+void   sr__session_switch_ds_resp__init
-+                     (Sr__SessionSwitchDsResp         *message);
-+size_t sr__session_switch_ds_resp__get_packed_size
-+                     (const Sr__SessionSwitchDsResp   *message);
-+size_t sr__session_switch_ds_resp__pack
-+                     (const Sr__SessionSwitchDsResp   *message,
-+                      uint8_t             *out);
-+size_t sr__session_switch_ds_resp__pack_to_buffer
-+                     (const Sr__SessionSwitchDsResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__SessionSwitchDsResp *
-+       sr__session_switch_ds_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__session_switch_ds_resp__free_unpacked
-+                     (Sr__SessionSwitchDsResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__SessionSetOptsReq methods */
-+void   sr__session_set_opts_req__init
-+                     (Sr__SessionSetOptsReq         *message);
-+size_t sr__session_set_opts_req__get_packed_size
-+                     (const Sr__SessionSetOptsReq   *message);
-+size_t sr__session_set_opts_req__pack
-+                     (const Sr__SessionSetOptsReq   *message,
-+                      uint8_t             *out);
-+size_t sr__session_set_opts_req__pack_to_buffer
-+                     (const Sr__SessionSetOptsReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__SessionSetOptsReq *
-+       sr__session_set_opts_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__session_set_opts_req__free_unpacked
-+                     (Sr__SessionSetOptsReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__SessionSetOptsResp methods */
-+void   sr__session_set_opts_resp__init
-+                     (Sr__SessionSetOptsResp         *message);
-+size_t sr__session_set_opts_resp__get_packed_size
-+                     (const Sr__SessionSetOptsResp   *message);
-+size_t sr__session_set_opts_resp__pack
-+                     (const Sr__SessionSetOptsResp   *message,
-+                      uint8_t             *out);
-+size_t sr__session_set_opts_resp__pack_to_buffer
-+                     (const Sr__SessionSetOptsResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__SessionSetOptsResp *
-+       sr__session_set_opts_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__session_set_opts_resp__free_unpacked
-+                     (Sr__SessionSetOptsResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__VersionVerifyReq methods */
-+void   sr__version_verify_req__init
-+                     (Sr__VersionVerifyReq         *message);
-+size_t sr__version_verify_req__get_packed_size
-+                     (const Sr__VersionVerifyReq   *message);
-+size_t sr__version_verify_req__pack
-+                     (const Sr__VersionVerifyReq   *message,
-+                      uint8_t             *out);
-+size_t sr__version_verify_req__pack_to_buffer
-+                     (const Sr__VersionVerifyReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__VersionVerifyReq *
-+       sr__version_verify_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__version_verify_req__free_unpacked
-+                     (Sr__VersionVerifyReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__VersionVerifyResp methods */
-+void   sr__version_verify_resp__init
-+                     (Sr__VersionVerifyResp         *message);
-+size_t sr__version_verify_resp__get_packed_size
-+                     (const Sr__VersionVerifyResp   *message);
-+size_t sr__version_verify_resp__pack
-+                     (const Sr__VersionVerifyResp   *message,
-+                      uint8_t             *out);
-+size_t sr__version_verify_resp__pack_to_buffer
-+                     (const Sr__VersionVerifyResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__VersionVerifyResp *
-+       sr__version_verify_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__version_verify_resp__free_unpacked
-+                     (Sr__VersionVerifyResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__SchemaRevision methods */
-+void   sr__schema_revision__init
-+                     (Sr__SchemaRevision         *message);
-+size_t sr__schema_revision__get_packed_size
-+                     (const Sr__SchemaRevision   *message);
-+size_t sr__schema_revision__pack
-+                     (const Sr__SchemaRevision   *message,
-+                      uint8_t             *out);
-+size_t sr__schema_revision__pack_to_buffer
-+                     (const Sr__SchemaRevision   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__SchemaRevision *
-+       sr__schema_revision__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__schema_revision__free_unpacked
-+                     (Sr__SchemaRevision *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__SchemaSubmodule methods */
-+void   sr__schema_submodule__init
-+                     (Sr__SchemaSubmodule         *message);
-+size_t sr__schema_submodule__get_packed_size
-+                     (const Sr__SchemaSubmodule   *message);
-+size_t sr__schema_submodule__pack
-+                     (const Sr__SchemaSubmodule   *message,
-+                      uint8_t             *out);
-+size_t sr__schema_submodule__pack_to_buffer
-+                     (const Sr__SchemaSubmodule   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__SchemaSubmodule *
-+       sr__schema_submodule__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__schema_submodule__free_unpacked
-+                     (Sr__SchemaSubmodule *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__Schema methods */
-+void   sr__schema__init
-+                     (Sr__Schema         *message);
-+size_t sr__schema__get_packed_size
-+                     (const Sr__Schema   *message);
-+size_t sr__schema__pack
-+                     (const Sr__Schema   *message,
-+                      uint8_t             *out);
-+size_t sr__schema__pack_to_buffer
-+                     (const Sr__Schema   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__Schema *
-+       sr__schema__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__schema__free_unpacked
-+                     (Sr__Schema *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__ListSchemasReq methods */
-+void   sr__list_schemas_req__init
-+                     (Sr__ListSchemasReq         *message);
-+size_t sr__list_schemas_req__get_packed_size
-+                     (const Sr__ListSchemasReq   *message);
-+size_t sr__list_schemas_req__pack
-+                     (const Sr__ListSchemasReq   *message,
-+                      uint8_t             *out);
-+size_t sr__list_schemas_req__pack_to_buffer
-+                     (const Sr__ListSchemasReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__ListSchemasReq *
-+       sr__list_schemas_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__list_schemas_req__free_unpacked
-+                     (Sr__ListSchemasReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__ListSchemasResp methods */
-+void   sr__list_schemas_resp__init
-+                     (Sr__ListSchemasResp         *message);
-+size_t sr__list_schemas_resp__get_packed_size
-+                     (const Sr__ListSchemasResp   *message);
-+size_t sr__list_schemas_resp__pack
-+                     (const Sr__ListSchemasResp   *message,
-+                      uint8_t             *out);
-+size_t sr__list_schemas_resp__pack_to_buffer
-+                     (const Sr__ListSchemasResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__ListSchemasResp *
-+       sr__list_schemas_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__list_schemas_resp__free_unpacked
-+                     (Sr__ListSchemasResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__GetSchemaReq methods */
-+void   sr__get_schema_req__init
-+                     (Sr__GetSchemaReq         *message);
-+size_t sr__get_schema_req__get_packed_size
-+                     (const Sr__GetSchemaReq   *message);
-+size_t sr__get_schema_req__pack
-+                     (const Sr__GetSchemaReq   *message,
-+                      uint8_t             *out);
-+size_t sr__get_schema_req__pack_to_buffer
-+                     (const Sr__GetSchemaReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__GetSchemaReq *
-+       sr__get_schema_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__get_schema_req__free_unpacked
-+                     (Sr__GetSchemaReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__GetSchemaResp methods */
-+void   sr__get_schema_resp__init
-+                     (Sr__GetSchemaResp         *message);
-+size_t sr__get_schema_resp__get_packed_size
-+                     (const Sr__GetSchemaResp   *message);
-+size_t sr__get_schema_resp__pack
-+                     (const Sr__GetSchemaResp   *message,
-+                      uint8_t             *out);
-+size_t sr__get_schema_resp__pack_to_buffer
-+                     (const Sr__GetSchemaResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__GetSchemaResp *
-+       sr__get_schema_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__get_schema_resp__free_unpacked
-+                     (Sr__GetSchemaResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__GetItemReq methods */
-+void   sr__get_item_req__init
-+                     (Sr__GetItemReq         *message);
-+size_t sr__get_item_req__get_packed_size
-+                     (const Sr__GetItemReq   *message);
-+size_t sr__get_item_req__pack
-+                     (const Sr__GetItemReq   *message,
-+                      uint8_t             *out);
-+size_t sr__get_item_req__pack_to_buffer
-+                     (const Sr__GetItemReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__GetItemReq *
-+       sr__get_item_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__get_item_req__free_unpacked
-+                     (Sr__GetItemReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__GetItemResp methods */
-+void   sr__get_item_resp__init
-+                     (Sr__GetItemResp         *message);
-+size_t sr__get_item_resp__get_packed_size
-+                     (const Sr__GetItemResp   *message);
-+size_t sr__get_item_resp__pack
-+                     (const Sr__GetItemResp   *message,
-+                      uint8_t             *out);
-+size_t sr__get_item_resp__pack_to_buffer
-+                     (const Sr__GetItemResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__GetItemResp *
-+       sr__get_item_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__get_item_resp__free_unpacked
-+                     (Sr__GetItemResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__GetItemsReq methods */
-+void   sr__get_items_req__init
-+                     (Sr__GetItemsReq         *message);
-+size_t sr__get_items_req__get_packed_size
-+                     (const Sr__GetItemsReq   *message);
-+size_t sr__get_items_req__pack
-+                     (const Sr__GetItemsReq   *message,
-+                      uint8_t             *out);
-+size_t sr__get_items_req__pack_to_buffer
-+                     (const Sr__GetItemsReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__GetItemsReq *
-+       sr__get_items_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__get_items_req__free_unpacked
-+                     (Sr__GetItemsReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__GetItemsResp methods */
-+void   sr__get_items_resp__init
-+                     (Sr__GetItemsResp         *message);
-+size_t sr__get_items_resp__get_packed_size
-+                     (const Sr__GetItemsResp   *message);
-+size_t sr__get_items_resp__pack
-+                     (const Sr__GetItemsResp   *message,
-+                      uint8_t             *out);
-+size_t sr__get_items_resp__pack_to_buffer
-+                     (const Sr__GetItemsResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__GetItemsResp *
-+       sr__get_items_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__get_items_resp__free_unpacked
-+                     (Sr__GetItemsResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__GetSubtreeReq methods */
-+void   sr__get_subtree_req__init
-+                     (Sr__GetSubtreeReq         *message);
-+size_t sr__get_subtree_req__get_packed_size
-+                     (const Sr__GetSubtreeReq   *message);
-+size_t sr__get_subtree_req__pack
-+                     (const Sr__GetSubtreeReq   *message,
-+                      uint8_t             *out);
-+size_t sr__get_subtree_req__pack_to_buffer
-+                     (const Sr__GetSubtreeReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__GetSubtreeReq *
-+       sr__get_subtree_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__get_subtree_req__free_unpacked
-+                     (Sr__GetSubtreeReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__GetSubtreeResp methods */
-+void   sr__get_subtree_resp__init
-+                     (Sr__GetSubtreeResp         *message);
-+size_t sr__get_subtree_resp__get_packed_size
-+                     (const Sr__GetSubtreeResp   *message);
-+size_t sr__get_subtree_resp__pack
-+                     (const Sr__GetSubtreeResp   *message,
-+                      uint8_t             *out);
-+size_t sr__get_subtree_resp__pack_to_buffer
-+                     (const Sr__GetSubtreeResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__GetSubtreeResp *
-+       sr__get_subtree_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__get_subtree_resp__free_unpacked
-+                     (Sr__GetSubtreeResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__GetSubtreesReq methods */
-+void   sr__get_subtrees_req__init
-+                     (Sr__GetSubtreesReq         *message);
-+size_t sr__get_subtrees_req__get_packed_size
-+                     (const Sr__GetSubtreesReq   *message);
-+size_t sr__get_subtrees_req__pack
-+                     (const Sr__GetSubtreesReq   *message,
-+                      uint8_t             *out);
-+size_t sr__get_subtrees_req__pack_to_buffer
-+                     (const Sr__GetSubtreesReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__GetSubtreesReq *
-+       sr__get_subtrees_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__get_subtrees_req__free_unpacked
-+                     (Sr__GetSubtreesReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__GetSubtreesResp methods */
-+void   sr__get_subtrees_resp__init
-+                     (Sr__GetSubtreesResp         *message);
-+size_t sr__get_subtrees_resp__get_packed_size
-+                     (const Sr__GetSubtreesResp   *message);
-+size_t sr__get_subtrees_resp__pack
-+                     (const Sr__GetSubtreesResp   *message,
-+                      uint8_t             *out);
-+size_t sr__get_subtrees_resp__pack_to_buffer
-+                     (const Sr__GetSubtreesResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__GetSubtreesResp *
-+       sr__get_subtrees_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__get_subtrees_resp__free_unpacked
-+                     (Sr__GetSubtreesResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__GetSubtreeChunkReq methods */
-+void   sr__get_subtree_chunk_req__init
-+                     (Sr__GetSubtreeChunkReq         *message);
-+size_t sr__get_subtree_chunk_req__get_packed_size
-+                     (const Sr__GetSubtreeChunkReq   *message);
-+size_t sr__get_subtree_chunk_req__pack
-+                     (const Sr__GetSubtreeChunkReq   *message,
-+                      uint8_t             *out);
-+size_t sr__get_subtree_chunk_req__pack_to_buffer
-+                     (const Sr__GetSubtreeChunkReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__GetSubtreeChunkReq *
-+       sr__get_subtree_chunk_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__get_subtree_chunk_req__free_unpacked
-+                     (Sr__GetSubtreeChunkReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__GetSubtreeChunkResp methods */
-+void   sr__get_subtree_chunk_resp__init
-+                     (Sr__GetSubtreeChunkResp         *message);
-+size_t sr__get_subtree_chunk_resp__get_packed_size
-+                     (const Sr__GetSubtreeChunkResp   *message);
-+size_t sr__get_subtree_chunk_resp__pack
-+                     (const Sr__GetSubtreeChunkResp   *message,
-+                      uint8_t             *out);
-+size_t sr__get_subtree_chunk_resp__pack_to_buffer
-+                     (const Sr__GetSubtreeChunkResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__GetSubtreeChunkResp *
-+       sr__get_subtree_chunk_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__get_subtree_chunk_resp__free_unpacked
-+                     (Sr__GetSubtreeChunkResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__SetItemReq methods */
-+void   sr__set_item_req__init
-+                     (Sr__SetItemReq         *message);
-+size_t sr__set_item_req__get_packed_size
-+                     (const Sr__SetItemReq   *message);
-+size_t sr__set_item_req__pack
-+                     (const Sr__SetItemReq   *message,
-+                      uint8_t             *out);
-+size_t sr__set_item_req__pack_to_buffer
-+                     (const Sr__SetItemReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__SetItemReq *
-+       sr__set_item_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__set_item_req__free_unpacked
-+                     (Sr__SetItemReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__SetItemResp methods */
-+void   sr__set_item_resp__init
-+                     (Sr__SetItemResp         *message);
-+size_t sr__set_item_resp__get_packed_size
-+                     (const Sr__SetItemResp   *message);
-+size_t sr__set_item_resp__pack
-+                     (const Sr__SetItemResp   *message,
-+                      uint8_t             *out);
-+size_t sr__set_item_resp__pack_to_buffer
-+                     (const Sr__SetItemResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__SetItemResp *
-+       sr__set_item_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__set_item_resp__free_unpacked
-+                     (Sr__SetItemResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__SetItemStrReq methods */
-+void   sr__set_item_str_req__init
-+                     (Sr__SetItemStrReq         *message);
-+size_t sr__set_item_str_req__get_packed_size
-+                     (const Sr__SetItemStrReq   *message);
-+size_t sr__set_item_str_req__pack
-+                     (const Sr__SetItemStrReq   *message,
-+                      uint8_t             *out);
-+size_t sr__set_item_str_req__pack_to_buffer
-+                     (const Sr__SetItemStrReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__SetItemStrReq *
-+       sr__set_item_str_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__set_item_str_req__free_unpacked
-+                     (Sr__SetItemStrReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__SetItemStrResp methods */
-+void   sr__set_item_str_resp__init
-+                     (Sr__SetItemStrResp         *message);
-+size_t sr__set_item_str_resp__get_packed_size
-+                     (const Sr__SetItemStrResp   *message);
-+size_t sr__set_item_str_resp__pack
-+                     (const Sr__SetItemStrResp   *message,
-+                      uint8_t             *out);
-+size_t sr__set_item_str_resp__pack_to_buffer
-+                     (const Sr__SetItemStrResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__SetItemStrResp *
-+       sr__set_item_str_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__set_item_str_resp__free_unpacked
-+                     (Sr__SetItemStrResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__DeleteItemReq methods */
-+void   sr__delete_item_req__init
-+                     (Sr__DeleteItemReq         *message);
-+size_t sr__delete_item_req__get_packed_size
-+                     (const Sr__DeleteItemReq   *message);
-+size_t sr__delete_item_req__pack
-+                     (const Sr__DeleteItemReq   *message,
-+                      uint8_t             *out);
-+size_t sr__delete_item_req__pack_to_buffer
-+                     (const Sr__DeleteItemReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__DeleteItemReq *
-+       sr__delete_item_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__delete_item_req__free_unpacked
-+                     (Sr__DeleteItemReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__DeleteItemResp methods */
-+void   sr__delete_item_resp__init
-+                     (Sr__DeleteItemResp         *message);
-+size_t sr__delete_item_resp__get_packed_size
-+                     (const Sr__DeleteItemResp   *message);
-+size_t sr__delete_item_resp__pack
-+                     (const Sr__DeleteItemResp   *message,
-+                      uint8_t             *out);
-+size_t sr__delete_item_resp__pack_to_buffer
-+                     (const Sr__DeleteItemResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__DeleteItemResp *
-+       sr__delete_item_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__delete_item_resp__free_unpacked
-+                     (Sr__DeleteItemResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__MoveItemReq methods */
-+void   sr__move_item_req__init
-+                     (Sr__MoveItemReq         *message);
-+size_t sr__move_item_req__get_packed_size
-+                     (const Sr__MoveItemReq   *message);
-+size_t sr__move_item_req__pack
-+                     (const Sr__MoveItemReq   *message,
-+                      uint8_t             *out);
-+size_t sr__move_item_req__pack_to_buffer
-+                     (const Sr__MoveItemReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__MoveItemReq *
-+       sr__move_item_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__move_item_req__free_unpacked
-+                     (Sr__MoveItemReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__MoveItemResp methods */
-+void   sr__move_item_resp__init
-+                     (Sr__MoveItemResp         *message);
-+size_t sr__move_item_resp__get_packed_size
-+                     (const Sr__MoveItemResp   *message);
-+size_t sr__move_item_resp__pack
-+                     (const Sr__MoveItemResp   *message,
-+                      uint8_t             *out);
-+size_t sr__move_item_resp__pack_to_buffer
-+                     (const Sr__MoveItemResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__MoveItemResp *
-+       sr__move_item_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__move_item_resp__free_unpacked
-+                     (Sr__MoveItemResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__ValidateReq methods */
-+void   sr__validate_req__init
-+                     (Sr__ValidateReq         *message);
-+size_t sr__validate_req__get_packed_size
-+                     (const Sr__ValidateReq   *message);
-+size_t sr__validate_req__pack
-+                     (const Sr__ValidateReq   *message,
-+                      uint8_t             *out);
-+size_t sr__validate_req__pack_to_buffer
-+                     (const Sr__ValidateReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__ValidateReq *
-+       sr__validate_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__validate_req__free_unpacked
-+                     (Sr__ValidateReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__ValidateResp methods */
-+void   sr__validate_resp__init
-+                     (Sr__ValidateResp         *message);
-+size_t sr__validate_resp__get_packed_size
-+                     (const Sr__ValidateResp   *message);
-+size_t sr__validate_resp__pack
-+                     (const Sr__ValidateResp   *message,
-+                      uint8_t             *out);
-+size_t sr__validate_resp__pack_to_buffer
-+                     (const Sr__ValidateResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__ValidateResp *
-+       sr__validate_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__validate_resp__free_unpacked
-+                     (Sr__ValidateResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__CommitReq methods */
-+void   sr__commit_req__init
-+                     (Sr__CommitReq         *message);
-+size_t sr__commit_req__get_packed_size
-+                     (const Sr__CommitReq   *message);
-+size_t sr__commit_req__pack
-+                     (const Sr__CommitReq   *message,
-+                      uint8_t             *out);
-+size_t sr__commit_req__pack_to_buffer
-+                     (const Sr__CommitReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__CommitReq *
-+       sr__commit_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__commit_req__free_unpacked
-+                     (Sr__CommitReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__CommitResp methods */
-+void   sr__commit_resp__init
-+                     (Sr__CommitResp         *message);
-+size_t sr__commit_resp__get_packed_size
-+                     (const Sr__CommitResp   *message);
-+size_t sr__commit_resp__pack
-+                     (const Sr__CommitResp   *message,
-+                      uint8_t             *out);
-+size_t sr__commit_resp__pack_to_buffer
-+                     (const Sr__CommitResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__CommitResp *
-+       sr__commit_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__commit_resp__free_unpacked
-+                     (Sr__CommitResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__DiscardChangesReq methods */
-+void   sr__discard_changes_req__init
-+                     (Sr__DiscardChangesReq         *message);
-+size_t sr__discard_changes_req__get_packed_size
-+                     (const Sr__DiscardChangesReq   *message);
-+size_t sr__discard_changes_req__pack
-+                     (const Sr__DiscardChangesReq   *message,
-+                      uint8_t             *out);
-+size_t sr__discard_changes_req__pack_to_buffer
-+                     (const Sr__DiscardChangesReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__DiscardChangesReq *
-+       sr__discard_changes_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__discard_changes_req__free_unpacked
-+                     (Sr__DiscardChangesReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__DiscardChangesResp methods */
-+void   sr__discard_changes_resp__init
-+                     (Sr__DiscardChangesResp         *message);
-+size_t sr__discard_changes_resp__get_packed_size
-+                     (const Sr__DiscardChangesResp   *message);
-+size_t sr__discard_changes_resp__pack
-+                     (const Sr__DiscardChangesResp   *message,
-+                      uint8_t             *out);
-+size_t sr__discard_changes_resp__pack_to_buffer
-+                     (const Sr__DiscardChangesResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__DiscardChangesResp *
-+       sr__discard_changes_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__discard_changes_resp__free_unpacked
-+                     (Sr__DiscardChangesResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__CopyConfigReq methods */
-+void   sr__copy_config_req__init
-+                     (Sr__CopyConfigReq         *message);
-+size_t sr__copy_config_req__get_packed_size
-+                     (const Sr__CopyConfigReq   *message);
-+size_t sr__copy_config_req__pack
-+                     (const Sr__CopyConfigReq   *message,
-+                      uint8_t             *out);
-+size_t sr__copy_config_req__pack_to_buffer
-+                     (const Sr__CopyConfigReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__CopyConfigReq *
-+       sr__copy_config_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__copy_config_req__free_unpacked
-+                     (Sr__CopyConfigReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__CopyConfigResp methods */
-+void   sr__copy_config_resp__init
-+                     (Sr__CopyConfigResp         *message);
-+size_t sr__copy_config_resp__get_packed_size
-+                     (const Sr__CopyConfigResp   *message);
-+size_t sr__copy_config_resp__pack
-+                     (const Sr__CopyConfigResp   *message,
-+                      uint8_t             *out);
-+size_t sr__copy_config_resp__pack_to_buffer
-+                     (const Sr__CopyConfigResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__CopyConfigResp *
-+       sr__copy_config_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__copy_config_resp__free_unpacked
-+                     (Sr__CopyConfigResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__LockReq methods */
-+void   sr__lock_req__init
-+                     (Sr__LockReq         *message);
-+size_t sr__lock_req__get_packed_size
-+                     (const Sr__LockReq   *message);
-+size_t sr__lock_req__pack
-+                     (const Sr__LockReq   *message,
-+                      uint8_t             *out);
-+size_t sr__lock_req__pack_to_buffer
-+                     (const Sr__LockReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__LockReq *
-+       sr__lock_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__lock_req__free_unpacked
-+                     (Sr__LockReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__LockResp methods */
-+void   sr__lock_resp__init
-+                     (Sr__LockResp         *message);
-+size_t sr__lock_resp__get_packed_size
-+                     (const Sr__LockResp   *message);
-+size_t sr__lock_resp__pack
-+                     (const Sr__LockResp   *message,
-+                      uint8_t             *out);
-+size_t sr__lock_resp__pack_to_buffer
-+                     (const Sr__LockResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__LockResp *
-+       sr__lock_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__lock_resp__free_unpacked
-+                     (Sr__LockResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__UnlockReq methods */
-+void   sr__unlock_req__init
-+                     (Sr__UnlockReq         *message);
-+size_t sr__unlock_req__get_packed_size
-+                     (const Sr__UnlockReq   *message);
-+size_t sr__unlock_req__pack
-+                     (const Sr__UnlockReq   *message,
-+                      uint8_t             *out);
-+size_t sr__unlock_req__pack_to_buffer
-+                     (const Sr__UnlockReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__UnlockReq *
-+       sr__unlock_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__unlock_req__free_unpacked
-+                     (Sr__UnlockReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__UnlockResp methods */
-+void   sr__unlock_resp__init
-+                     (Sr__UnlockResp         *message);
-+size_t sr__unlock_resp__get_packed_size
-+                     (const Sr__UnlockResp   *message);
-+size_t sr__unlock_resp__pack
-+                     (const Sr__UnlockResp   *message,
-+                      uint8_t             *out);
-+size_t sr__unlock_resp__pack_to_buffer
-+                     (const Sr__UnlockResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__UnlockResp *
-+       sr__unlock_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__unlock_resp__free_unpacked
-+                     (Sr__UnlockResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__SubscribeReq methods */
-+void   sr__subscribe_req__init
-+                     (Sr__SubscribeReq         *message);
-+size_t sr__subscribe_req__get_packed_size
-+                     (const Sr__SubscribeReq   *message);
-+size_t sr__subscribe_req__pack
-+                     (const Sr__SubscribeReq   *message,
-+                      uint8_t             *out);
-+size_t sr__subscribe_req__pack_to_buffer
-+                     (const Sr__SubscribeReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__SubscribeReq *
-+       sr__subscribe_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__subscribe_req__free_unpacked
-+                     (Sr__SubscribeReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__SubscribeResp methods */
-+void   sr__subscribe_resp__init
-+                     (Sr__SubscribeResp         *message);
-+size_t sr__subscribe_resp__get_packed_size
-+                     (const Sr__SubscribeResp   *message);
-+size_t sr__subscribe_resp__pack
-+                     (const Sr__SubscribeResp   *message,
-+                      uint8_t             *out);
-+size_t sr__subscribe_resp__pack_to_buffer
-+                     (const Sr__SubscribeResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__SubscribeResp *
-+       sr__subscribe_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__subscribe_resp__free_unpacked
-+                     (Sr__SubscribeResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__UnsubscribeReq methods */
-+void   sr__unsubscribe_req__init
-+                     (Sr__UnsubscribeReq         *message);
-+size_t sr__unsubscribe_req__get_packed_size
-+                     (const Sr__UnsubscribeReq   *message);
-+size_t sr__unsubscribe_req__pack
-+                     (const Sr__UnsubscribeReq   *message,
-+                      uint8_t             *out);
-+size_t sr__unsubscribe_req__pack_to_buffer
-+                     (const Sr__UnsubscribeReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__UnsubscribeReq *
-+       sr__unsubscribe_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__unsubscribe_req__free_unpacked
-+                     (Sr__UnsubscribeReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__UnsubscribeResp methods */
-+void   sr__unsubscribe_resp__init
-+                     (Sr__UnsubscribeResp         *message);
-+size_t sr__unsubscribe_resp__get_packed_size
-+                     (const Sr__UnsubscribeResp   *message);
-+size_t sr__unsubscribe_resp__pack
-+                     (const Sr__UnsubscribeResp   *message,
-+                      uint8_t             *out);
-+size_t sr__unsubscribe_resp__pack_to_buffer
-+                     (const Sr__UnsubscribeResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__UnsubscribeResp *
-+       sr__unsubscribe_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__unsubscribe_resp__free_unpacked
-+                     (Sr__UnsubscribeResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__CheckEnabledRunningReq methods */
-+void   sr__check_enabled_running_req__init
-+                     (Sr__CheckEnabledRunningReq         *message);
-+size_t sr__check_enabled_running_req__get_packed_size
-+                     (const Sr__CheckEnabledRunningReq   *message);
-+size_t sr__check_enabled_running_req__pack
-+                     (const Sr__CheckEnabledRunningReq   *message,
-+                      uint8_t             *out);
-+size_t sr__check_enabled_running_req__pack_to_buffer
-+                     (const Sr__CheckEnabledRunningReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__CheckEnabledRunningReq *
-+       sr__check_enabled_running_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__check_enabled_running_req__free_unpacked
-+                     (Sr__CheckEnabledRunningReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__CheckEnabledRunningResp methods */
-+void   sr__check_enabled_running_resp__init
-+                     (Sr__CheckEnabledRunningResp         *message);
-+size_t sr__check_enabled_running_resp__get_packed_size
-+                     (const Sr__CheckEnabledRunningResp   *message);
-+size_t sr__check_enabled_running_resp__pack
-+                     (const Sr__CheckEnabledRunningResp   *message,
-+                      uint8_t             *out);
-+size_t sr__check_enabled_running_resp__pack_to_buffer
-+                     (const Sr__CheckEnabledRunningResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__CheckEnabledRunningResp *
-+       sr__check_enabled_running_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__check_enabled_running_resp__free_unpacked
-+                     (Sr__CheckEnabledRunningResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__ModuleInstallNotification methods */
-+void   sr__module_install_notification__init
-+                     (Sr__ModuleInstallNotification         *message);
-+size_t sr__module_install_notification__get_packed_size
-+                     (const Sr__ModuleInstallNotification   *message);
-+size_t sr__module_install_notification__pack
-+                     (const Sr__ModuleInstallNotification   *message,
-+                      uint8_t             *out);
-+size_t sr__module_install_notification__pack_to_buffer
-+                     (const Sr__ModuleInstallNotification   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__ModuleInstallNotification *
-+       sr__module_install_notification__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__module_install_notification__free_unpacked
-+                     (Sr__ModuleInstallNotification *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__FeatureEnableNotification methods */
-+void   sr__feature_enable_notification__init
-+                     (Sr__FeatureEnableNotification         *message);
-+size_t sr__feature_enable_notification__get_packed_size
-+                     (const Sr__FeatureEnableNotification   *message);
-+size_t sr__feature_enable_notification__pack
-+                     (const Sr__FeatureEnableNotification   *message,
-+                      uint8_t             *out);
-+size_t sr__feature_enable_notification__pack_to_buffer
-+                     (const Sr__FeatureEnableNotification   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__FeatureEnableNotification *
-+       sr__feature_enable_notification__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__feature_enable_notification__free_unpacked
-+                     (Sr__FeatureEnableNotification *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__ModuleChangeNotification methods */
-+void   sr__module_change_notification__init
-+                     (Sr__ModuleChangeNotification         *message);
-+size_t sr__module_change_notification__get_packed_size
-+                     (const Sr__ModuleChangeNotification   *message);
-+size_t sr__module_change_notification__pack
-+                     (const Sr__ModuleChangeNotification   *message,
-+                      uint8_t             *out);
-+size_t sr__module_change_notification__pack_to_buffer
-+                     (const Sr__ModuleChangeNotification   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__ModuleChangeNotification *
-+       sr__module_change_notification__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__module_change_notification__free_unpacked
-+                     (Sr__ModuleChangeNotification *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__SubtreeChangeNotification methods */
-+void   sr__subtree_change_notification__init
-+                     (Sr__SubtreeChangeNotification         *message);
-+size_t sr__subtree_change_notification__get_packed_size
-+                     (const Sr__SubtreeChangeNotification   *message);
-+size_t sr__subtree_change_notification__pack
-+                     (const Sr__SubtreeChangeNotification   *message,
-+                      uint8_t             *out);
-+size_t sr__subtree_change_notification__pack_to_buffer
-+                     (const Sr__SubtreeChangeNotification   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__SubtreeChangeNotification *
-+       sr__subtree_change_notification__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__subtree_change_notification__free_unpacked
-+                     (Sr__SubtreeChangeNotification *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__Change methods */
-+void   sr__change__init
-+                     (Sr__Change         *message);
-+size_t sr__change__get_packed_size
-+                     (const Sr__Change   *message);
-+size_t sr__change__pack
-+                     (const Sr__Change   *message,
-+                      uint8_t             *out);
-+size_t sr__change__pack_to_buffer
-+                     (const Sr__Change   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__Change *
-+       sr__change__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__change__free_unpacked
-+                     (Sr__Change *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__GetChangesReq methods */
-+void   sr__get_changes_req__init
-+                     (Sr__GetChangesReq         *message);
-+size_t sr__get_changes_req__get_packed_size
-+                     (const Sr__GetChangesReq   *message);
-+size_t sr__get_changes_req__pack
-+                     (const Sr__GetChangesReq   *message,
-+                      uint8_t             *out);
-+size_t sr__get_changes_req__pack_to_buffer
-+                     (const Sr__GetChangesReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__GetChangesReq *
-+       sr__get_changes_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__get_changes_req__free_unpacked
-+                     (Sr__GetChangesReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__GetChangesResp methods */
-+void   sr__get_changes_resp__init
-+                     (Sr__GetChangesResp         *message);
-+size_t sr__get_changes_resp__get_packed_size
-+                     (const Sr__GetChangesResp   *message);
-+size_t sr__get_changes_resp__pack
-+                     (const Sr__GetChangesResp   *message,
-+                      uint8_t             *out);
-+size_t sr__get_changes_resp__pack_to_buffer
-+                     (const Sr__GetChangesResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__GetChangesResp *
-+       sr__get_changes_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__get_changes_resp__free_unpacked
-+                     (Sr__GetChangesResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__CheckExecPermReq methods */
-+void   sr__check_exec_perm_req__init
-+                     (Sr__CheckExecPermReq         *message);
-+size_t sr__check_exec_perm_req__get_packed_size
-+                     (const Sr__CheckExecPermReq   *message);
-+size_t sr__check_exec_perm_req__pack
-+                     (const Sr__CheckExecPermReq   *message,
-+                      uint8_t             *out);
-+size_t sr__check_exec_perm_req__pack_to_buffer
-+                     (const Sr__CheckExecPermReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__CheckExecPermReq *
-+       sr__check_exec_perm_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__check_exec_perm_req__free_unpacked
-+                     (Sr__CheckExecPermReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__CheckExecPermResp methods */
-+void   sr__check_exec_perm_resp__init
-+                     (Sr__CheckExecPermResp         *message);
-+size_t sr__check_exec_perm_resp__get_packed_size
-+                     (const Sr__CheckExecPermResp   *message);
-+size_t sr__check_exec_perm_resp__pack
-+                     (const Sr__CheckExecPermResp   *message,
-+                      uint8_t             *out);
-+size_t sr__check_exec_perm_resp__pack_to_buffer
-+                     (const Sr__CheckExecPermResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__CheckExecPermResp *
-+       sr__check_exec_perm_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__check_exec_perm_resp__free_unpacked
-+                     (Sr__CheckExecPermResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__RPCReq methods */
-+void   sr__rpcreq__init
-+                     (Sr__RPCReq         *message);
-+size_t sr__rpcreq__get_packed_size
-+                     (const Sr__RPCReq   *message);
-+size_t sr__rpcreq__pack
-+                     (const Sr__RPCReq   *message,
-+                      uint8_t             *out);
-+size_t sr__rpcreq__pack_to_buffer
-+                     (const Sr__RPCReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__RPCReq *
-+       sr__rpcreq__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__rpcreq__free_unpacked
-+                     (Sr__RPCReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__RPCResp methods */
-+void   sr__rpcresp__init
-+                     (Sr__RPCResp         *message);
-+size_t sr__rpcresp__get_packed_size
-+                     (const Sr__RPCResp   *message);
-+size_t sr__rpcresp__pack
-+                     (const Sr__RPCResp   *message,
-+                      uint8_t             *out);
-+size_t sr__rpcresp__pack_to_buffer
-+                     (const Sr__RPCResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__RPCResp *
-+       sr__rpcresp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__rpcresp__free_unpacked
-+                     (Sr__RPCResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__EventNotifReq methods */
-+void   sr__event_notif_req__init
-+                     (Sr__EventNotifReq         *message);
-+size_t sr__event_notif_req__get_packed_size
-+                     (const Sr__EventNotifReq   *message);
-+size_t sr__event_notif_req__pack
-+                     (const Sr__EventNotifReq   *message,
-+                      uint8_t             *out);
-+size_t sr__event_notif_req__pack_to_buffer
-+                     (const Sr__EventNotifReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__EventNotifReq *
-+       sr__event_notif_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__event_notif_req__free_unpacked
-+                     (Sr__EventNotifReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__EventNotifResp methods */
-+void   sr__event_notif_resp__init
-+                     (Sr__EventNotifResp         *message);
-+size_t sr__event_notif_resp__get_packed_size
-+                     (const Sr__EventNotifResp   *message);
-+size_t sr__event_notif_resp__pack
-+                     (const Sr__EventNotifResp   *message,
-+                      uint8_t             *out);
-+size_t sr__event_notif_resp__pack_to_buffer
-+                     (const Sr__EventNotifResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__EventNotifResp *
-+       sr__event_notif_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__event_notif_resp__free_unpacked
-+                     (Sr__EventNotifResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__EventNotifReplayReq methods */
-+void   sr__event_notif_replay_req__init
-+                     (Sr__EventNotifReplayReq         *message);
-+size_t sr__event_notif_replay_req__get_packed_size
-+                     (const Sr__EventNotifReplayReq   *message);
-+size_t sr__event_notif_replay_req__pack
-+                     (const Sr__EventNotifReplayReq   *message,
-+                      uint8_t             *out);
-+size_t sr__event_notif_replay_req__pack_to_buffer
-+                     (const Sr__EventNotifReplayReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__EventNotifReplayReq *
-+       sr__event_notif_replay_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__event_notif_replay_req__free_unpacked
-+                     (Sr__EventNotifReplayReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__EventNotifReplayResp methods */
-+void   sr__event_notif_replay_resp__init
-+                     (Sr__EventNotifReplayResp         *message);
-+size_t sr__event_notif_replay_resp__get_packed_size
-+                     (const Sr__EventNotifReplayResp   *message);
-+size_t sr__event_notif_replay_resp__pack
-+                     (const Sr__EventNotifReplayResp   *message,
-+                      uint8_t             *out);
-+size_t sr__event_notif_replay_resp__pack_to_buffer
-+                     (const Sr__EventNotifReplayResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__EventNotifReplayResp *
-+       sr__event_notif_replay_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__event_notif_replay_resp__free_unpacked
-+                     (Sr__EventNotifReplayResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__DataProvideReq methods */
-+void   sr__data_provide_req__init
-+                     (Sr__DataProvideReq         *message);
-+size_t sr__data_provide_req__get_packed_size
-+                     (const Sr__DataProvideReq   *message);
-+size_t sr__data_provide_req__pack
-+                     (const Sr__DataProvideReq   *message,
-+                      uint8_t             *out);
-+size_t sr__data_provide_req__pack_to_buffer
-+                     (const Sr__DataProvideReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__DataProvideReq *
-+       sr__data_provide_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__data_provide_req__free_unpacked
-+                     (Sr__DataProvideReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__DataProvideResp methods */
-+void   sr__data_provide_resp__init
-+                     (Sr__DataProvideResp         *message);
-+size_t sr__data_provide_resp__get_packed_size
-+                     (const Sr__DataProvideResp   *message);
-+size_t sr__data_provide_resp__pack
-+                     (const Sr__DataProvideResp   *message,
-+                      uint8_t             *out);
-+size_t sr__data_provide_resp__pack_to_buffer
-+                     (const Sr__DataProvideResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__DataProvideResp *
-+       sr__data_provide_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__data_provide_resp__free_unpacked
-+                     (Sr__DataProvideResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__ModuleInstallReq methods */
-+void   sr__module_install_req__init
-+                     (Sr__ModuleInstallReq         *message);
-+size_t sr__module_install_req__get_packed_size
-+                     (const Sr__ModuleInstallReq   *message);
-+size_t sr__module_install_req__pack
-+                     (const Sr__ModuleInstallReq   *message,
-+                      uint8_t             *out);
-+size_t sr__module_install_req__pack_to_buffer
-+                     (const Sr__ModuleInstallReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__ModuleInstallReq *
-+       sr__module_install_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__module_install_req__free_unpacked
-+                     (Sr__ModuleInstallReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__ModuleInstallResp methods */
-+void   sr__module_install_resp__init
-+                     (Sr__ModuleInstallResp         *message);
-+size_t sr__module_install_resp__get_packed_size
-+                     (const Sr__ModuleInstallResp   *message);
-+size_t sr__module_install_resp__pack
-+                     (const Sr__ModuleInstallResp   *message,
-+                      uint8_t             *out);
-+size_t sr__module_install_resp__pack_to_buffer
-+                     (const Sr__ModuleInstallResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__ModuleInstallResp *
-+       sr__module_install_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__module_install_resp__free_unpacked
-+                     (Sr__ModuleInstallResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__FeatureEnableReq methods */
-+void   sr__feature_enable_req__init
-+                     (Sr__FeatureEnableReq         *message);
-+size_t sr__feature_enable_req__get_packed_size
-+                     (const Sr__FeatureEnableReq   *message);
-+size_t sr__feature_enable_req__pack
-+                     (const Sr__FeatureEnableReq   *message,
-+                      uint8_t             *out);
-+size_t sr__feature_enable_req__pack_to_buffer
-+                     (const Sr__FeatureEnableReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__FeatureEnableReq *
-+       sr__feature_enable_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__feature_enable_req__free_unpacked
-+                     (Sr__FeatureEnableReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__FeatureEnableResp methods */
-+void   sr__feature_enable_resp__init
-+                     (Sr__FeatureEnableResp         *message);
-+size_t sr__feature_enable_resp__get_packed_size
-+                     (const Sr__FeatureEnableResp   *message);
-+size_t sr__feature_enable_resp__pack
-+                     (const Sr__FeatureEnableResp   *message,
-+                      uint8_t             *out);
-+size_t sr__feature_enable_resp__pack_to_buffer
-+                     (const Sr__FeatureEnableResp   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__FeatureEnableResp *
-+       sr__feature_enable_resp__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__feature_enable_resp__free_unpacked
-+                     (Sr__FeatureEnableResp *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__UnsubscribeDestinationReq methods */
-+void   sr__unsubscribe_destination_req__init
-+                     (Sr__UnsubscribeDestinationReq         *message);
-+size_t sr__unsubscribe_destination_req__get_packed_size
-+                     (const Sr__UnsubscribeDestinationReq   *message);
-+size_t sr__unsubscribe_destination_req__pack
-+                     (const Sr__UnsubscribeDestinationReq   *message,
-+                      uint8_t             *out);
-+size_t sr__unsubscribe_destination_req__pack_to_buffer
-+                     (const Sr__UnsubscribeDestinationReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__UnsubscribeDestinationReq *
-+       sr__unsubscribe_destination_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__unsubscribe_destination_req__free_unpacked
-+                     (Sr__UnsubscribeDestinationReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__CommitTimeoutReq methods */
-+void   sr__commit_timeout_req__init
-+                     (Sr__CommitTimeoutReq         *message);
-+size_t sr__commit_timeout_req__get_packed_size
-+                     (const Sr__CommitTimeoutReq   *message);
-+size_t sr__commit_timeout_req__pack
-+                     (const Sr__CommitTimeoutReq   *message,
-+                      uint8_t             *out);
-+size_t sr__commit_timeout_req__pack_to_buffer
-+                     (const Sr__CommitTimeoutReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__CommitTimeoutReq *
-+       sr__commit_timeout_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__commit_timeout_req__free_unpacked
-+                     (Sr__CommitTimeoutReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__OperDataTimeoutReq methods */
-+void   sr__oper_data_timeout_req__init
-+                     (Sr__OperDataTimeoutReq         *message);
-+size_t sr__oper_data_timeout_req__get_packed_size
-+                     (const Sr__OperDataTimeoutReq   *message);
-+size_t sr__oper_data_timeout_req__pack
-+                     (const Sr__OperDataTimeoutReq   *message,
-+                      uint8_t             *out);
-+size_t sr__oper_data_timeout_req__pack_to_buffer
-+                     (const Sr__OperDataTimeoutReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__OperDataTimeoutReq *
-+       sr__oper_data_timeout_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__oper_data_timeout_req__free_unpacked
-+                     (Sr__OperDataTimeoutReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__InternalStateDataReq methods */
-+void   sr__internal_state_data_req__init
-+                     (Sr__InternalStateDataReq         *message);
-+size_t sr__internal_state_data_req__get_packed_size
-+                     (const Sr__InternalStateDataReq   *message);
-+size_t sr__internal_state_data_req__pack
-+                     (const Sr__InternalStateDataReq   *message,
-+                      uint8_t             *out);
-+size_t sr__internal_state_data_req__pack_to_buffer
-+                     (const Sr__InternalStateDataReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__InternalStateDataReq *
-+       sr__internal_state_data_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__internal_state_data_req__free_unpacked
-+                     (Sr__InternalStateDataReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__NotifStoreCleanupReq methods */
-+void   sr__notif_store_cleanup_req__init
-+                     (Sr__NotifStoreCleanupReq         *message);
-+size_t sr__notif_store_cleanup_req__get_packed_size
-+                     (const Sr__NotifStoreCleanupReq   *message);
-+size_t sr__notif_store_cleanup_req__pack
-+                     (const Sr__NotifStoreCleanupReq   *message,
-+                      uint8_t             *out);
-+size_t sr__notif_store_cleanup_req__pack_to_buffer
-+                     (const Sr__NotifStoreCleanupReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__NotifStoreCleanupReq *
-+       sr__notif_store_cleanup_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__notif_store_cleanup_req__free_unpacked
-+                     (Sr__NotifStoreCleanupReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__DelayedMsgReq methods */
-+void   sr__delayed_msg_req__init
-+                     (Sr__DelayedMsgReq         *message);
-+size_t sr__delayed_msg_req__get_packed_size
-+                     (const Sr__DelayedMsgReq   *message);
-+size_t sr__delayed_msg_req__pack
-+                     (const Sr__DelayedMsgReq   *message,
-+                      uint8_t             *out);
-+size_t sr__delayed_msg_req__pack_to_buffer
-+                     (const Sr__DelayedMsgReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__DelayedMsgReq *
-+       sr__delayed_msg_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__delayed_msg_req__free_unpacked
-+                     (Sr__DelayedMsgReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__NacmReloadReq methods */
-+void   sr__nacm_reload_req__init
-+                     (Sr__NacmReloadReq         *message);
-+size_t sr__nacm_reload_req__get_packed_size
-+                     (const Sr__NacmReloadReq   *message);
-+size_t sr__nacm_reload_req__pack
-+                     (const Sr__NacmReloadReq   *message,
-+                      uint8_t             *out);
-+size_t sr__nacm_reload_req__pack_to_buffer
-+                     (const Sr__NacmReloadReq   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__NacmReloadReq *
-+       sr__nacm_reload_req__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__nacm_reload_req__free_unpacked
-+                     (Sr__NacmReloadReq *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__Request methods */
-+void   sr__request__init
-+                     (Sr__Request         *message);
-+size_t sr__request__get_packed_size
-+                     (const Sr__Request   *message);
-+size_t sr__request__pack
-+                     (const Sr__Request   *message,
-+                      uint8_t             *out);
-+size_t sr__request__pack_to_buffer
-+                     (const Sr__Request   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__Request *
-+       sr__request__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__request__free_unpacked
-+                     (Sr__Request *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__Response methods */
-+void   sr__response__init
-+                     (Sr__Response         *message);
-+size_t sr__response__get_packed_size
-+                     (const Sr__Response   *message);
-+size_t sr__response__pack
-+                     (const Sr__Response   *message,
-+                      uint8_t             *out);
-+size_t sr__response__pack_to_buffer
-+                     (const Sr__Response   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__Response *
-+       sr__response__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__response__free_unpacked
-+                     (Sr__Response *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__Notification methods */
-+void   sr__notification__init
-+                     (Sr__Notification         *message);
-+size_t sr__notification__get_packed_size
-+                     (const Sr__Notification   *message);
-+size_t sr__notification__pack
-+                     (const Sr__Notification   *message,
-+                      uint8_t             *out);
-+size_t sr__notification__pack_to_buffer
-+                     (const Sr__Notification   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__Notification *
-+       sr__notification__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__notification__free_unpacked
-+                     (Sr__Notification *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__NotificationAck methods */
-+void   sr__notification_ack__init
-+                     (Sr__NotificationAck         *message);
-+size_t sr__notification_ack__get_packed_size
-+                     (const Sr__NotificationAck   *message);
-+size_t sr__notification_ack__pack
-+                     (const Sr__NotificationAck   *message,
-+                      uint8_t             *out);
-+size_t sr__notification_ack__pack_to_buffer
-+                     (const Sr__NotificationAck   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__NotificationAck *
-+       sr__notification_ack__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__notification_ack__free_unpacked
-+                     (Sr__NotificationAck *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__InternalRequest methods */
-+void   sr__internal_request__init
-+                     (Sr__InternalRequest         *message);
-+size_t sr__internal_request__get_packed_size
-+                     (const Sr__InternalRequest   *message);
-+size_t sr__internal_request__pack
-+                     (const Sr__InternalRequest   *message,
-+                      uint8_t             *out);
-+size_t sr__internal_request__pack_to_buffer
-+                     (const Sr__InternalRequest   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__InternalRequest *
-+       sr__internal_request__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__internal_request__free_unpacked
-+                     (Sr__InternalRequest *message,
-+                      ProtobufCAllocator *allocator);
-+/* Sr__Msg methods */
-+void   sr__msg__init
-+                     (Sr__Msg         *message);
-+size_t sr__msg__get_packed_size
-+                     (const Sr__Msg   *message);
-+size_t sr__msg__pack
-+                     (const Sr__Msg   *message,
-+                      uint8_t             *out);
-+size_t sr__msg__pack_to_buffer
-+                     (const Sr__Msg   *message,
-+                      ProtobufCBuffer     *buffer);
-+Sr__Msg *
-+       sr__msg__unpack
-+                     (ProtobufCAllocator  *allocator,
-+                      size_t               len,
-+                      const uint8_t       *data);
-+void   sr__msg__free_unpacked
-+                     (Sr__Msg *message,
-+                      ProtobufCAllocator *allocator);
-+/* --- per-message closures --- */
-+
-+typedef void (*Sr__Value_Closure)
-+                 (const Sr__Value *message,
-+                  void *closure_data);
-+typedef void (*Sr__Node_Closure)
-+                 (const Sr__Node *message,
-+                  void *closure_data);
-+typedef void (*Sr__Error_Closure)
-+                 (const Sr__Error *message,
-+                  void *closure_data);
-+typedef void (*Sr__SessionStartReq_Closure)
-+                 (const Sr__SessionStartReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__SessionStartResp_Closure)
-+                 (const Sr__SessionStartResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__SessionStopReq_Closure)
-+                 (const Sr__SessionStopReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__SessionStopResp_Closure)
-+                 (const Sr__SessionStopResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__SessionRefreshReq_Closure)
-+                 (const Sr__SessionRefreshReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__SessionRefreshResp_Closure)
-+                 (const Sr__SessionRefreshResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__SessionCheckReq_Closure)
-+                 (const Sr__SessionCheckReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__SessionCheckResp_Closure)
-+                 (const Sr__SessionCheckResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__SessionSwitchDsReq_Closure)
-+                 (const Sr__SessionSwitchDsReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__SessionSwitchDsResp_Closure)
-+                 (const Sr__SessionSwitchDsResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__SessionSetOptsReq_Closure)
-+                 (const Sr__SessionSetOptsReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__SessionSetOptsResp_Closure)
-+                 (const Sr__SessionSetOptsResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__VersionVerifyReq_Closure)
-+                 (const Sr__VersionVerifyReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__VersionVerifyResp_Closure)
-+                 (const Sr__VersionVerifyResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__SchemaRevision_Closure)
-+                 (const Sr__SchemaRevision *message,
-+                  void *closure_data);
-+typedef void (*Sr__SchemaSubmodule_Closure)
-+                 (const Sr__SchemaSubmodule *message,
-+                  void *closure_data);
-+typedef void (*Sr__Schema_Closure)
-+                 (const Sr__Schema *message,
-+                  void *closure_data);
-+typedef void (*Sr__ListSchemasReq_Closure)
-+                 (const Sr__ListSchemasReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__ListSchemasResp_Closure)
-+                 (const Sr__ListSchemasResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__GetSchemaReq_Closure)
-+                 (const Sr__GetSchemaReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__GetSchemaResp_Closure)
-+                 (const Sr__GetSchemaResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__GetItemReq_Closure)
-+                 (const Sr__GetItemReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__GetItemResp_Closure)
-+                 (const Sr__GetItemResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__GetItemsReq_Closure)
-+                 (const Sr__GetItemsReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__GetItemsResp_Closure)
-+                 (const Sr__GetItemsResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__GetSubtreeReq_Closure)
-+                 (const Sr__GetSubtreeReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__GetSubtreeResp_Closure)
-+                 (const Sr__GetSubtreeResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__GetSubtreesReq_Closure)
-+                 (const Sr__GetSubtreesReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__GetSubtreesResp_Closure)
-+                 (const Sr__GetSubtreesResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__GetSubtreeChunkReq_Closure)
-+                 (const Sr__GetSubtreeChunkReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__GetSubtreeChunkResp_Closure)
-+                 (const Sr__GetSubtreeChunkResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__SetItemReq_Closure)
-+                 (const Sr__SetItemReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__SetItemResp_Closure)
-+                 (const Sr__SetItemResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__SetItemStrReq_Closure)
-+                 (const Sr__SetItemStrReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__SetItemStrResp_Closure)
-+                 (const Sr__SetItemStrResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__DeleteItemReq_Closure)
-+                 (const Sr__DeleteItemReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__DeleteItemResp_Closure)
-+                 (const Sr__DeleteItemResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__MoveItemReq_Closure)
-+                 (const Sr__MoveItemReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__MoveItemResp_Closure)
-+                 (const Sr__MoveItemResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__ValidateReq_Closure)
-+                 (const Sr__ValidateReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__ValidateResp_Closure)
-+                 (const Sr__ValidateResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__CommitReq_Closure)
-+                 (const Sr__CommitReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__CommitResp_Closure)
-+                 (const Sr__CommitResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__DiscardChangesReq_Closure)
-+                 (const Sr__DiscardChangesReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__DiscardChangesResp_Closure)
-+                 (const Sr__DiscardChangesResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__CopyConfigReq_Closure)
-+                 (const Sr__CopyConfigReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__CopyConfigResp_Closure)
-+                 (const Sr__CopyConfigResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__LockReq_Closure)
-+                 (const Sr__LockReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__LockResp_Closure)
-+                 (const Sr__LockResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__UnlockReq_Closure)
-+                 (const Sr__UnlockReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__UnlockResp_Closure)
-+                 (const Sr__UnlockResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__SubscribeReq_Closure)
-+                 (const Sr__SubscribeReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__SubscribeResp_Closure)
-+                 (const Sr__SubscribeResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__UnsubscribeReq_Closure)
-+                 (const Sr__UnsubscribeReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__UnsubscribeResp_Closure)
-+                 (const Sr__UnsubscribeResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__CheckEnabledRunningReq_Closure)
-+                 (const Sr__CheckEnabledRunningReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__CheckEnabledRunningResp_Closure)
-+                 (const Sr__CheckEnabledRunningResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__ModuleInstallNotification_Closure)
-+                 (const Sr__ModuleInstallNotification *message,
-+                  void *closure_data);
-+typedef void (*Sr__FeatureEnableNotification_Closure)
-+                 (const Sr__FeatureEnableNotification *message,
-+                  void *closure_data);
-+typedef void (*Sr__ModuleChangeNotification_Closure)
-+                 (const Sr__ModuleChangeNotification *message,
-+                  void *closure_data);
-+typedef void (*Sr__SubtreeChangeNotification_Closure)
-+                 (const Sr__SubtreeChangeNotification *message,
-+                  void *closure_data);
-+typedef void (*Sr__Change_Closure)
-+                 (const Sr__Change *message,
-+                  void *closure_data);
-+typedef void (*Sr__GetChangesReq_Closure)
-+                 (const Sr__GetChangesReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__GetChangesResp_Closure)
-+                 (const Sr__GetChangesResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__CheckExecPermReq_Closure)
-+                 (const Sr__CheckExecPermReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__CheckExecPermResp_Closure)
-+                 (const Sr__CheckExecPermResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__RPCReq_Closure)
-+                 (const Sr__RPCReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__RPCResp_Closure)
-+                 (const Sr__RPCResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__EventNotifReq_Closure)
-+                 (const Sr__EventNotifReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__EventNotifResp_Closure)
-+                 (const Sr__EventNotifResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__EventNotifReplayReq_Closure)
-+                 (const Sr__EventNotifReplayReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__EventNotifReplayResp_Closure)
-+                 (const Sr__EventNotifReplayResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__DataProvideReq_Closure)
-+                 (const Sr__DataProvideReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__DataProvideResp_Closure)
-+                 (const Sr__DataProvideResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__ModuleInstallReq_Closure)
-+                 (const Sr__ModuleInstallReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__ModuleInstallResp_Closure)
-+                 (const Sr__ModuleInstallResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__FeatureEnableReq_Closure)
-+                 (const Sr__FeatureEnableReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__FeatureEnableResp_Closure)
-+                 (const Sr__FeatureEnableResp *message,
-+                  void *closure_data);
-+typedef void (*Sr__UnsubscribeDestinationReq_Closure)
-+                 (const Sr__UnsubscribeDestinationReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__CommitTimeoutReq_Closure)
-+                 (const Sr__CommitTimeoutReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__OperDataTimeoutReq_Closure)
-+                 (const Sr__OperDataTimeoutReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__InternalStateDataReq_Closure)
-+                 (const Sr__InternalStateDataReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__NotifStoreCleanupReq_Closure)
-+                 (const Sr__NotifStoreCleanupReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__DelayedMsgReq_Closure)
-+                 (const Sr__DelayedMsgReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__NacmReloadReq_Closure)
-+                 (const Sr__NacmReloadReq *message,
-+                  void *closure_data);
-+typedef void (*Sr__Request_Closure)
-+                 (const Sr__Request *message,
-+                  void *closure_data);
-+typedef void (*Sr__Response_Closure)
-+                 (const Sr__Response *message,
-+                  void *closure_data);
-+typedef void (*Sr__Notification_Closure)
-+                 (const Sr__Notification *message,
-+                  void *closure_data);
-+typedef void (*Sr__NotificationAck_Closure)
-+                 (const Sr__NotificationAck *message,
-+                  void *closure_data);
-+typedef void (*Sr__InternalRequest_Closure)
-+                 (const Sr__InternalRequest *message,
-+                  void *closure_data);
-+typedef void (*Sr__Msg_Closure)
-+                 (const Sr__Msg *message,
-+                  void *closure_data);
-+
-+/* --- services --- */
-+
-+
-+/* --- descriptors --- */
-+
-+extern const ProtobufCEnumDescriptor    sr__api_variant__descriptor;
-+extern const ProtobufCEnumDescriptor    sr__data_store__descriptor;
-+extern const ProtobufCEnumDescriptor    sr__session_flags__descriptor;
-+extern const ProtobufCEnumDescriptor    sr__edit_flags__descriptor;
-+extern const ProtobufCEnumDescriptor    sr__subscription_type__descriptor;
-+extern const ProtobufCEnumDescriptor    sr__notification_event__descriptor;
-+extern const ProtobufCEnumDescriptor    sr__module_state__descriptor;
-+extern const ProtobufCEnumDescriptor    sr__change_operation__descriptor;
-+extern const ProtobufCEnumDescriptor    sr__operation__descriptor;
-+extern const ProtobufCMessageDescriptor sr__value__descriptor;
-+extern const ProtobufCEnumDescriptor    sr__value__types__descriptor;
-+extern const ProtobufCMessageDescriptor sr__node__descriptor;
-+extern const ProtobufCMessageDescriptor sr__error__descriptor;
-+extern const ProtobufCMessageDescriptor sr__session_start_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__session_start_resp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__session_stop_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__session_stop_resp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__session_refresh_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__session_refresh_resp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__session_check_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__session_check_resp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__session_switch_ds_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__session_switch_ds_resp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__session_set_opts_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__session_set_opts_resp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__version_verify_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__version_verify_resp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__schema_revision__descriptor;
-+extern const ProtobufCMessageDescriptor sr__schema_submodule__descriptor;
-+extern const ProtobufCMessageDescriptor sr__schema__descriptor;
-+extern const ProtobufCMessageDescriptor sr__list_schemas_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__list_schemas_resp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__get_schema_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__get_schema_resp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__get_item_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__get_item_resp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__get_items_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__get_items_resp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__get_subtree_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__get_subtree_resp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__get_subtrees_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__get_subtrees_resp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__get_subtree_chunk_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__get_subtree_chunk_resp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__set_item_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__set_item_resp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__set_item_str_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__set_item_str_resp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__delete_item_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__delete_item_resp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__move_item_req__descriptor;
-+extern const ProtobufCEnumDescriptor    sr__move_item_req__move_position__descriptor;
-+extern const ProtobufCMessageDescriptor sr__move_item_resp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__validate_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__validate_resp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__commit_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__commit_resp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__discard_changes_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__discard_changes_resp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__copy_config_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__copy_config_resp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__lock_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__lock_resp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__unlock_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__unlock_resp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__subscribe_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__subscribe_resp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__unsubscribe_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__unsubscribe_resp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__check_enabled_running_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__check_enabled_running_resp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__module_install_notification__descriptor;
-+extern const ProtobufCMessageDescriptor sr__feature_enable_notification__descriptor;
-+extern const ProtobufCMessageDescriptor sr__module_change_notification__descriptor;
-+extern const ProtobufCMessageDescriptor sr__subtree_change_notification__descriptor;
-+extern const ProtobufCMessageDescriptor sr__change__descriptor;
-+extern const ProtobufCMessageDescriptor sr__get_changes_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__get_changes_resp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__check_exec_perm_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__check_exec_perm_resp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__rpcreq__descriptor;
-+extern const ProtobufCMessageDescriptor sr__rpcresp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__event_notif_req__descriptor;
-+extern const ProtobufCEnumDescriptor    sr__event_notif_req__notif_type__descriptor;
-+extern const ProtobufCEnumDescriptor    sr__event_notif_req__notif_flags__descriptor;
-+extern const ProtobufCMessageDescriptor sr__event_notif_resp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__event_notif_replay_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__event_notif_replay_resp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__data_provide_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__data_provide_resp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__module_install_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__module_install_resp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__feature_enable_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__feature_enable_resp__descriptor;
-+extern const ProtobufCMessageDescriptor sr__unsubscribe_destination_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__commit_timeout_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__oper_data_timeout_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__internal_state_data_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__notif_store_cleanup_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__delayed_msg_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__nacm_reload_req__descriptor;
-+extern const ProtobufCMessageDescriptor sr__request__descriptor;
-+extern const ProtobufCMessageDescriptor sr__response__descriptor;
-+extern const ProtobufCMessageDescriptor sr__notification__descriptor;
-+extern const ProtobufCMessageDescriptor sr__notification_ack__descriptor;
-+extern const ProtobufCMessageDescriptor sr__internal_request__descriptor;
-+extern const ProtobufCMessageDescriptor sr__msg__descriptor;
-+extern const ProtobufCEnumDescriptor    sr__msg__msg_type__descriptor;
-+
-+PROTOBUF_C__END_DECLS
-+
-+
-+#endif  /* PROTOBUF_C_sysrepo_2eproto__INCLUDED */
index 15bc77c96a2f3000ef41998601c21ae359767ec3..3826853fbd5ebc41fe7f5e965997cee76677fe6d 100644 (file)
@@ -1,26 +1,26 @@
-Index: sysrepo-e4a5705a4c5293ba121048c71899b98243d99edf/CMakeLists.txt
+Index: sysrepo-0.7.5/CMakeLists.txt
 ===================================================================
---- sysrepo-e4a5705a4c5293ba121048c71899b98243d99edf.orig/CMakeLists.txt
-+++ sysrepo-e4a5705a4c5293ba121048c71899b98243d99edf/CMakeLists.txt
-@@ -280,7 +280,7 @@ install (FILES ${INTERNAL_YANGS} DESTINA
+--- sysrepo-0.7.5.orig/CMakeLists.txt
++++ sysrepo-0.7.5/CMakeLists.txt
+@@ -303,7 +303,7 @@ install (FILES ${INTERNAL_YANGS} DESTINA
  
  # install NACM YANG module
  if(ENABLE_NACM)
--    INSTALL_YANG("ietf-netconf-acm" "@2012-02-22" "644")
-+    # INSTALL_YANG("ietf-netconf-acm" "@2012-02-22" "644")
+-    INSTALL_YANG("ietf-netconf-acm" "@2018-02-14" "644")
++    #INSTALL_YANG("ietf-netconf-acm" "@2018-02-14" "644")
  endif(ENABLE_NACM)
  
  find_package(PkgConfig QUIET)
-@@ -304,9 +304,9 @@ if(WITH_SYSTEMD)
+@@ -327,9 +327,9 @@ if(WITH_SYSTEMD)
          FILES_MATCHING PATTERN "*.service")
  endif()
  
 -INSTALL_YANG("ietf-netconf-notifications" "" "666")
 -INSTALL_YANG("nc-notifications" "" "666")
 -INSTALL_YANG("notifications" "" "666")
-+# INSTALL_YANG("ietf-netconf-notifications" "" "666")
-+# INSTALL_YANG("nc-notifications" "" "666")
-+# INSTALL_YANG("notifications" "" "666")
++#INSTALL_YANG("ietf-netconf-notifications" "" "666")
++#INSTALL_YANG("nc-notifications" "" "666")
++#INSTALL_YANG("notifications" "" "666")
  
  if(GEN_LANGUAGE_BINDINGS)
      add_subdirectory(swig)
diff --git a/net/sysrepo/patches/003-missing-time-header b/net/sysrepo/patches/003-missing-time-header
deleted file mode 100644 (file)
index 6ce54de..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-Index: sysrepo-e4a5705a4c5293ba121048c71899b98243d99edf/inc/sysrepo.h
-===================================================================
---- sysrepo-e4a5705a4c5293ba121048c71899b98243d99edf.orig/inc/sysrepo.h
-+++ sysrepo-e4a5705a4c5293ba121048c71899b98243d99edf/inc/sysrepo.h
-@@ -51,6 +51,7 @@
-  * @ref xp_page "XPath Addressing" is used for node identification in data-related calls.
-  */
-+#include <time.h>
- #include <stdbool.h>
- #include <stdint.h>
- #include <stdlib.h>
index 3261aee1398305a98056c094be93218712e55b2f..ca4b0caa8990c4a26072c4a5fe2e27e79b0af263 100644 (file)
@@ -1,12 +1,11 @@
-Index: sysrepo-e4a5705a4c5293ba121048c71899b98243d99edf/src/clientlib/client_library.c
+Index: sysrepo-0.7.5/src/clientlib/client_library.c
 ===================================================================
---- sysrepo-e4a5705a4c5293ba121048c71899b98243d99edf.orig/src/clientlib/client_library.c
-+++ sysrepo-e4a5705a4c5293ba121048c71899b98243d99edf/src/clientlib/client_library.c
-@@ -405,14 +405,6 @@ sr_connect(const char *app_name, const s
-     if (SR_ERR_OK != rc) {
+--- sysrepo-0.7.5.orig/src/clientlib/client_library.c
++++ sysrepo-0.7.5/src/clientlib/client_library.c
+@@ -396,13 +396,13 @@ sr_connect(const char *app_name, const s
          if (opts & SR_CONN_DAEMON_REQUIRED) {
              if ((opts & SR_CONN_DAEMON_START) && (0 == getuid())) {
--                /* sysrepo daemon start requested and process is running under root privileges */
+                 /* sysrepo daemon start requested and process is running under root privileges */
 -                SR_LOG_DBG_MSG("Sysrepo daemon not detected, starting it.");
 -                ret = system("sysrepod");
 -                if (0 == ret) {
@@ -14,6 +13,13 @@ Index: sysrepo-e4a5705a4c5293ba121048c71899b98243d99edf/src/clientlib/client_lib
 -                } else {
 -                    SR_LOG_WRN("Unable to start sysrepo daemon, error code=%d.", ret);
 -                }
++                //SR_LOG_DBG_MSG("Sysrepo daemon not detected, starting it.");
++                //ret = system("sysrepod");
++                //if (0 == ret) {
++                //    SR_LOG_INF_MSG("Sysrepo daemon has been started.");
++                //} else {
++                //    SR_LOG_WRN("Unable to start sysrepo daemon, error code=%d.", ret);
++                //}
                  /* retry to connect again in any case */
                  rc = cl_socket_connect(connection, SR_DAEMON_SOCKET);
                  CHECK_RC_LOG_GOTO(rc, cleanup, "Unable to connect to sysrepod: %s.", sr_strerror(rc));
index 33d7beae44704a23995c2d353ae10f9184216352..156ff95547fde2e8c02d0d51ec82a22bd695fedd 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=tinc
-PKG_VERSION:=1.0.34
+PKG_VERSION:=1.0.35
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=http://www.tinc-vpn.org/packages
-PKG_HASH:=c03a9b61dedd452116dd9a8db231545ba08a7c96bce011e0cbd3cfd2c56dcfda
+PKG_HASH:=18c83b147cc3e2133a7ac2543eeb014d52070de01c7474287d3ccecc9b16895e
 
 PKG_INSTALL:=1
 
index 61fb12d893afdc31a4b98f232ec63583043ff588..4afdd0d2e5faf97c5f08aace149219c79bec0398 100644 (file)
@@ -8,13 +8,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=tor
-PKG_VERSION:=0.3.3.9
+PKG_VERSION:=0.3.4.8
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://dist.torproject.org/ \
        https://archive.torproject.org/tor-package-archive
-PKG_HASH:=85346b4d026e6a041c8e326d2cc64b5f5361b032075c89c5854f16dbc02fce6f
+PKG_HASH:=826a4cb2c099a29c7cf91516ffffcfcb5aace7533b8853a8c8bddcfe2bfb1023
 PKG_MAINTAINER:=Hauke Mehrtens <hauke@hauke-m.de> \
                Peter Wagner <tripolar@gmx.at>
 PKG_LICENSE_FILES:=LICENSE
index 718efe95c440a494da8bf8891cba1deb65b8de80..aeb449853e2d626981fb5c3ede7f6ec37bde902f 100644 (file)
@@ -6,7 +6,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=travelmate
-PKG_VERSION:=1.2.2
+PKG_VERSION:=1.2.4
 PKG_RELEASE:=1
 PKG_LICENSE:=GPL-3.0+
 PKG_MAINTAINER:=Dirk Brenken <dev@brenken.org>
index 4fd64ede1981bb19dddca1a3f0074b4f8f6001b1..d44e6d0aae58e5f2ca0882aef4822840124d916a 100644 (file)
@@ -13,14 +13,14 @@ To avoid these kind of deadlocks, travelmate set all station interfaces in an "a
 * support all kinds of uplinks, incl. hidden and enterprise uplinks
 * continuously checks the existing uplink connection (quality), e.g. for conditional uplink (dis-) connections
 * captive portal detection with internet online check and a 'heartbeat' function to keep the uplink connection up & running
-* support of devices with multiple radios
+* support devices with multiple radios in any order
 * procd init and hotplug support
 * runtime information available via LuCI & via 'status' init command
 * status & debug logging to syslog
 * optional: the LuCI frontend shows the WiFi QR codes from all configured Access Points. It allows you to connect your Android or iOS devices to your router’s WiFi using the QR code
 
 ## Prerequisites
-* [OpenWrt](https://openwrt.org), tested with the stable release series (17.01.x) and with the latest OpenWrt snapshot
+* [OpenWrt](https://openwrt.org), tested with the stable release series (18.06.x) and with the latest OpenWrt snapshot
 * iwinfo for wlan scanning, uclient-fetch for captive portal detection
 * optional: qrencode 4.x for QR code support
 
@@ -46,7 +46,7 @@ To avoid these kind of deadlocks, travelmate set all station interfaces in an "a
     * trm\_maxwait => how long (in seconds) should travelmate wait for a successful wlan interface reload action (int/default: '30', valid range: 20-40)
     * trm\_maxretry => how many times should travelmate try to connect to an uplink (int/default: '3', valid range: 1-10)
     * trm\_timeout => overall retry timeout in seconds (int/default: '60', valid range: 30-300)
-    * trm\_radio => limit travelmate to a dedicated radio, e.g. 'radio0' (default: not set, use all radios)
+    * trm\_radio => limit travelmate to a single radio (e.g. 'radio1') or change the overall scanning order (e.g. 'radio1 radio2 radio0') (default: not set, use all radios 0-n)
     * trm\_iface => main uplink / procd trigger network interface (default: trm_wwan)
     * trm\_triggerdelay => additional trigger delay in seconds before travelmate processing begins (int/default: '2')
 
@@ -57,12 +57,12 @@ To avoid these kind of deadlocks, travelmate set all station interfaces in an "a
 ~# /etc/init.d/travelmate status
 ::: travelmate runtime information
   + travelmate_status  : connected (net ok/78)
-  + travelmate_version : 1.2.1
+  + travelmate_version : 1.2.3
   + station_id         : radio1/blackhole/01:02:03:04:05:06
   + station_interface  : trm_wwan
   + faulty_stations    : 
-  + last_rundate       : 28.07.2018 21:17:45
-  + system             : TP-LINK RE450, OpenWrt SNAPSHOT r7540+5-20c4819c7b
+  + last_rundate       : 07.09.2018 17:22:37
+  + system             : TP-LINK RE450, OpenWrt SNAPSHOT r8018-42f158314e
 </code></pre>
 
 ## Manual Setup
@@ -127,6 +127,8 @@ edit /etc/config/travelmate and set 'trm_enabled' to '1'
 **A:** Travelmate tries n times (default 3) to connect, then the respective uplink will be marked as "faulty" in the JSON runtime file and hereafter ignored. To reset the JSON runtime file, simply restart travelmate.  
 **Q:** How to connect to hidden uplinks?  
 **A:** See 'example\_hidden' STA configuration above, option 'SSID' and 'BSSID' must be specified for successful connections.  
+**Q:** Any recommendations regarding suitable DNS settings to easily connect to captive portals?  
+**A:** Use a simple DNS forwarder like dnsmasq and disable the option 'rebind_protection'.  
 
 ## Support
 Please join the travelmate discussion in this [forum thread](https://forum.lede-project.org/t/travelmate-support-thread/5155) or contact me by [mail](mailto:dev@brenken.org)  
index d757e6b1c32b196cd950d8bc781ff9293fd26665..18d3d0089c54a066e10bf250d84f458211547b73 100755 (executable)
@@ -12,62 +12,61 @@ trm_pidfile="/var/run/travelmate.pid"
 
 boot()
 {
-    ubus -t 30 wait_for network.interface network.wireless 2>/dev/null
-    rc_procd start_service
+       ubus -t 30 wait_for network.interface network.wireless 2>/dev/null
+       rc_procd start_service
 }
 
 start_service()
 {
-    if [ $("${trm_init}" enabled; printf "%u" ${?}) -eq 0 ]
-    then
-        procd_open_instance "travelmate"
-        procd_set_param command "${trm_script}" "${@}"
-        procd_set_param pidfile "${trm_pidfile}"
-        procd_set_param stdout 1
-        procd_set_param stderr 1
-        procd_close_instance
-    fi
+       if [ $("${trm_init}" enabled; printf "%u" ${?}) -eq 0 ]
+       then
+               procd_open_instance "travelmate"
+               procd_set_param command "${trm_script}" "${@}"
+               procd_set_param pidfile "${trm_pidfile}"
+               procd_set_param stdout 1
+               procd_set_param stderr 1
+               procd_close_instance
+       fi
 }
 
 reload_service()
 {
-    [ -s "${trm_pidfile}" ] && return 1
-    rc_procd start_service
+       [ -s "${trm_pidfile}" ] && return 1
+       rc_procd start_service
 }
 
 stop_service()
 {
-    rc_procd "${trm_script}" stop
-    rc_procd start_service
+       rc_procd "${trm_script}" stop
 }
 
 status()
 {
-    local key keylist value rtfile="$(uci_get travelmate global trm_rtfile)"
+       local key keylist value rtfile="$(uci_get travelmate global trm_rtfile)"
 
-    rtfile="${rtfile:-"/tmp/trm_runtime.json"}"
-    if [ -s "${rtfile}" ]
-    then
-        printf "%s\n" "::: travelmate runtime information"
-        json_load "$(cat "${rtfile}" 2>/dev/null)"
-        json_select data
-        json_get_keys keylist
-        for key in ${keylist}
-        do
-            json_get_var value "${key}"
-            printf "  + %-18s : %s\n" "${key}" "${value}"
-        done
-    else
-        printf "%s\n" "::: no travelmate runtime information available"
-    fi
+       rtfile="${rtfile:-"/tmp/trm_runtime.json"}"
+       json_load_file "${rtfile}" >/dev/null 2>&1
+       json_select data >/dev/null 2>&1
+       if [ ${?} -eq 0 ]
+       then
+               printf "%s\n" "::: travelmate runtime information"
+               json_get_keys keylist
+               for key in ${keylist}
+               do
+                       json_get_var value "${key}"
+                       printf "  + %-18s : %s\n" "${key}" "${value}"
+               done
+       else
+               printf "%s\n" "::: no travelmate runtime information available"
+       fi
 }
 
 service_triggers()
 {
-    local trigger="$(uci_get travelmate global trm_iface)"
-    local delay="$(uci_get travelmate global trm_triggerdelay)"
+       local trigger="$(uci_get travelmate global trm_iface)"
+       local delay="$(uci_get travelmate global trm_triggerdelay)"
 
-    PROCD_RELOAD_DELAY=$((${delay:-2} * 1000))
-    procd_add_interface_trigger "interface.*.down" "${trigger}" "${trm_init}" reload
-    procd_add_reload_trigger "travelmate"
+       PROCD_RELOAD_DELAY=$((${delay:-2} * 1000))
+       procd_add_interface_trigger "interface.*.down" "${trigger}" "${trm_init}" reload
+       procd_add_reload_trigger "travelmate"
 }
index f4a047bf9e907faaee8e15a9f1e1af1b1df0a222..61b036cefa3bbda245d54dcdde26fea3eb82b8b3 100755 (executable)
@@ -10,7 +10,7 @@
 #
 LC_ALL=C
 PATH="/usr/sbin:/usr/bin:/sbin:/bin"
-trm_ver="1.2.2"
+trm_ver="1.2.4"
 trm_sysver="unknown"
 trm_enabled=0
 trm_debug=0
@@ -33,396 +33,387 @@ trm_pidfile="/var/run/travelmate.pid"
 #
 f_envload()
 {
-    local sys_call sys_desc sys_model sys_ver
+       local sys_call sys_desc sys_model sys_ver
 
-    # get system information
-    #
-    sys_call="$(ubus -S call system board 2>/dev/null)"
-    if [ -n "${sys_call}" ]
-    then
-        sys_desc="$(printf '%s' "${sys_call}" | jsonfilter -e '@.release.description')"
-        sys_model="$(printf '%s' "${sys_call}" | jsonfilter -e '@.model')"
-        sys_ver="$(cat /etc/turris-version 2>/dev/null)"
-        if [ -n "${sys_ver}" ]
-        then
-            sys_desc="${sys_desc}/${sys_ver}"
-        fi
-        trm_sysver="${sys_model}, ${sys_desc}"
-    fi
+       # get system information
+       #
+       sys_call="$(ubus -S call system board 2>/dev/null)"
+       if [ -n "${sys_call}" ]
+       then
+               sys_desc="$(printf '%s' "${sys_call}" | jsonfilter -e '@.release.description')"
+               sys_model="$(printf '%s' "${sys_call}" | jsonfilter -e '@.model')"
+               sys_ver="$(cat /etc/turris-version 2>/dev/null)"
+               if [ -n "${sys_ver}" ]
+               then
+                       sys_desc="${sys_desc}/${sys_ver}"
+               fi
+               trm_sysver="${sys_model}, ${sys_desc}"
+       fi
 
-    # (re-)initialize global list variables
-    #
-    unset trm_devlist trm_stalist trm_radiolist
+       # (re-)initialize global list variables
+       #
+       unset trm_devlist trm_stalist trm_radiolist
 
-    # load config and check 'enabled' option
-    #
-    option_cb()
-    {
-        local option="${1}"
-        local value="${2}"
-        eval "${option}=\"${value}\""
-    }
-    config_load travelmate
+       # load config and check 'enabled' option
+       #
+       option_cb()
+       {
+               local option="${1}"
+               local value="${2}"
+               eval "${option}=\"${value}\""
+       }
+       config_load travelmate
 
-    if [ ${trm_enabled} -ne 1 ]
-    then
-        f_log "info" "travelmate is currently disabled, please set 'trm_enabled' to '1' to use this service"
-        exit 0
-    fi
+       if [ ${trm_enabled} -ne 1 ]
+       then
+               f_log "info" "travelmate is currently disabled, please set 'trm_enabled' to '1' to use this service"
+               exit 0
+       fi
 
-    # validate input ranges
-    #
-    if [ ${trm_minquality} -lt 20 ] || [ ${trm_minquality} -gt 80 ]
-    then
-        trm_minquality=35
-    fi
-    if [ ${trm_maxretry} -lt 1 ] || [ ${trm_maxretry} -gt 10 ]
-    then
-        trm_maxretry=3
-    fi
-    if [ ${trm_maxwait} -lt 20 ] || [ ${trm_maxwait} -gt 40 ] || [ ${trm_maxwait} -ge ${trm_timeout} ]
-    then
-        trm_maxwait=30
-    fi
-    if [ ${trm_timeout} -lt 30 ] || [ ${trm_timeout} -gt 300 ] || [ ${trm_timeout} -le ${trm_maxwait} ]
-    then
-        trm_timeout=60
-    fi
+       # validate input ranges
+       #
+       if [ ${trm_minquality} -lt 20 ] || [ ${trm_minquality} -gt 80 ]
+       then
+               trm_minquality=35
+       fi
+       if [ ${trm_maxretry} -lt 1 ] || [ ${trm_maxretry} -gt 10 ]
+       then
+               trm_maxretry=3
+       fi
+       if [ ${trm_maxwait} -lt 20 ] || [ ${trm_maxwait} -gt 40 ] || [ ${trm_maxwait} -ge ${trm_timeout} ]
+       then
+               trm_maxwait=30
+       fi
+       if [ ${trm_timeout} -lt 30 ] || [ ${trm_timeout} -gt 300 ] || [ ${trm_timeout} -le ${trm_maxwait} ]
+       then
+               trm_timeout=60
+       fi
 }
 
 # gather radio information & bring down all STA interfaces
 #
 f_prep()
 {
-    local eap_rc=0 config="${1}"
-    local mode="$(uci_get wireless "${config}" mode)"
-    local network="$(uci_get wireless "${config}" network)"
-    local radio="$(uci_get wireless "${config}" device)"
-    local disabled="$(uci_get wireless "${config}" disabled)"
-    local eaptype="$(uci_get wireless "${config}" eap_type)"
+       local eap_rc=0 config="${1}"
+       local mode="$(uci_get wireless "${config}" mode)"
+       local network="$(uci_get wireless "${config}" network)"
+       local radio="$(uci_get wireless "${config}" device)"
+       local disabled="$(uci_get wireless "${config}" disabled)"
+       local eaptype="$(uci_get wireless "${config}" eap_type)"
 
-    if ([ -z "${trm_radio}" ] || [ "${trm_radio}" = "${radio}" ]) && \
-        [ -z "$(printf "%s" "${trm_radiolist}" | grep -Fo " ${radio}")" ]
-    then
-        trm_radiolist="${trm_radiolist} ${radio}"
-    fi
-    if [ "${mode}" = "sta" ] && [ "${network}" = "${trm_iface}" ]
-    then
-        if [ -z "${disabled}" ] || [ "${disabled}" = "0" ]
-        then
-            uci_set wireless "${config}" disabled 1
-        fi
-        if [ -n "${eaptype}" ]
-        then
-            eap_rc="$("${trm_wpa}" -veap >/dev/null 2>&1; printf "%u" ${?})"
-        fi
-        if [ -z "${eaptype}" ] || [ ${eap_rc} -eq 0 ]
-        then
-            trm_stalist="${trm_stalist} ${config}_${radio}"
-        fi
-    fi
-    f_log "debug" "f_prep ::: config: ${config}, mode: ${mode}, network: ${network}, eap_rc: ${eap_rc}, radio: ${radio}, trm_radio: ${trm_radio:-"-"}, disabled: ${disabled}"
+       if [ -z "${trm_radio}" ] && [ -z "$(printf "%s" "${trm_radiolist}" | grep -Fo " ${radio}")" ]
+       then
+               trm_radiolist="${trm_radiolist} ${radio}"
+       elif [ -n "${trm_radio}" ] && [ -z "${trm_radiolist}" ]
+       then
+               trm_radiolist="$(printf "%s" "${trm_radio}" | awk '{while(match(tolower($0),/radio[0-9]/)){ORS=" ";print substr(tolower($0),RSTART,RLENGTH);$0=substr($0,RSTART+RLENGTH)}}')"
+       fi
+       if [ "${mode}" = "sta" ] && [ "${network}" = "${trm_iface}" ]
+       then
+               if [ -z "${disabled}" ] || [ "${disabled}" = "0" ]
+               then
+                       uci_set wireless "${config}" disabled 1
+               fi
+               if [ -n "${eaptype}" ]
+               then
+                       eap_rc="$("${trm_wpa}" -veap >/dev/null 2>&1; printf "%u" ${?})"
+               fi
+               if [ -z "${eaptype}" ] || [ ${eap_rc} -eq 0 ]
+               then
+                       trm_stalist="${trm_stalist} ${config}_${radio}"
+               fi
+       fi
+       f_log "debug" "f_prep ::: config: ${config}, mode: ${mode}, network: ${network}, eap_rc: ${eap_rc}, radio: ${radio}, trm_radio: ${trm_radio:-"-"}, disabled: ${disabled}"
 }
 
 # check interface status
 #
 f_check()
 {
-    local IFS ifname radio dev_status config sta_essid sta_bssid result wait=1 mode="${1}" status="${2:-"false"}"
+       local IFS ifname radio dev_status config sta_essid sta_bssid result wait=1 mode="${1}" status="${2:-"false"}"
 
-    trm_ifquality=0
-    trm_ifstatus="false"
-    if [ "${mode}" != "initial" ]
-    then
-        ubus call network reload
-    fi
-    while [ ${wait} -le ${trm_maxwait} ]
-    do
-        dev_status="$(ubus -S call network.wireless status 2>/dev/null)"
-        if [ -n "${dev_status}" ]
-        then
-            if [ "${mode}" = "dev" ]
-            then
-                if [ "${trm_ifstatus}" != "${status}" ]
-                then
-                    trm_ifstatus="${status}"
-                    f_jsnup
-                fi
-                for radio in ${trm_radiolist}
-                do
-                    result="$(printf "%s" "${dev_status}" | jsonfilter -l1 -e "@.${radio}.up")"
-                    if [ "${result}" = "true" ] && [ -z "$(printf "%s" "${trm_devlist}" | grep -Fo " ${radio}")" ]
-                    then
-                        trm_devlist="${trm_devlist} ${radio}"
-                    fi
-                done
-                if [ "${trm_devlist}" = "${trm_radiolist}" ] || [ ${wait} -eq ${trm_maxwait} ]
-                then
-                    ifname="${trm_devlist}"
-                    break
-                else
-                    unset trm_devlist
-                fi
-            elif [ "${mode}" = "rev" ]
-            then
-                wait=$(( ${trm_maxwait} / 3 ))
-                sleep ${wait}
-                break
-            else
-                ifname="$(printf "%s" "${dev_status}" | jsonfilter -l1 -e '@.*.interfaces[@.config.mode="sta"].ifname')"
-                if [ -n "${ifname}" ]
-                then
-                    trm_ifquality="$(${trm_iwinfo} ${ifname} info 2>/dev/null | awk -F "[\/| ]" '/Link Quality:/{printf "%i\n", (100 / $NF * $(NF-1)) }')"
-                    if [ ${trm_ifquality} -ge ${trm_minquality} ]
-                    then
-                        trm_ifstatus="$(ubus -S call network.interface dump 2>/dev/null | jsonfilter -l1 -e "@.interface[@.device=\"${ifname}\"].up")"
-                    elif [ "${mode}" = "initial" ] && [ ${trm_ifquality} -lt ${trm_minquality} ]
-                    then
-                        trm_ifstatus="${status}"
-                        sta_essid="$(printf "%s" "${dev_status}" | jsonfilter -l1 -e '@.*.interfaces[@.config.mode="sta"].*.ssid')"
-                        sta_bssid="$(printf "%s" "${dev_status}" | jsonfilter -l1 -e '@.*.interfaces[@.config.mode="sta"].*.bssid')"
-                        f_log "info" "uplink '${sta_essid:-"-"}/${sta_bssid:-"-"}' is out of range (${trm_ifquality}/${trm_minquality}), uplink disconnected (${trm_sysver})"
-                    fi
-                fi
-            fi
-            if [ "${mode}" = "initial" ] || [ "${trm_ifstatus}" = "true" ]
-            then
-                if ([ "${trm_ifstatus}" != "true" ] && [ "${trm_ifstatus}" != "${status}" ]) || [ ${trm_ifquality} -lt ${trm_minquality} ]
-                then
-                    f_jsnup
-                fi
-                if [ "${mode}" = "initial" ] && [ "${trm_captive}" -eq 1 ] && [ "${trm_ifstatus}" = "true" ]
-                then
-                    result="$(${trm_fetch} --timeout=$(( ${trm_maxwait} / 3 )) --spider "${trm_captiveurl}" 2>&1 | awk '/^Redirected/{printf "%s" "net cp \047"$NF"\047";exit}/^Download completed/{printf "%s" "net ok";exit}/^Failed|^Connection error/{printf "%s" "net nok";exit}')"
-                    if [ -n "${result}" ] && ([ -z "${trm_connection}" ] || [ "${result}" != "${trm_connection%/*}" ])
-                    then
-                        trm_connection="${result}/${trm_ifquality}"
-                        f_jsnup
-                    fi
-                fi
-                break
-            fi
-        fi
-        wait=$(( wait + 1 ))
-        sleep 1
-    done
-    f_log "debug" "f_check::: mode: ${mode}, name: ${ifname:-"-"}, status: ${trm_ifstatus}, quality: ${trm_ifquality}, connection: ${trm_connection:-"-"}, wait: ${wait}, max_wait: ${trm_maxwait}, min_quality: ${trm_minquality}, captive: ${trm_captive}"
+       trm_ifquality=0
+       trm_ifstatus="false"
+       if [ "${mode}" != "initial" ]
+       then
+               ubus call network reload
+       fi
+       while [ ${wait} -le ${trm_maxwait} ]
+       do
+               dev_status="$(ubus -S call network.wireless status 2>/dev/null)"
+               if [ -n "${dev_status}" ]
+               then
+                       if [ "${mode}" = "dev" ]
+                       then
+                               if [ "${trm_ifstatus}" != "${status}" ]
+                               then
+                                       trm_ifstatus="${status}"
+                                       f_jsnup
+                               fi
+                               for radio in ${trm_radiolist}
+                               do
+                                       result="$(printf "%s" "${dev_status}" | jsonfilter -l1 -e "@.${radio}.up")"
+                                       if [ "${result}" = "true" ] && [ -z "$(printf "%s" "${trm_devlist}" | grep -Fo " ${radio}")" ]
+                                       then
+                                               trm_devlist="${trm_devlist} ${radio}"
+                                       fi
+                               done
+                               if [ "${trm_devlist}" = "${trm_radiolist}" ] || [ ${wait} -eq ${trm_maxwait} ]
+                               then
+                                       ifname="${trm_devlist}"
+                                       break
+                               else
+                                       unset trm_devlist
+                               fi
+                       elif [ "${mode}" = "rev" ]
+                       then
+                               wait=$(( ${trm_maxwait} / 3 ))
+                               sleep ${wait}
+                               break
+                       else
+                               ifname="$(printf "%s" "${dev_status}" | jsonfilter -l1 -e '@.*.interfaces[@.config.mode="sta"].ifname')"
+                               if [ -n "${ifname}" ]
+                               then
+                                       trm_ifquality="$(${trm_iwinfo} ${ifname} info 2>/dev/null | awk -F "[\/| ]" '/Link Quality:/{printf "%i\n", (100 / $NF * $(NF-1)) }')"
+                                       if [ ${trm_ifquality} -ge ${trm_minquality} ]
+                                       then
+                                               trm_ifstatus="$(ubus -S call network.interface dump 2>/dev/null | jsonfilter -l1 -e "@.interface[@.device=\"${ifname}\"].up")"
+                                       elif [ "${mode}" = "initial" ] && [ ${trm_ifquality} -lt ${trm_minquality} ]
+                                       then
+                                               trm_ifstatus="${status}"
+                                               sta_essid="$(printf "%s" "${dev_status}" | jsonfilter -l1 -e '@.*.interfaces[@.config.mode="sta"].*.ssid')"
+                                               sta_bssid="$(printf "%s" "${dev_status}" | jsonfilter -l1 -e '@.*.interfaces[@.config.mode="sta"].*.bssid')"
+                                               f_log "info" "uplink '${sta_essid:-"-"}/${sta_bssid:-"-"}' is out of range (${trm_ifquality}/${trm_minquality}), uplink disconnected (${trm_sysver})"
+                                       fi
+                               fi
+                       fi
+                       if [ "${mode}" = "initial" ] || [ "${trm_ifstatus}" = "true" ]
+                       then
+                               if ([ "${trm_ifstatus}" != "true" ] && [ "${trm_ifstatus}" != "${status}" ]) || [ ${trm_ifquality} -lt ${trm_minquality} ]
+                               then
+                                       f_jsnup
+                               fi
+                               if [ "${mode}" = "initial" ] && [ "${trm_captive}" -eq 1 ] && [ "${trm_ifstatus}" = "true" ]
+                               then
+                                       result="$(${trm_fetch} --timeout=$(( ${trm_maxwait} / 3 )) --spider "${trm_captiveurl}" 2>&1 | awk '/^Redirected/{printf "%s" "net cp \047"$NF"\047";exit}/^Download completed/{printf "%s" "net ok";exit}/^Failed|^Connection error/{printf "%s" "net nok";exit}')"
+                                       if [ -n "${result}" ] && ([ -z "${trm_connection}" ] || [ "${result}" != "${trm_connection%/*}" ])
+                                       then
+                                               trm_connection="${result}/${trm_ifquality}"
+                                               f_jsnup
+                                       fi
+                               fi
+                               break
+                       fi
+               fi
+               wait=$(( wait + 1 ))
+               sleep 1
+       done
+       f_log "debug" "f_check::: mode: ${mode}, name: ${ifname:-"-"}, status: ${trm_ifstatus}, quality: ${trm_ifquality}, connection: ${trm_connection:-"-"}, wait: ${wait}, max_wait: ${trm_maxwait}, min_quality: ${trm_minquality}, captive: ${trm_captive}"
 }
 
 # update runtime information
 #
 f_jsnup()
 {
-    local config sta_iface sta_radio sta_essid sta_bssid dev_status status="${trm_ifstatus}" faulty_list faulty_station="${1}"
+       local config sta_iface sta_radio sta_essid sta_bssid dev_status status="${trm_ifstatus}" faulty_list faulty_station="${1}"
 
-    if [ "${status}" = "true" ]
-    then
-        status="connected (${trm_connection:-"-"})"
-    else
-        unset trm_connection
-        if [ "${status}" = "false" ]
-        then
-            status="not connected"
-        fi
-    fi
+       if [ "${status}" = "true" ]
+       then
+               status="connected (${trm_connection:-"-"})"
+       else
+               unset trm_connection
+               status="running / not connected"
+       fi
 
-    dev_status="$(ubus -S call network.wireless status 2>/dev/null)"
-    if [ -n "${dev_status}" ]
-    then
-        config="$(printf "%s" "${dev_status}" | jsonfilter -l1 -e '@.*.interfaces[@.config.mode="sta"].section')"
-        if [ -n "${config}" ]
-        then
-            sta_iface="$(uci_get wireless "${config}" network)"
-            sta_radio="$(uci_get wireless "${config}" device)"
-            sta_essid="$(uci_get wireless "${config}" ssid)"
-            sta_bssid="$(uci_get wireless "${config}" bssid)"
-        fi
-    fi
+       dev_status="$(ubus -S call network.wireless status 2>/dev/null)"
+       if [ -n "${dev_status}" ]
+       then
+               config="$(printf "%s" "${dev_status}" | jsonfilter -l1 -e '@.*.interfaces[@.config.mode="sta"].section')"
+               if [ -n "${config}" ]
+               then
+                       sta_iface="$(uci_get wireless "${config}" network)"
+                       sta_radio="$(uci_get wireless "${config}" device)"
+                       sta_essid="$(uci_get wireless "${config}" ssid)"
+                       sta_bssid="$(uci_get wireless "${config}" bssid)"
+               fi
+       fi
 
-    json_get_var faulty_list "faulty_stations"
-    if [ -n "${faulty_station}" ]
-    then
-        if [ -z "$(printf "%s" "${faulty_list}" | grep -Fo "${faulty_station}")" ]
-        then
-            faulty_list="${faulty_list} ${faulty_station}"
-        fi
-    fi
-    json_add_string "travelmate_status" "${status}"
-    json_add_string "travelmate_version" "${trm_ver}"
-    json_add_string "station_id" "${sta_radio:-"-"}/${sta_essid:-"-"}/${sta_bssid:-"-"}"
-    json_add_string "station_interface" "${sta_iface:-"-"}"
-    json_add_string "faulty_stations" "${faulty_list}"
-    json_add_string "last_rundate" "$(/bin/date "+%d.%m.%Y %H:%M:%S")"
-    json_add_string "system" "${trm_sysver}"
-    json_dump > "${trm_rtfile}"
-    f_log "debug" "f_jsnup::: config: ${config:-"-"}, status: ${status:-"-"}, sta_iface: ${sta_iface:-"-"}, sta_radio: ${sta_radio:-"-"}, sta_essid: ${sta_essid:-"-"}, sta_bssid: ${sta_bssid:-"-"}, faulty_list: ${faulty_list:-"-"}"
+       json_get_var faulty_list "faulty_stations"
+       if [ -n "${faulty_station}" ]
+       then
+               if [ -z "$(printf "%s" "${faulty_list}" | grep -Fo "${faulty_station}")" ]
+               then
+                       faulty_list="${faulty_list} ${faulty_station}"
+               fi
+       fi
+       json_add_string "travelmate_status" "${status}"
+       json_add_string "travelmate_version" "${trm_ver}"
+       json_add_string "station_id" "${sta_radio:-"-"}/${sta_essid:-"-"}/${sta_bssid:-"-"}"
+       json_add_string "station_interface" "${sta_iface:-"-"}"
+       json_add_string "faulty_stations" "${faulty_list}"
+       json_add_string "last_rundate" "$(/bin/date "+%d.%m.%Y %H:%M:%S")"
+       json_add_string "system" "${trm_sysver}"
+       json_dump > "${trm_rtfile}"
+       f_log "debug" "f_jsnup::: config: ${config:-"-"}, status: ${status:-"-"}, sta_iface: ${sta_iface:-"-"}, sta_radio: ${sta_radio:-"-"}, sta_essid: ${sta_essid:-"-"}, sta_bssid: ${sta_bssid:-"-"}, faulty_list: ${faulty_list:-"-"}"
 }
 
 # write to syslog
 #
 f_log()
 {
-    local class="${1}"
-    local log_msg="${2}"
+       local class="${1}"
+       local log_msg="${2}"
 
-    if [ -n "${log_msg}" ] && ([ "${class}" != "debug" ] || [ ${trm_debug} -eq 1 ])
-    then
-        logger -p "${class}" -t "travelmate-${trm_ver}[${$}]" "${log_msg}"
-        if [ "${class}" = "err" ]
-        then
-            trm_ifstatus="error"
-            f_jsnup
-            logger -p "${class}" -t "travelmate-${trm_ver}[${$}]" "Please check 'https://github.com/openwrt/packages/blob/master/net/travelmate/files/README.md' (${trm_sysver})"
-            exit 1
-        fi
-    fi
+       if [ -n "${log_msg}" ] && ([ "${class}" != "debug" ] || [ ${trm_debug} -eq 1 ])
+       then
+               logger -p "${class}" -t "travelmate-${trm_ver}[${$}]" "${log_msg}"
+               if [ "${class}" = "err" ]
+               then
+                       trm_ifstatus="error"
+                       f_jsnup
+                       logger -p "${class}" -t "travelmate-${trm_ver}[${$}]" "Please check 'https://github.com/openwrt/packages/blob/master/net/travelmate/files/README.md' (${trm_sysver})"
+                       exit 1
+               fi
+       fi
 }
 
 # main function for connection handling
 #
 f_main()
 {
-    local IFS cnt dev config scan scan_list scan_essid scan_bssid scan_quality sta sta_essid sta_bssid sta_radio sta_iface faulty_list
+       local IFS cnt dev config scan scan_list scan_essid scan_bssid scan_quality sta sta_essid sta_bssid sta_radio sta_iface faulty_list
 
-    f_check "initial"
-    if [ "${trm_ifstatus}" != "true" ]
-    then
-        config_load wireless
-        config_foreach f_prep wifi-iface
-        uci_commit wireless
-        f_check "dev" "running"
-        json_get_var faulty_list "faulty_stations"
-        f_log "debug" "f_main ::: iwinfo: ${trm_iwinfo}, dev_list: ${trm_devlist}, sta_list: ${trm_stalist:0:800}, faulty_list: ${faulty_list:-"-"}"
-        for dev in ${trm_devlist}
-        do
-            if [ -z "$(printf "%s" "${trm_stalist}" | grep -Fo "_${dev}")" ]
-            then
-                continue
-            fi
-            cnt=1
-            while [ ${cnt} -le ${trm_maxretry} ]
-            do
-                scan_list="$(${trm_iwinfo} "${dev}" scan 2>/dev/null | awk 'BEGIN{FS="[/ ]"}/Address:/{var1=$NF}/ESSID:/{var2="";for(i=12;i<=NF;i++)if(var2==""){var2=$i}else{var2=var2" "$i}}/Quality:/{printf "%i,%s,%s\n",(100/$NF*$(NF-1)),var1,var2}' | sort -rn | awk '{ORS=",";print $0}')"
-                f_log "debug" "f_main ::: dev: ${dev}, scan_list: ${scan_list:0:800}, cnt: ${cnt}, max_cnt: ${trm_maxretry}"
-                if [ -n "${scan_list}" ]
-                then
-                    for sta in ${trm_stalist}
-                    do
-                        config="${sta%%_*}"
-                        sta_radio="${sta##*_}"
-                        sta_essid="$(uci_get wireless "${config}" ssid)"
-                        sta_bssid="$(uci_get wireless "${config}" bssid)"
-                        sta_iface="$(uci_get wireless "${config}" network)"
-                        json_get_var faulty_list "faulty_stations"
-                        if [ -n "$(printf "%s" "${faulty_list}" | grep -Fo "${sta_radio}/${sta_essid}/${sta_bssid}")" ]
-                        then
-                            continue
-                        fi
-                        IFS=","
-                        for scan in ${scan_list}
-                        do
-                            if [ -z "${scan_quality}" ]
-                            then
-                                scan_quality="${scan}"
-                            elif [ -z "${scan_bssid}" ]
-                            then
-                                scan_bssid="${scan}"
-                            elif [ -z "${scan_essid}" ]
-                            then
-                                scan_essid="${scan}"
-                            fi
-                            if [ -n "${scan_quality}" ] && [ -n "${scan_bssid}" ] && [ -n "${scan_essid}" ]
-                            then
-                                if [ ${scan_quality} -ge ${trm_minquality} ]
-                                then
-                                    if (([ "${scan_essid}" = "\"${sta_essid}\"" ] && ([ -z "${sta_bssid}" ] || [ "${scan_bssid}" = "${sta_bssid}" ])) || \
-                                        ([ "${scan_bssid}" = "${sta_bssid}" ] && [ "${scan_essid}" = "unknown" ])) && [ "${dev}" = "${sta_radio}" ]
-                                    then
-                                        f_log "debug" "f_main ::: scan_quality: ${scan_quality}, scan_bssid: ${scan_bssid}, scan_essid: ${scan_essid}"
-                                        uci_set wireless "${config}" disabled 0
-                                        f_check "sta"
-                                        if [ "${trm_ifstatus}" = "true" ]
-                                        then
-                                            uci_commit wireless
-                                            f_check "initial"
-                                            f_log "info" "connected to uplink '${sta_radio}/${sta_essid}/${sta_bssid:-"-"}' (${trm_sysver})"
-                                            return 0
-                                        elif [ ${cnt} -eq ${trm_maxretry} ]
-                                        then
-                                            uci_set wireless "${config}" disabled 1
-                                            uci_commit wireless
-                                            faulty_station="${sta_radio}/${sta_essid}/${sta_bssid:-"-"}"
-                                            f_jsnup "${faulty_station}"
-                                            f_log "info" "can't connect to uplink '${sta_radio}/${sta_essid}/${sta_bssid:-"-"}', uplink disabled (${trm_sysver})"
-                                            f_check "rev"
-                                            break
-                                        else
-                                            uci -q revert wireless
-                                            f_jsnup
-                                            f_log "info" "can't connect to uplink '${sta_radio}/${sta_essid}/${sta_bssid:-"-"}' (${trm_sysver})"
-                                            f_check "rev"
-                                            break
-                                        fi
-                                    fi
-                                fi
-                                unset scan_quality scan_bssid scan_essid
-                            fi
-                        done
-                        unset IFS scan_quality scan_bssid scan_essid
-                    done
-                fi
-                cnt=$(( cnt + 1 ))
-                sleep $(( ${trm_maxwait} / 6 ))
-            done
-        done
-        if [ ! -s "${trm_rtfile}" ]
-        then
-            trm_ifstatus="false"
-            f_jsnup
-        fi
-    elif [ ! -s "${trm_rtfile}" ]
-    then
-        f_jsnup
-    fi
+       f_check "initial"
+       if [ "${trm_ifstatus}" != "true" ]
+       then
+               config_load wireless
+               config_foreach f_prep wifi-iface
+               uci_commit wireless
+               f_check "dev" "running / not connected"
+               json_get_var faulty_list "faulty_stations"
+               f_log "debug" "f_main ::: iwinfo: ${trm_iwinfo}, dev_list: ${trm_devlist}, sta_list: ${trm_stalist:0:800}, faulty_list: ${faulty_list:-"-"}"
+               for dev in ${trm_devlist}
+               do
+                       if [ -z "$(printf "%s" "${trm_stalist}" | grep -Fo "_${dev}")" ]
+                       then
+                               continue
+                       fi
+                       cnt=1
+                       while [ ${cnt} -le ${trm_maxretry} ]
+                       do
+                               scan_list="$(${trm_iwinfo} "${dev}" scan 2>/dev/null | awk 'BEGIN{FS="[/ ]"}/Address:/{var1=$NF}/ESSID:/{var2="";for(i=12;i<=NF;i++)if(var2==""){var2=$i}else{var2=var2" "$i}}/Quality:/{printf "%i,%s,%s\n",(100/$NF*$(NF-1)),var1,var2}' | sort -rn | awk '{ORS=",";print $0}')"
+                               f_log "debug" "f_main ::: dev: ${dev}, scan_list: ${scan_list:0:800}, cnt: ${cnt}, max_cnt: ${trm_maxretry}"
+                               if [ -n "${scan_list}" ]
+                               then
+                                       for sta in ${trm_stalist}
+                                       do
+                                               config="${sta%%_*}"
+                                               sta_radio="${sta##*_}"
+                                               sta_essid="$(uci_get wireless "${config}" ssid)"
+                                               sta_bssid="$(uci_get wireless "${config}" bssid)"
+                                               sta_iface="$(uci_get wireless "${config}" network)"
+                                               json_get_var faulty_list "faulty_stations"
+                                               if [ -n "$(printf "%s" "${faulty_list}" | grep -Fo "${sta_radio}/${sta_essid}/${sta_bssid}")" ]
+                                               then
+                                                       continue
+                                               fi
+                                               IFS=","
+                                               for scan in ${scan_list}
+                                               do
+                                                       if [ -z "${scan_quality}" ]
+                                                       then
+                                                               scan_quality="${scan}"
+                                                       elif [ -z "${scan_bssid}" ]
+                                                       then
+                                                               scan_bssid="${scan}"
+                                                       elif [ -z "${scan_essid}" ]
+                                                       then
+                                                               scan_essid="${scan}"
+                                                       fi
+                                                       if [ -n "${scan_quality}" ] && [ -n "${scan_bssid}" ] && [ -n "${scan_essid}" ]
+                                                       then
+                                                               if [ ${scan_quality} -ge ${trm_minquality} ]
+                                                               then
+                                                                       if (([ "${scan_essid}" = "\"${sta_essid}\"" ] && ([ -z "${sta_bssid}" ] || [ "${scan_bssid}" = "${sta_bssid}" ])) || \
+                                                                               ([ "${scan_bssid}" = "${sta_bssid}" ] && [ "${scan_essid}" = "unknown" ])) && [ "${dev}" = "${sta_radio}" ]
+                                                                       then
+                                                                               f_log "debug" "f_main ::: scan_quality: ${scan_quality}, scan_bssid: ${scan_bssid}, scan_essid: ${scan_essid}"
+                                                                               uci_set wireless "${config}" disabled 0
+                                                                               f_check "sta"
+                                                                               if [ "${trm_ifstatus}" = "true" ]
+                                                                               then
+                                                                                       uci_commit wireless
+                                                                                       f_check "initial"
+                                                                                       f_log "info" "connected to uplink '${sta_radio}/${sta_essid}/${sta_bssid:-"-"}' (${trm_sysver})"
+                                                                                       return 0
+                                                                               elif [ ${cnt} -eq ${trm_maxretry} ]
+                                                                               then
+                                                                                       uci_set wireless "${config}" disabled 1
+                                                                                       uci_commit wireless
+                                                                                       faulty_station="${sta_radio}/${sta_essid}/${sta_bssid:-"-"}"
+                                                                                       f_jsnup "${faulty_station}"
+                                                                                       f_log "info" "can't connect to uplink '${sta_radio}/${sta_essid}/${sta_bssid:-"-"}', uplink disabled (${trm_sysver})"
+                                                                                       f_check "rev"
+                                                                                       break
+                                                                               else
+                                                                                       uci -q revert wireless
+                                                                                       f_jsnup
+                                                                                       f_log "info" "can't connect to uplink '${sta_radio}/${sta_essid}/${sta_bssid:-"-"}' (${trm_sysver})"
+                                                                                       f_check "rev"
+                                                                                       break
+                                                                               fi
+                                                                       fi
+                                                               fi
+                                                               unset scan_quality scan_bssid scan_essid
+                                                       fi
+                                               done
+                                               unset IFS scan_quality scan_bssid scan_essid
+                                       done
+                               fi
+                               cnt=$(( cnt + 1 ))
+                               sleep $(( ${trm_maxwait} / 6 ))
+                       done
+               done
+       fi
 }
 
 # source required system libraries
 #
 if [ -r "/lib/functions.sh" ] && [ -r "/usr/share/libubox/jshn.sh" ]
 then
-    . "/lib/functions.sh"
-    . "/usr/share/libubox/jshn.sh"
+       . "/lib/functions.sh"
+       . "/usr/share/libubox/jshn.sh"
 else
-    f_log "err" "system libraries not found"
+       f_log "err" "system libraries not found"
 fi
 
 # initialize json runtime file
 #
-if [ ! -s "${trm_rtfile}" ]
+json_load_file "${trm_rtfile}" >/dev/null 2>&1
+json_select data >/dev/null 2>&1
+if [ ${?} -ne 0 ]
 then
-    json_init
-    json_add_object "data"
-else
-    json_load_file "${trm_rtfile}"
-    json_select data
+       > "${trm_rtfile}"
+       json_init
+       json_add_object "data"
 fi
 
 # control travelmate actions
 #
 while true
 do
-    if [ -z "${trm_action}" ]
-    then
-        sleep ${trm_timeout}
-    elif [ "${trm_action}" = "stop" ]
-    then
-        > "${trm_rtfile}"
-        f_log "info" "travelmate instance stopped ::: action: ${trm_action}, pid: $(cat ${trm_pidfile} 2>/dev/null)"
-        exit 0
-    else
-        f_log "info" "travelmate instance started ::: action: ${trm_action}, pid: ${$}"
-        unset trm_action
-    fi
-    f_envload
-    f_main
+       if [ -z "${trm_action}" ]
+       then
+               sleep ${trm_timeout}
+       elif [ "${trm_action}" = "stop" ]
+       then
+               > "${trm_rtfile}"
+               f_log "info" "travelmate instance stopped ::: action: ${trm_action}, pid: $(cat ${trm_pidfile} 2>/dev/null)"
+               exit 0
+       else
+               f_log "info" "travelmate instance started ::: action: ${trm_action}, pid: ${$}"
+               unset trm_action
+       fi
+       f_envload
+       f_main
 done
index 19d85b3aeffd2fc521863d88781829168a9ffb0b..b35d29d560d08c3d43f9bafcd8560d969632783c 100644 (file)
@@ -8,14 +8,12 @@ PKG_NAME:=umurmur
 PKG_VERSION:=0.2.17
 PKG_RELEASE:=1
 
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
-PKG_MIRROR_HASH:=d41db898c826077735d48ec1d1ff9ed200d6520f46ae3dbb0a89dfaad49310cd
-PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_URL:=https://github.com/umurmur/umurmur.git
-PKG_SOURCE_PROTO:=git
-PKG_SOURCE_VERSION:=c4f6b1f6d27f7d7a556d30aedee73a675b5a6c48
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://codeload.github.com/umurmur/umurmur/tar.gz/$(PKG_VERSION)?
+PKG_HASH:=e77b7b6616768f4a1c07442afe49a772692f667b00c23cc85909d4dd0ce206d2
 
 PKG_INSTALL:=1
+PKG_BUILD_PARALLEL:=1
 PKG_FIXUP:=autoreconf
 
 PKG_MAINTAINER:=Martin Johansson <martin@fatbob.nu>
index 3700c24d1d07d337e3959a6f0a04e90fa569828c..e89afc7e1c041b7a5cb980eb6784578a5d71808f 100644 (file)
@@ -8,8 +8,8 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=unbound
-PKG_VERSION:=1.7.3
-PKG_RELEASE:=6
+PKG_VERSION:=1.8.1
+PKG_RELEASE:=2
 
 PKG_LICENSE:=BSD-3-Clause
 PKG_LICENSE_FILES:=LICENSE
@@ -17,7 +17,7 @@ PKG_MAINTAINER:=Eric Luehrsen <ericluehrsen@gmail.com>
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=http://www.unbound.net/downloads
-PKG_HASH:=c11de115d928a6b48b2165e0214402a7a7da313cd479203a7ce7a8b62cba602d
+PKG_HASH:=c362b3b9c35d1b8c1918da02cdd5528d729206c14c767add89ae95acae363c5d
 
 PKG_BUILD_PARALLEL:=1
 PKG_FIXUP:=autoreconf
index 812d9a60764ccbd83261d60100a78d2cac3d9826..6576b2c85e25521695538cb782bf098286ef74c5 100644 (file)
@@ -273,8 +273,9 @@ config unbound
 
   option protocol 'mixed'
     Unbound can limit its protocol used for recursive queries.
-    ip4_only - limit issues if you do not have native IPv6
+    ip4_only - old fashioned IPv4 upstream and downstream
     ip6_only - test environment only; could cauase problems
+    ip6_local - upstream IPv4 only and local network IPv4 and IPv6
     ip6_prefer - both IPv4 and IPv6 but try IPv6 first
     mixed - both IPv4 and IPv6
     default - Unbound built-in defaults
index b97f2f1aab978720bd8ea9ae5aa72717ce02a339..85c15c2f2cf7e83e08dfe2e486d1331c587df91f 100644 (file)
 # function from dnsmasq and use DHCPv4 MAC to find IPV6 SLAAC hosts.
 #
 # External Parameters
-#   "hostfile" = where this script will cache host DNS data
+#   "conffile" = Unbound configuration left for a restart
+#   "pipefile" = DNS entries for unbound-control standard input
 #   "domain" = text domain suffix
 #   "bslaac" = boolean, use DHCPv4 MAC to find GA and ULA IPV6 SLAAC
 #   "bisolt" = boolean, format <host>.<network>.<domain>. so you can isolate
-#   "bconf"  = boolean, write conf file format rather than pipe records
+#   "bconf"  = boolean, write conf file with pipe records
 #
 ##############################################################################
 
     if ( bconf == 1 ) {
       x = ( "local-data: \"" fqdn ". 300 IN A " adr "\"" ) ;
       y = ( "local-data-ptr: \"" adr " 300 " fqdn "\"" ) ;
-      print ( x "\n" y "\n" ) > hostfile ;
+      print ( x "\n" y "\n" ) > conffile ;
     }
 
-    else {
-      for( i=1; i<=4; i++ ) { qpr = ( ptr[i] "." qpr) ; }
-      x = ( fqdn ". 300 IN A " adr ) ;
-      y = ( qpr "in-addr.arpa. 300 IN PTR " fqdn ) ;
-      print ( x "\n" y ) > hostfile ;
-    }
+
+    # always create the pipe file
+    for( i=1; i<=4; i++ ) { qpr = ( ptr[i] "." qpr) ; }
+    x = ( fqdn ". 300 IN A " adr ) ;
+    y = ( qpr "in-addr.arpa. 300 IN PTR " fqdn ) ;
+    print ( x "\n" y ) > pipefile ;
 
 
     if (( bslaac == 1 ) && ( slaac != 0 )) {
           if ( bconf == 1 ) {
             x = ( "local-data: \"" fqdn ". 300 IN AAAA " adr "\"" ) ;
             y = ( "local-data-ptr: \"" adr " 300 " fqdn "\"" ) ;
-            print ( x "\n" y "\n" ) > hostfile ;
+            print ( x "\n" y "\n" ) > conffile ;
           }
 
-          else {
-            qpr = ipv6_ptr( adr ) ;
-            x = ( fqdn ". 300 IN AAAA " adr ) ;
-            y = ( qpr ". 300 IN PTR " fqdn ) ;
-            print ( x "\n" y ) > hostfile ;
-          }
+
+          # always create the pipe file
+          qpr = ipv6_ptr( adr ) ;
+          x = ( fqdn ". 300 IN AAAA " adr ) ;
+          y = ( qpr ". 300 IN PTR " fqdn ) ;
+          print ( x "\n" y ) > pipefile ;
         }
       }
 
       if ( bconf == 1 ) {
         x = ( "local-data: \"" fqdn ". 300 IN AAAA " adr "\"" ) ;
         y = ( "local-data-ptr: \"" adr " 300 " fqdn "\"" ) ;
-        print ( x "\n" y "\n" ) > hostfile ;
+        print ( x "\n" y "\n" ) > conffile ;
       }
 
-      else {
-        # only for provided hostnames and full /128 assignments
-        qpr = ipv6_ptr( adr ) ;
-        x = ( fqdn ". 300 IN AAAA " adr ) ;
-        y = ( qpr ". 300 IN PTR " fqdn ) ;
-        print ( x "\n" y ) > hostfile ;
-      }
+
+      # only for provided hostnames and full /128 assignments
+      qpr = ipv6_ptr( adr ) ;
+      x = ( fqdn ". 300 IN AAAA " adr ) ;
+      y = ( qpr ". 300 IN PTR " fqdn ) ;
+      print ( x "\n" y ) > pipefile ;
     }
 
     if (cdr2 == 128) {
       if ( bconf == 1 ) {
         x = ( "local-data: \"" fqdn ". 300 IN AAAA " adr2 "\"" ) ;
         y = ( "local-data-ptr: \"" adr2 " 300 " fqdn "\"" ) ;
-        print ( x "\n" y "\n" ) > hostfile ;
+        print ( x "\n" y "\n" ) > conffile ;
       }
 
-      else {
-        # odhcp puts GA and ULA on the same line (position 9 and 10)
-        qpr2 = ipv6_ptr( adr2 ) ;
-        x = ( fqdn ". 300 IN AAAA " adr2 ) ;
-        y = ( qpr2 ". 300 IN PTR " fqdn ) ;
-        print ( x "\n" y ) > hostfile ;
-      }
+
+      # odhcp puts GA and ULA on the same line (position 9 and 10)
+      qpr2 = ipv6_ptr( adr2 ) ;
+      x = ( fqdn ". 300 IN AAAA " adr2 ) ;
+      y = ( qpr2 ". 300 IN PTR " fqdn ) ;
+      print ( x "\n" y ) > pipefile ;
     }
   }
 
index 721198d70405e8fdcb9be550189e2cffa2cc80b8..da6f1afe05beb56c9099b43de42cfeb3ac43e511 100644 (file)
 ##############################################################################
 
 odhcpd_zonedata() {
-  local longconf dateconf
-  local dns_ls_add=$UB_VARDIR/dhcp_dns.add
-  local dns_ls_del=$UB_VARDIR/dhcp_dns.del
-  local dhcp_ls_new=$UB_VARDIR/dhcp_lease.new
-  local dhcp_ls_old=$UB_VARDIR/dhcp_lease.old
-  local dhcp_ls_add=$UB_VARDIR/dhcp_lease.add
-  local dhcp_ls_del=$UB_VARDIR/dhcp_lease.del
-
   local dhcp_link=$( uci_get unbound.@unbound[0].dhcp_link )
   local dhcp4_slaac6=$( uci_get unbound.@unbound[0].dhcp4_slaac6 )
   local dhcp_domain=$( uci_get unbound.@unbound[0].domain )
@@ -45,52 +37,68 @@ odhcpd_zonedata() {
 
   if [ -f "$UB_TOTAL_CONF" -a -f "$dhcp_origin" \
        -a "$dhcp_link" = "odhcpd" -a -n "$dhcp_domain" ] ; then
+    local longconf dateconf
+    local dns_ls_add=$UB_VARDIR/dhcp_dns.add
+    local dns_ls_del=$UB_VARDIR/dhcp_dns.del
+    local dns_ls_new=$UB_VARDIR/dhcp_dns.new
+    local dns_ls_old=$UB_VARDIR/dhcp_dns.old
+    local dhcp_ls_new=$UB_VARDIR/dhcp_lease.new
+
     # Capture the lease file which could be changing often
     sort $dhcp_origin > $dhcp_ls_new
 
 
-    if [ ! -f $UB_DHCP_CONF -o ! -f $dhcp_ls_old ] ; then
-      longconf=2
+    if [ ! -f $UB_DHCP_CONF -o ! -f $dns_ls_old ] ; then
+      # no old files laying around
+      longconf=freshstart
 
     else
+      # incremental at high load or full refresh about each 5 minutes
       dateconf=$(( $( date +%s ) - $( date -r $UB_DHCP_CONF +%s ) ))
 
 
-      if [ $dateconf > 150 ] ; then
-        longconf=1
+      if [ $dateconf -gt 300 ] ; then
+        longconf=longtime
       else
-        longconf=0
+        longconf=increment
       fi
     fi
 
 
-    if [ $longconf -gt 0 ] ; then
-      # Go through the messy business of coding up A, AAAA, and PTR records
-      # This static conf will be available if Unbound restarts asynchronously
-      awk -v hostfile=$UB_DHCP_CONF -v domain=$dhcp_domain \
-          -v bslaac=$dhcp4_slaac6 -v bisolt=0 -v bconf=1 \
+    case $longconf in
+    freshstart)
+      awk -v conffile=$UB_DHCP_CONF -v pipefile=$dns_ls_new \
+          -v domain=$dhcp_domain -v bslaac=$dhcp4_slaac6 \
+          -v bisolt=0 -v bconf=1 \
           -f /usr/lib/unbound/odhcpd.awk $dhcp_ls_new
-    fi
-
 
-    if [ $longconf -lt 2 ] ; then
-      # Deleting and adding all records into Unbound can be a burden in a
-      # high density environment. Use unbound-control incrementally.
-      sort $dhcp_ls_old $dhcp_ls_new $dhcp_ls_new | uniq -u > $dhcp_ls_del
-      awk -v hostfile=$dns_ls_del -v domain=$dhcp_domain \
-          -v bslaac=$dhcp4_slaac6 -v bisolt=0 -v bconf=0 \
-          -f /usr/lib/unbound/odhcpd.awk $dhcp_ls_del
+      cp $dns_ls_new $dns_ls_add
+      cp $dns_ls_new $dns_ls_old
+      ;;
 
-      sort $dhcp_ls_new $dhcp_ls_old $dhcp_ls_old | uniq -u > $dhcp_ls_add
-      awk -v hostfile=$dns_ls_add -v domain=$dhcp_domain \
-          -v bslaac=$dhcp4_slaac6 -v bisolt=0 -v bconf=0 \
-          -f /usr/lib/unbound/odhcpd.awk $dhcp_ls_add
+    longtime)
+      awk -v conffile=$UB_DHCP_CONF -v pipefile=$dns_ls_new \
+          -v domain=$dhcp_domain -v bslaac=$dhcp4_slaac6 \
+          -v bisolt=0 -v bconf=1 \
+          -f /usr/lib/unbound/odhcpd.awk $dhcp_ls_new
 
-    else
-      awk -v hostfile=$dns_ls_add -v domain=$dhcp_domain \
-          -v bslaac=$dhcp4_slaac6 -v bisolt=0 -v bconf=0 \
+      awk '{ print $1 }' $dns_ls_old | sort | uniq > $dns_ls_del
+      cp $dns_ls_new $dns_ls_add
+      cp $dns_ls_new $dns_ls_old
+      ;;
+
+    *)
+      # incremental add and prepare the old list for delete later
+      # unbound-control can be slow so high DHCP rates cannot run a full list
+      awk -v conffile=$UB_DHCP_CONF -v pipefile=$dns_ls_new \
+          -v domain=$dhcp_domain -v bslaac=$dhcp4_slaac6 \
+          -v bisolt=0 -v bconf=0 \
           -f /usr/lib/unbound/odhcpd.awk $dhcp_ls_new
-    fi
+
+      sort $dns_ls_new $dns_ls_old $dns_ls_old | uniq -u > $dns_ls_add
+      sort $dns_ls_new $dns_ls_old | uniq > $dns_ls_old
+      ;;
+    esac
 
 
     if [ -f "$dns_ls_del" ] ; then
@@ -104,8 +112,7 @@ odhcpd_zonedata() {
 
 
     # prepare next round
-    mv $dhcp_ls_new $dhcp_ls_old
-    rm -f $dns_ls_del $dns_ls_add $dhcp_ls_del $dhcp_ls_add
+    rm -f $dns_ls_new $dns_ls_del $dns_ls_add $dhcp_ls_new
   fi
 }
 
index 0613312209309f54c9c1fb3c2626a3c150e826db..759616136f34faf3f4489261cd168efe3283db22 100644 (file)
@@ -422,8 +422,10 @@ unbound_zone() {
 
   case $zone_type in
     auth_zone)
-      if [ -n "$UB_LIST_ZONE_NAMES" \
+      if [ "$UB_B_NTP_BOOT" -eq 0 -a -n "$UB_LIST_ZONE_NAMES" \
            -a \( -n "$url_dir" -o -n "$UB_LIST_ZONE_SERVERS" \) ] ; then
+        # Note AXFR may have large downloads. If NTP restart is configured,
+        # then this can cause procd to force a process kill.
         for zone_name in $UB_LIST_ZONE_NAMES ; do
           if [ "$zone_name" = "." ] ; then
             zone_sym=.
@@ -619,7 +621,6 @@ unbound_conf() {
         echo "  port: $UB_N_RX_PORT"
         echo "  outgoing-port-permit: 10240-65535"
         echo "  interface: 0.0.0.0"
-        echo "  interface: ::0"
         echo "  outgoing-interface: 0.0.0.0"
         echo "  do-ip4: yes"
         echo "  do-ip6: no"
@@ -632,7 +633,6 @@ unbound_conf() {
         echo "  edns-buffer-size: $UB_N_EDNS_SIZE"
         echo "  port: $UB_N_RX_PORT"
         echo "  outgoing-port-permit: 10240-65535"
-        echo "  interface: 0.0.0.0"
         echo "  interface: ::0"
         echo "  outgoing-interface: ::0"
         echo "  do-ip4: no"
@@ -641,6 +641,20 @@ unbound_conf() {
       } >> $UB_CORE_CONF
       ;;
 
+   ip6_local)
+      {
+        echo "  edns-buffer-size: $UB_N_EDNS_SIZE"
+        echo "  port: $UB_N_RX_PORT"
+        echo "  outgoing-port-permit: 10240-65535"
+        echo "  interface: 0.0.0.0"
+        echo "  interface: ::0"
+        echo "  outgoing-interface: 0.0.0.0"
+        echo "  do-ip4: yes"
+        echo "  do-ip6: yes"
+        echo
+      } >> $UB_CORE_CONF
+      ;;
+
     ip6_prefer)
       {
         echo "  edns-buffer-size: $UB_N_EDNS_SIZE"
@@ -692,27 +706,15 @@ unbound_conf() {
   esac
 
 
-  {
-    # Other harding and options for an embedded router
-    echo "  harden-short-bufsize: yes"
-    echo "  harden-large-queries: yes"
-    echo "  harden-glue: yes"
-    echo "  harden-below-nxdomain: no"
-    echo "  harden-referral-path: no"
-    echo "  use-caps-for-id: no"
-    echo
-  } >> $UB_CORE_CONF
-
-
   case "$UB_D_RESOURCE" in
     # Tiny - Unbound's recommended cheap hardware config
     tiny)   rt_mem=1  ; rt_conn=2  ; rt_buff=1 ;;
     # Small - Half RRCACHE and open ports
     small)  rt_mem=8  ; rt_conn=10 ; rt_buff=2 ;;
     # Medium - Nearly default but with some added balancintg
-    medium) rt_mem=16 ; rt_conn=20 ; rt_buff=4 ;;
+    medium) rt_mem=16 ; rt_conn=15 ; rt_buff=4 ;;
     # Large - Double medium
-    large)  rt_mem=32 ; rt_conn=40 ; rt_buff=4 ;;
+    large)  rt_mem=32 ; rt_conn=20 ; rt_buff=4 ;;
     # Whatever unbound does
     *) rt_mem=0 ; rt_conn=0 ;;
   esac
@@ -720,10 +722,16 @@ unbound_conf() {
 
   if [ "$rt_mem" -gt 0 ] ; then
     {
+      # Other harding and options for an embedded router
+      echo "  harden-short-bufsize: yes"
+      echo "  harden-large-queries: yes"
+      echo "  harden-glue: yes"
+      echo "  use-caps-for-id: no"
+      echo
       # Set memory sizing parameters
       echo "  msg-buffer-size: $(($rt_buff*8192))"
-      echo "  outgoing-range: $(($rt_conn*64))"
-      echo "  num-queries-per-thread: $(($rt_conn*32))"
+      echo "  outgoing-range: $(($rt_conn*32))"
+      echo "  num-queries-per-thread: $(($rt_conn*16))"
       echo "  outgoing-num-tcp: $(($rt_conn))"
       echo "  incoming-num-tcp: $(($rt_conn))"
       echo "  rrset-cache-size: $(($rt_mem*256))k"
index 5559a4870f5c30a81a9744ae968fd004d6a8b582..0a4b61104bb0f4692260c4323ecedd9fdf8e118d 100644 (file)
@@ -1,3 +1,8 @@
+OpenWrt (modification):
+Patch the default configuration file with the tiny memory
+configuration example from Unbound documentation. This is the best
+starting point for embedded routers if one is not going to use UCI.
+
 Index: doc/example.conf.in
 ===================================================================
 --- a/doc/example.conf.in
diff --git a/net/unbound/patches/200-openssl-log-err.patch b/net/unbound/patches/200-openssl-log-err.patch
deleted file mode 100644 (file)
index b1ddd5d..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-Index: daemon/remote.c
-===================================================================
---- a/daemon/remote.c
-+++ b/daemon/remote.c
-@@ -1950,6 +1950,11 @@
-                               return NULL;
-                       }
-               } else {
-+#ifndef HAVE_SSL_SET1_HOST
-+                      if(auth_name)
-+                        log_err("no name verification functionality in "
-+                              "ssl library, ignored name for %s", todo);
-+#endif
-                       /* add address */
-                       if(!delegpt_add_addr_mlc(dp, &addr, addrlen, 0, 0,
-                               auth_name)) {
-Index: iterator/iter_fwd.c
-===================================================================
---- a/iterator/iter_fwd.c
-+++ b/iterator/iter_fwd.c
-@@ -239,6 +239,11 @@
-                               s->name, p->str);
-                       return 0;
-               }
-+#ifndef HAVE_SSL_SET1_HOST
-+              if(tls_auth_name)
-+                      log_err("no name verification functionality in "
-+                              "ssl library, ignored name for %s", p->str);
-+#endif
-               if(!delegpt_add_addr_mlc(dp, &addr, addrlen, 0, 0,
-                       tls_auth_name)) {
-                       log_err("out of memory");
-Index: iterator/iter_hints.c
-===================================================================
---- a/iterator/iter_hints.c
-+++ b/iterator/iter_hints.c
-@@ -252,6 +252,11 @@
-                               s->name, p->str);
-                       return 0;
-               }
-+#ifndef HAVE_SSL_SET1_HOST
-+              if(auth_name)
-+                      log_err("no name verification functionality in "
-+                              "ssl library, ignored name for %s", p->str);
-+#endif
-               if(!delegpt_add_addr_mlc(dp, &addr, addrlen, 0, 0,
-                       auth_name)) {
-                       log_err("out of memory");
index 3cf0c2208b51e33c67ac87c7f6d21a23fac40396..15b975a0c5b259960f7a7086cd1687a751e3e819 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=wifidog
 PKG_VERSION:=1.3.0
-PKG_RELEASE:=2
+PKG_RELEASE:=3
 
 
 PKG_LICENSE:=GPL-2.0
diff --git a/net/wifidog/patches/010-use-tls-above-1.patch b/net/wifidog/patches/010-use-tls-above-1.patch
new file mode 100644 (file)
index 0000000..ba39750
--- /dev/null
@@ -0,0 +1,38 @@
+diff --git a/configure.in b/configure.in
+index bf5463a..43ec27c 100644
+--- a/configure.in
++++ b/configure.in
+@@ -96,8 +96,8 @@ if test "x$enable_cyassl" = xyes; then
+         # the use the new naming scheme below as cyassl/ssl.h is not available for
+         # AC_SEARCH_LIBS
+         AC_CHECK_HEADERS(cyassl/ssl.h)
+-        AC_SEARCH_LIBS([CyaTLSv1_client_method], [cyassl], [], [
+-            AC_SEARCH_LIBS([wolfTLSv1_client_method], [wolfssl], [], [
++        AC_SEARCH_LIBS([CyaSSLv23_client_method], [cyassl], [], [
++            AC_SEARCH_LIBS([wolfSSLv23_client_method], [wolfssl], [], [
+                             AC_MSG_ERROR([unable to locate SSL lib: either wolfSSL or CyaSSL needed.])
+             ])
+         ])
+@@ -110,7 +110,7 @@ if test "x$enable_cyassl" = xyes; then
+         ]], [[
+                 CYASSL_CTX *ctx;
+                 CyaSSL_Init();
+-                ctx = CyaSSL_CTX_new(CyaTLSv1_client_method());
++                ctx = CyaSSL_CTX_new(CyaSSLv23_client_method());
+                 CyaSSL_CTX_UseSNI(ctx, CYASSL_SNI_HOST_NAME, "wifidog.org", 11);
+         ]])], [enabled_sni=yes], [enabled_sni=no])
+diff --git a/src/simple_http.c b/src/simple_http.c
+index f0e27ee..7271021 100644
+--- a/src/simple_http.c
++++ b/src/simple_http.c
+@@ -162,8 +162,7 @@ get_cyassl_ctx(const char *hostname)
+     if (NULL == cyassl_ctx) {
+         CyaSSL_Init();
+         /* Create the CYASSL_CTX */
+-        /* Allow TLSv1.0 up to TLSv1.2 */
+-        if ((cyassl_ctx = CyaSSL_CTX_new(CyaTLSv1_client_method())) == NULL) {
++        if ((cyassl_ctx = CyaSSL_CTX_new(CyaSSLv23_client_method())) == NULL) {
+             debug(LOG_ERR, "Could not create CYASSL context.");
+             UNLOCK_CYASSL_CTX();
+             return NULL;
index 1cda1ae934bcb82a22c82ab1c786ed28e3489427..9b921dae996226fad6f4eb4ed9097b51de11d841 100644 (file)
@@ -1,7 +1,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=wsdd2
-PKG_RELEASE:=1
+PKG_RELEASE:=3
 
 PKG_SOURCE_PROTO:=git
 PKG_SOURCE_URL:=https://github.com/Andy2244/wsdd2.git
index b795d8e8ba5320c4722ac583f287b8876e812770..29272f94209e7777bd0435bfa8cae8acae0cd136 100644 (file)
@@ -10,3 +10,8 @@ start_service() {
     procd_set_param file /var/etc/smb.conf
     procd_close_instance
 }
+
+service_triggers() {
+       PROCD_RELOAD_DELAY=3000
+       procd_add_reload_trigger "dhcp" "system" "samba4"
+}
index 5f60f221615b9439beeeb7bdb4268f27a05d2938..0c59365a1c07551f59a4bddd2fc9b5bcbe6db942 100644 (file)
@@ -1,16 +1,19 @@
---- a/wsd.c    2018-07-20
-+++ b/wsd.c    2018-07-20
-@@ -97,12 +97,17 @@ static void uuid_endpoint(char *uuid, si
+--- a/wsd.c    2018-07-24
++++ b/wsd.c    2018-09-10
+@@ -96,13 +96,19 @@ static void uuid_endpoint(char *uuid, si
+ {
        FILE *fp = fopen("/etc/machine-id", "r");
        int c, i = 0;
++      
 +      if (!fp) {
-+              DEBUG(0, W, "Can't open '/etc/machine-id', trying '/proc/sys/kernel/random/boot_id'");
 +              fp = fopen("/proc/sys/kernel/random/boot_id", "r");
 +      }
-+              
-       if (!fp)
+-      if (!fp)
++      if (!fp) {
++              DEBUG(0, W, "Can't open required '/etc/machine-id' or '/proc/sys/kernel/random/boot_id'");
                return;
++      }
  
        while (i < 36 && (c = getc(fp)) != EOF &&
 -              (isdigit(c) || (islower(c) && isxdigit(c)))) {
index 816b1818393c79a93ba5520b783dd4097c562990..c5725aad981fe2c53c024ec953514e2b31655462 100644 (file)
@@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=zerotier
 PKG_VERSION:=1.2.12
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 PKG_LICENSE:=GPL-3.0
 
@@ -66,10 +66,7 @@ ifeq ($(CONFIG_ZEROTIER_ENABLE_SELFTEST),y)
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/zerotier-selftest $(1)/usr/bin/
 endif
 
-       $(INSTALL_DIR) $(1)/etc/init.d/
-       $(INSTALL_BIN) files/zerotier.init $(1)/etc/init.d/zerotier
-       $(INSTALL_DIR) $(1)/etc/config
-       $(INSTALL_CONF) files/zerotier.config $(1)/etc/config/zerotier
+       $(CP) ./files/* $(1)/
 endef
 
 $(eval $(call BuildPackage,zerotier))
diff --git a/net/zerotier/files/etc/config/zerotier b/net/zerotier/files/etc/config/zerotier
new file mode 100644 (file)
index 0000000..1a016eb
--- /dev/null
@@ -0,0 +1,15 @@
+
+config zerotier sample_config
+       option enabled 0
+
+       # persistent configuration folder (for ZT controller mode)
+       #option config_path '/etc/zerotier'
+
+       #option port '9993'
+
+       # Generate secret on first start
+       option secret ''
+
+       # Join a public network called Earth
+       list join '8056c2e21c000001'
+       #list join '<other_network>'
diff --git a/net/zerotier/files/etc/init.d/zerotier b/net/zerotier/files/etc/init.d/zerotier
new file mode 100755 (executable)
index 0000000..ba6b427
--- /dev/null
@@ -0,0 +1,103 @@
+#!/bin/sh /etc/rc.common
+
+START=90
+
+USE_PROCD=1
+
+PROG=/usr/bin/zerotier-one
+CONFIG_PATH=/var/lib/zerotier-one
+
+section_enabled() {
+       config_get_bool enabled "$1" 'enabled' 0
+       [ $enabled -ne 0 ]
+}
+
+start_instance() {
+       local cfg="$1"
+       local port secret config_path path
+       local args=""
+
+       if ! section_enabled "$cfg"; then
+               echo "disabled in config"
+               return 1
+       fi
+
+       config_get config_path $cfg 'config_path'
+       config_get port $cfg 'port'
+       config_get secret $cfg 'secret'
+
+       path=${CONFIG_PATH}_$cfg
+
+       # Remove existing link or folder
+       rm -rf $path
+
+       # Create link from CONFIG_PATH to config_path
+       if [ -n "$config_path" -a "$config_path" != "$path" ]; then
+               if [ ! -d "$config_path" ]; then
+                       echo "ZeroTier config_path does not exist: $config_path" 1>&2
+                       return
+               fi
+
+               ln -s $config_path $path
+       fi
+
+       mkdir -p $path/networks.d
+
+       # link latest default config path to latest config path
+       rm -f $CONFIG_PATH
+       ln -s $path $CONFIG_PATH
+
+       if [ -n "$port" ]; then
+               args="$args -p${port}"
+       fi
+
+       if [ -z "$secret" ]; then
+               echo "Generate secret - please wait..."
+               local sf="/tmp/zt.$cfg.secret"
+
+               zerotier-idtool generate "$sf" > /dev/null
+               [ $? -ne 0 ] && return 1
+
+               secret="$(cat $sf)"
+               rm "$sf"
+
+               uci set zerotier.$cfg.secret="$secret"
+               uci commit zerotier
+       fi
+
+       if [ -n "$secret" ]; then
+               echo "$secret" > $path/identity.secret
+               # make sure there is not previous identity.public
+               rm -f $path/identity.public
+       fi
+
+       add_join() {
+               # an (empty) config file will cause ZT to join a network
+               touch $path/networks.d/$1.conf
+       }
+
+       config_list_foreach $cfg 'join' add_join
+
+       procd_open_instance
+       procd_set_param command $PROG $args $path
+       procd_set_param stderr 1
+       procd_close_instance
+}
+
+start_service() {
+       config_load 'zerotier'
+       config_foreach start_instance 'zerotier'
+}
+
+stop_instance() {
+       local cfg="$1"
+
+       # Remove existing link or folder
+       rm -rf ${CONFIG_PATH}_${cfg}
+}
+
+stop_service() {
+       config_load 'zerotier'
+       config_foreach stop_instance 'zerotier'
+       rm -f ${CONFIG_PATH}
+}
diff --git a/net/zerotier/files/zerotier.config b/net/zerotier/files/zerotier.config
deleted file mode 100644 (file)
index b62e155..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-
-config zerotier sample_config
-       option enabled 0
-
-       # persistent configuration folder (for ZT controller mode)
-       #option config_path '/etc/zerotier'
-
-       #option port '9993'
-
-       # Generate secret on first start
-       option secret 'generate'
-
-       # Join a public network called Earth
-       list join '8056c2e21c000001'
diff --git a/net/zerotier/files/zerotier.init b/net/zerotier/files/zerotier.init
deleted file mode 100644 (file)
index 390dbd3..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-#!/bin/sh /etc/rc.common
-
-START=90
-
-USE_PROCD=1
-
-PROG=/usr/bin/zerotier-one
-CONFIG_PATH=/var/lib/zerotier-one
-
-section_enabled() {
-       config_get_bool enabled "$1" 'enabled' 0
-       [ $enabled -gt 0 ]
-}
-
-start_instance() {
-       local cfg="$1"
-       local port secret config_path
-       local ARGS=""
-
-       if ! section_enabled "$cfg"; then
-               echo "disabled in config"
-               return 1
-       fi
-
-       config_get config_path $cfg 'config_path'
-       config_get_bool port $cfg 'port'
-       config_get secret $cfg 'secret'
-
-       # Remove existing link or folder
-       rm -rf $CONFIG_PATH
-
-       # Create link from CONFIG_PATH to config_path
-       if [ -n "$config_path" -a "$config_path" != $CONFIG_PATH ]; then
-               if [ ! -d "$config_path" ]; then
-                       echo "ZeroTier config_path does not exist: $config_path"
-                       return
-               fi
-
-               ln -s $config_path $CONFIG_PATH
-       fi
-
-       mkdir -p $CONFIG_PATH/networks.d
-
-       if [ -n "$port" ]; then
-               ARGS="$ARGS -p$port"
-       fi
-
-       if [ "$secret" = "generate" ]; then
-               echo "Generate secret - please wait..."
-               local sf="/tmp/zt.$cfg.secret"
-
-               zerotier-idtool generate "$sf" > /dev/null
-               [ $? -ne 0 ] && return 1
-
-               secret="$(cat $sf)"
-               rm "$sf"
-
-               uci set zerotier.$cfg.secret="$secret"
-               uci commit zerotier
-       fi
-
-       if [ -n "$secret" ]; then
-               echo "$secret" > $CONFIG_PATH/identity.secret
-               # make sure there is not previous identity.public
-               rm -f $CONFIG_PATH/identity.public
-       fi
-
-       add_join() {
-               # an (empty) config file will cause ZT to join a network
-               touch $CONFIG_PATH/networks.d/$1.conf
-       }
-
-       config_list_foreach $cfg 'join' add_join
-
-       procd_open_instance
-       procd_set_param command $PROG $ARGS $CONFIG_PATH
-       procd_set_param stderr 1
-       procd_close_instance
-}
-
-start_service() {
-       config_load 'zerotier'
-       config_foreach start_instance 'zerotier'
-}
-
-stop_instance() {
-       local cfg="$1"
-
-       # Remove existing link or folder
-       rm -rf $CONFIG_PATH
-}
-
-stop_service() {
-       config_load 'zerotier'
-       config_foreach stop_instance 'zerotier'
-}
index 8cb3572d056d5cb88febf3de1c0aa1a696b2a9c6..ee4aa66627e9ce2efd5f9ec21071e3bd6a9c6628 100644 (file)
@@ -1,6 +1,4 @@
 #
-# Copyright (C) 2014 OpenWrt.org
-#
 # This is free software, licensed under the GNU General Public License v2.
 # See /LICENSE for more information.
 #
@@ -9,7 +7,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=espeak
 PKG_VERSION:=1.48.04
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-source.zip
 PKG_SOURCE_URL:=@SF/espeak
@@ -45,6 +43,12 @@ MAKE_FLAGS+= \
 
 MAKE_PATH:=./src
 
+# Use system header for portaudio
+define Build/Prepare
+       $(call Build/Prepare/Default)
+       rm $(PKG_BUILD_DIR)/src/portaudio.h
+endef
+
 define Package/espeak/install
        $(INSTALL_DIR) $(1)/usr/bin
        $(CP) $(PKG_INSTALL_DIR)/usr/bin/espeak $(1)/usr/bin/
diff --git a/sound/espeak/patches/101-Fix_GCC_narrowing_conversion_errors.patch b/sound/espeak/patches/101-Fix_GCC_narrowing_conversion_errors.patch
new file mode 100644 (file)
index 0000000..e4ec57d
--- /dev/null
@@ -0,0 +1,20 @@
+--- a/src/tr_languages.cpp
++++ b/src/tr_languages.cpp
+@@ -198,7 +198,7 @@ static const unsigned short chars_ignore
+       0x200d,  1, // zero width joiner
+       0, 0 };
+-const char string_ordinal[] = {0xc2,0xba,0};  // masculine ordinal character, UTF-8
++const unsigned char string_ordinal[] = {0xc2,0xba,0};  // masculine ordinal character, UTF-8
+ static Translator* NewTranslator(void)
+@@ -758,7 +758,7 @@ Translator *SelectTranslator(const char
+                               tr->langopts.stress_flags = S_FINAL_SPANISH | S_FINAL_DIM_ONLY | S_FINAL_NO_2;
+                               tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_DECIMAL_COMMA | NUM_AND_UNITS | NUM_OMIT_1_HUNDRED | NUM_OMIT_1_THOUSAND | NUM_ROMAN | NUM_ROMAN_ORDINAL;
+                               tr->langopts.numbers2 = NUM2_ORDINAL_NO_AND;
+-                              tr->langopts.roman_suffix = string_ordinal;
++                              tr->langopts.roman_suffix = (const char *)string_ordinal;
+                       }
+                       else
+                       if(name2 == L_pap)
diff --git a/sound/espeak/patches/101-portaudio.patch b/sound/espeak/patches/101-portaudio.patch
deleted file mode 100644 (file)
index ff396b3..0000000
+++ /dev/null
@@ -1,2093 +0,0 @@
---- a/src/portaudio.h
-+++ /dev/null
-@@ -1,466 +0,0 @@
--// NOTE: Copy this file to  portaudio.h  in order to compile with V18 portaudio
--
--
--#ifndef PORT_AUDIO_H
--#define PORT_AUDIO_H
--
--#ifdef __cplusplus
--extern "C"
--{
--#endif /* __cplusplus */
--
--/*
-- * $Id: portaudio.h,v 1.5 2002/03/26 18:04:22 philburk Exp $
-- * PortAudio Portable Real-Time Audio Library
-- * PortAudio API Header File
-- * Latest version available at: http://www.audiomulch.com/portaudio/
-- *
-- * Copyright (c) 1999-2000 Ross Bencina and Phil Burk
-- *
-- * Permission is hereby granted, free of charge, to any person obtaining
-- * a copy of this software and associated documentation files
-- * (the "Software"), to deal in the Software without restriction,
-- * including without limitation the rights to use, copy, modify, merge,
-- * publish, distribute, sublicense, and/or sell copies of the Software,
-- * and to permit persons to whom the Software is furnished to do so,
-- * subject to the following conditions:
-- *
-- * The above copyright notice and this permission notice shall be
-- * included in all copies or substantial portions of the Software.
-- *
-- * Any person wishing to distribute modifications to the Software is
-- * requested to send the modifications to the original developer so that
-- * they can be incorporated into the canonical version.
-- *
-- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
-- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
-- * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-- *
-- */
--
--typedef int PaError;
--typedef enum {
--    paNoError = 0,
--
--    paHostError = -10000,
--    paInvalidChannelCount,
--    paInvalidSampleRate,
--    paInvalidDeviceId,
--    paInvalidFlag,
--    paSampleFormatNotSupported,
--    paBadIODeviceCombination,
--    paInsufficientMemory,
--    paBufferTooBig,
--    paBufferTooSmall,
--    paNullCallback,
--    paBadStreamPtr,
--    paTimedOut,
--    paInternalError,
--    paDeviceUnavailable
--} PaErrorNum;
--
--/*
-- Pa_Initialize() is the library initialisation function - call this before
-- using the library.
--
--*/
--
--PaError Pa_Initialize( void );
--
--/*
-- Pa_Terminate() is the library termination function - call this after
-- using the library.
--
--*/
--
--PaError Pa_Terminate( void );
--
--/*
-- Pa_GetHostError() returns a host specific error code.
-- This can be called after receiving a PortAudio error code of paHostError.
--
--*/
--
--long Pa_GetHostError( void );
--
--/*
-- Pa_GetErrorText() translates the supplied PortAudio error number
-- into a human readable message.
-- 
--*/
--
--const char *Pa_GetErrorText( PaError errnum );
--
--/*
-- Sample formats
-- 
-- These are formats used to pass sound data between the callback and the
-- stream. Each device has a "native" format which may be used when optimum
-- efficiency or control over conversion is required.
-- 
-- Formats marked "always available" are supported (emulated) by all 
-- PortAudio implementations.
-- 
-- The floating point representation (paFloat32) uses +1.0 and -1.0 as the 
-- maximum and minimum respectively.
--
-- paUInt8 is an unsigned 8 bit format where 128 is considered "ground"
--
--*/
--
--typedef unsigned long PaSampleFormat;
--#define paFloat32      ((PaSampleFormat) (1<<0)) /*always available*/
--#define paInt16        ((PaSampleFormat) (1<<1)) /*always available*/
--#define paInt32        ((PaSampleFormat) (1<<2)) /*always available*/
--#define paInt24        ((PaSampleFormat) (1<<3))
--#define paPackedInt24  ((PaSampleFormat) (1<<4))
--#define paInt8         ((PaSampleFormat) (1<<5))
--#define paUInt8        ((PaSampleFormat) (1<<6))
--#define paCustomFormat ((PaSampleFormat) (1<<16))
--
--/*
-- Device enumeration mechanism.
-- 
-- Device ids range from 0 to Pa_CountDevices()-1.
-- 
-- Devices may support input, output or both.
--
--*/
--
--typedef int PaDeviceID;
--#define paNoDevice -1
--
--int Pa_CountDevices( void );
--
--typedef struct
--{
--    int structVersion;
--    const char *name;
--    int maxInputChannels;
--    int maxOutputChannels;
--    /* Number of discrete rates, or -1 if range supported. */
--    int numSampleRates;
--    /* Array of supported sample rates, or {min,max} if range supported. */
--    const double *sampleRates;
--    PaSampleFormat nativeSampleFormats;
--}
--PaDeviceInfo;
--
--/*
-- Pa_GetDefaultInputDeviceID(), Pa_GetDefaultOutputDeviceID() return the
-- default device ids for input and output respectively, or paNoDevice if
-- no device is available.
-- The result can be passed to Pa_OpenStream().
-- 
-- On the PC, the user can specify a default device by
-- setting an environment variable. For example, to use device #1.
-- 
--  set PA_RECOMMENDED_OUTPUT_DEVICE=1
-- 
-- The user should first determine the available device ids by using
-- the supplied application "pa_devs".
--
--*/
--
--PaDeviceID Pa_GetDefaultInputDeviceID( void );
--PaDeviceID Pa_GetDefaultOutputDeviceID( void );
--
--
--
--/*
-- Pa_GetDeviceInfo() returns a pointer to an immutable PaDeviceInfo structure
-- for the device specified.
-- If the device parameter is out of range the function returns NULL.
--
-- PortAudio manages the memory referenced by the returned pointer, the client
-- must not manipulate or free the memory. The pointer is only guaranteed to be
-- valid between calls to Pa_Initialize() and Pa_Terminate().
--
--*/
--
--const PaDeviceInfo* Pa_GetDeviceInfo( PaDeviceID device );
--
--/*
-- PaTimestamp is used to represent a continuous sample clock with arbitrary
-- start time that can be used for syncronization. The type is used for the
-- outTime argument to the PortAudioCallback and as the result of Pa_StreamTime()
--
--*/
--
--typedef double PaTimestamp;
--
--/*
-- PortAudioCallback is implemented by PortAudio clients.
-- 
-- inputBuffer and outputBuffer are arrays of interleaved samples,
-- the format, packing and number of channels used by the buffers are
-- determined by parameters to Pa_OpenStream() (see below).
-- 
-- framesPerBuffer is the number of sample frames to be processed by the callback.
-- 
-- outTime is the time in samples when the buffer(s) processed by
-- this callback will begin being played at the audio output.
-- See also Pa_StreamTime()
-- 
-- userData is the value of a user supplied pointer passed to Pa_OpenStream()
-- intended for storing synthesis data etc.
-- 
-- return value:
-- The callback can return a non-zero value to stop the stream. This may be
-- useful in applications such as soundfile players where a specific duration
-- of output is required. However, it is not necessary to utilise this mechanism
-- as StopStream() will also terminate the stream. A callback returning a
-- non-zero value must fill the entire outputBuffer.
-- 
-- NOTE: None of the other stream functions may be called from within the
-- callback function except for Pa_GetCPULoad().
--
--*/
--
--typedef int (PortAudioCallback)(
--    void *inputBuffer, void *outputBuffer,
--    unsigned long framesPerBuffer,
--    PaTimestamp outTime, void *userData );
--
--
--/*
-- Stream flags
-- 
-- These flags may be supplied (ored together) in the streamFlags argument to
-- the Pa_OpenStream() function.
--
--*/
--
--#define   paNoFlag      (0)
--#define   paClipOff     (1<<0)   /* disable default clipping of out of range samples */
--#define   paDitherOff   (1<<1)   /* disable default dithering */
--#define   paPlatformSpecificFlags (0x00010000)
--typedef   unsigned long PaStreamFlags;
--
--/*
-- A single PortAudioStream provides multiple channels of real-time
-- input and output audio streaming to a client application.
-- Pointers to PortAudioStream objects are passed between PortAudio functions.
--*/
--
--typedef void PortAudioStream;
--#define PaStream PortAudioStream
--
--/*
-- Pa_OpenStream() opens a stream for either input, output or both.
-- 
-- stream is the address of a PortAudioStream pointer which will receive
-- a pointer to the newly opened stream.
-- 
-- inputDevice is the id of the device used for input (see PaDeviceID above.)
-- inputDevice may be paNoDevice to indicate that an input device is not required.
-- 
-- numInputChannels is the number of channels of sound to be delivered to the
-- callback. It can range from 1 to the value of maxInputChannels in the
-- PaDeviceInfo record for the device specified by the inputDevice parameter.
-- If inputDevice is paNoDevice numInputChannels is ignored.
-- 
-- inputSampleFormat is the sample format of inputBuffer provided to the callback
-- function. inputSampleFormat may be any of the formats described by the
-- PaSampleFormat enumeration (see above). PortAudio guarantees support for
-- the device's native formats (nativeSampleFormats in the device info record)
-- and additionally 16 and 32 bit integer and 32 bit floating point formats.
-- Support for other formats is implementation defined.
-- 
-- inputDriverInfo is a pointer to an optional driver specific data structure
-- containing additional information for device setup or stream processing.
-- inputDriverInfo is never required for correct operation. If not used
-- inputDriverInfo should be NULL.
-- 
-- outputDevice is the id of the device used for output (see PaDeviceID above.)
-- outputDevice may be paNoDevice to indicate that an output device is not required.
-- 
-- numOutputChannels is the number of channels of sound to be supplied by the
-- callback. See the definition of numInputChannels above for more details.
-- 
-- outputSampleFormat is the sample format of the outputBuffer filled by the
-- callback function. See the definition of inputSampleFormat above for more
-- details.
-- 
-- outputDriverInfo is a pointer to an optional driver specific data structure
-- containing additional information for device setup or stream processing.
-- outputDriverInfo is never required for correct operation. If not used
-- outputDriverInfo should be NULL.
-- 
-- sampleRate is the desired sampleRate. For full-duplex streams it is the
-- sample rate for both input and output
-- 
-- framesPerBuffer is the length in sample frames of all internal sample buffers
-- used for communication with platform specific audio routines. Wherever
-- possible this corresponds to the framesPerBuffer parameter passed to the
-- callback function.
-- 
-- numberOfBuffers is the number of buffers used for multibuffered communication
-- with the platform specific audio routines. If you pass zero, then an optimum
-- value will be chosen for you internally. This parameter is provided only
-- as a guide - and does not imply that an implementation must use multibuffered
-- i/o when reliable double buffering is available (such as SndPlayDoubleBuffer()
-- on the Macintosh.)
-- 
-- streamFlags may contain a combination of flags ORed together.
-- These flags modify the behaviour of the streaming process. Some flags may only
-- be relevant to certain buffer formats.
-- 
-- callback is a pointer to a client supplied function that is responsible
-- for processing and filling input and output buffers (see above for details.)
-- 
-- userData is a client supplied pointer which is passed to the callback
-- function. It could for example, contain a pointer to instance data necessary
-- for processing the audio buffers.
-- 
-- return value:
-- Upon success Pa_OpenStream() returns PaNoError and places a pointer to a
-- valid PortAudioStream in the stream argument. The stream is inactive (stopped).
-- If a call to Pa_OpenStream() fails a non-zero error code is returned (see
-- PaError above) and the value of stream is invalid.
-- 
--*/
--
--PaError Pa_OpenStream( PortAudioStream** stream,
--                       PaDeviceID inputDevice,
--                       int numInputChannels,
--                       PaSampleFormat inputSampleFormat,
--                       void *inputDriverInfo,
--                       PaDeviceID outputDevice,
--                       int numOutputChannels,
--                       PaSampleFormat outputSampleFormat,
--                       void *outputDriverInfo,
--                       double sampleRate,
--                       unsigned long framesPerBuffer,
--                       unsigned long numberOfBuffers,
--                       PaStreamFlags streamFlags,
--                       PortAudioCallback *callback,
--                       void *userData );
--
--
--/*
-- Pa_OpenDefaultStream() is a simplified version of Pa_OpenStream() that opens
-- the default input and/or output devices. Most parameters have identical meaning
-- to their Pa_OpenStream() counterparts, with the following exceptions:
-- 
-- If either numInputChannels or numOutputChannels is 0 the respective device
-- is not opened. This has the same effect as passing paNoDevice in the device
-- arguments to Pa_OpenStream().
-- 
-- sampleFormat applies to both the input and output buffers.
--
--*/
--
--PaError Pa_OpenDefaultStream( PortAudioStream** stream,
--                              int numInputChannels,
--                              int numOutputChannels,
--                              PaSampleFormat sampleFormat,
--                              double sampleRate,
--                              unsigned long framesPerBuffer,
--                              unsigned long numberOfBuffers,
--                              PortAudioCallback *callback,
--                              void *userData );
--
--/*
-- Pa_CloseStream() closes an audio stream, flushing any pending buffers.
--
--*/
--
--PaError Pa_CloseStream( PortAudioStream* );
--
--/*
-- Pa_StartStream() and Pa_StopStream() begin and terminate audio processing.
-- Pa_StopStream() waits until all pending audio buffers have been played.
-- Pa_AbortStream() stops playing immediately without waiting for pending
-- buffers to complete.
--    
--*/
--
--PaError Pa_StartStream( PortAudioStream *stream );
--
--PaError Pa_StopStream( PortAudioStream *stream );
--
--PaError Pa_AbortStream( PortAudioStream *stream );
--
--/*
-- Pa_StreamActive() returns one (1) when the stream is active (ie playing
-- or recording audio), zero (0) when not playing, or a negative error number
-- if the stream is invalid.
-- The stream is active between calls to Pa_StartStream() and Pa_StopStream(),
-- but may also become inactive if the callback returns a non-zero value.
-- In the latter case, the stream is considered inactive after the last
-- buffer has finished playing.
-- 
--*/
--
--PaError Pa_StreamActive( PortAudioStream *stream );
--
--/*
-- Pa_StreamTime() returns the current output time in samples for the stream.
-- This time may be used as a time reference (for example synchronizing audio to
-- MIDI).
-- 
--*/
--
--PaTimestamp Pa_StreamTime( PortAudioStream *stream );
--
--/*
-- Pa_GetCPULoad() returns the CPU Load for the stream.
-- The "CPU Load" is a fraction of total CPU time consumed by the stream's
-- audio processing routines including, but not limited to the client supplied
-- callback.
-- A value of 0.5 would imply that PortAudio and the sound generating
-- callback was consuming roughly 50% of the available CPU time.
-- This function may be called from the callback function or the application.
-- 
--*/
--
--double Pa_GetCPULoad( PortAudioStream* stream );
--
--/*
-- Pa_GetMinNumBuffers() returns the minimum number of buffers required by
-- the current host based on minimum latency.
-- On the PC, for the DirectSound implementation, latency can be optionally set
-- by user by setting an environment variable.
-- For example, to set latency to 200 msec, put:
-- 
--    set PA_MIN_LATENCY_MSEC=200
-- 
-- in the AUTOEXEC.BAT file and reboot.
-- If the environment variable is not set, then the latency will be determined
-- based on the OS. Windows NT has higher latency than Win95.
-- 
--*/
--
--int Pa_GetMinNumBuffers( int framesPerBuffer, double sampleRate );
--
--/*
-- Pa_Sleep() puts the caller to sleep for at least 'msec' milliseconds.
-- You may sleep longer than the requested time so don't rely on this for
-- accurate musical timing.
-- 
-- Pa_Sleep() is provided as a convenience for authors of portable code (such as
-- the tests and examples in the PortAudio distribution.)
-- 
--*/
--
--void Pa_Sleep( long msec );
--
--/*
-- Pa_GetSampleSize() returns the size in bytes of a single sample in the
-- supplied PaSampleFormat, or paSampleFormatNotSupported if the format is
-- no supported.
--  
--*/
--
--PaError Pa_GetSampleSize( PaSampleFormat format );
--
--
--#ifdef __cplusplus
--}
--#endif /* __cplusplus */
--#endif /* PORT_AUDIO_H */
---- a/src/portaudio18.h
-+++ /dev/null
-@@ -1,466 +0,0 @@
--// NOTE: Copy this file to  portaudio.h  in order to compile with V18 portaudio
--
--
--#ifndef PORT_AUDIO_H
--#define PORT_AUDIO_H
--
--#ifdef __cplusplus
--extern "C"
--{
--#endif /* __cplusplus */
--
--/*
-- * $Id: portaudio.h,v 1.5 2002/03/26 18:04:22 philburk Exp $
-- * PortAudio Portable Real-Time Audio Library
-- * PortAudio API Header File
-- * Latest version available at: http://www.audiomulch.com/portaudio/
-- *
-- * Copyright (c) 1999-2000 Ross Bencina and Phil Burk
-- *
-- * Permission is hereby granted, free of charge, to any person obtaining
-- * a copy of this software and associated documentation files
-- * (the "Software"), to deal in the Software without restriction,
-- * including without limitation the rights to use, copy, modify, merge,
-- * publish, distribute, sublicense, and/or sell copies of the Software,
-- * and to permit persons to whom the Software is furnished to do so,
-- * subject to the following conditions:
-- *
-- * The above copyright notice and this permission notice shall be
-- * included in all copies or substantial portions of the Software.
-- *
-- * Any person wishing to distribute modifications to the Software is
-- * requested to send the modifications to the original developer so that
-- * they can be incorporated into the canonical version.
-- *
-- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
-- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
-- * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-- *
-- */
--
--typedef int PaError;
--typedef enum {
--    paNoError = 0,
--
--    paHostError = -10000,
--    paInvalidChannelCount,
--    paInvalidSampleRate,
--    paInvalidDeviceId,
--    paInvalidFlag,
--    paSampleFormatNotSupported,
--    paBadIODeviceCombination,
--    paInsufficientMemory,
--    paBufferTooBig,
--    paBufferTooSmall,
--    paNullCallback,
--    paBadStreamPtr,
--    paTimedOut,
--    paInternalError,
--    paDeviceUnavailable
--} PaErrorNum;
--
--/*
-- Pa_Initialize() is the library initialisation function - call this before
-- using the library.
--
--*/
--
--PaError Pa_Initialize( void );
--
--/*
-- Pa_Terminate() is the library termination function - call this after
-- using the library.
--
--*/
--
--PaError Pa_Terminate( void );
--
--/*
-- Pa_GetHostError() returns a host specific error code.
-- This can be called after receiving a PortAudio error code of paHostError.
--
--*/
--
--long Pa_GetHostError( void );
--
--/*
-- Pa_GetErrorText() translates the supplied PortAudio error number
-- into a human readable message.
-- 
--*/
--
--const char *Pa_GetErrorText( PaError errnum );
--
--/*
-- Sample formats
-- 
-- These are formats used to pass sound data between the callback and the
-- stream. Each device has a "native" format which may be used when optimum
-- efficiency or control over conversion is required.
-- 
-- Formats marked "always available" are supported (emulated) by all 
-- PortAudio implementations.
-- 
-- The floating point representation (paFloat32) uses +1.0 and -1.0 as the 
-- maximum and minimum respectively.
--
-- paUInt8 is an unsigned 8 bit format where 128 is considered "ground"
--
--*/
--
--typedef unsigned long PaSampleFormat;
--#define paFloat32      ((PaSampleFormat) (1<<0)) /*always available*/
--#define paInt16        ((PaSampleFormat) (1<<1)) /*always available*/
--#define paInt32        ((PaSampleFormat) (1<<2)) /*always available*/
--#define paInt24        ((PaSampleFormat) (1<<3))
--#define paPackedInt24  ((PaSampleFormat) (1<<4))
--#define paInt8         ((PaSampleFormat) (1<<5))
--#define paUInt8        ((PaSampleFormat) (1<<6))
--#define paCustomFormat ((PaSampleFormat) (1<<16))
--
--/*
-- Device enumeration mechanism.
-- 
-- Device ids range from 0 to Pa_CountDevices()-1.
-- 
-- Devices may support input, output or both.
--
--*/
--
--typedef int PaDeviceID;
--#define paNoDevice -1
--
--int Pa_CountDevices( void );
--
--typedef struct
--{
--    int structVersion;
--    const char *name;
--    int maxInputChannels;
--    int maxOutputChannels;
--    /* Number of discrete rates, or -1 if range supported. */
--    int numSampleRates;
--    /* Array of supported sample rates, or {min,max} if range supported. */
--    const double *sampleRates;
--    PaSampleFormat nativeSampleFormats;
--}
--PaDeviceInfo;
--
--/*
-- Pa_GetDefaultInputDeviceID(), Pa_GetDefaultOutputDeviceID() return the
-- default device ids for input and output respectively, or paNoDevice if
-- no device is available.
-- The result can be passed to Pa_OpenStream().
-- 
-- On the PC, the user can specify a default device by
-- setting an environment variable. For example, to use device #1.
-- 
--  set PA_RECOMMENDED_OUTPUT_DEVICE=1
-- 
-- The user should first determine the available device ids by using
-- the supplied application "pa_devs".
--
--*/
--
--PaDeviceID Pa_GetDefaultInputDeviceID( void );
--PaDeviceID Pa_GetDefaultOutputDeviceID( void );
--
--
--
--/*
-- Pa_GetDeviceInfo() returns a pointer to an immutable PaDeviceInfo structure
-- for the device specified.
-- If the device parameter is out of range the function returns NULL.
--
-- PortAudio manages the memory referenced by the returned pointer, the client
-- must not manipulate or free the memory. The pointer is only guaranteed to be
-- valid between calls to Pa_Initialize() and Pa_Terminate().
--
--*/
--
--const PaDeviceInfo* Pa_GetDeviceInfo( PaDeviceID device );
--
--/*
-- PaTimestamp is used to represent a continuous sample clock with arbitrary
-- start time that can be used for syncronization. The type is used for the
-- outTime argument to the PortAudioCallback and as the result of Pa_StreamTime()
--
--*/
--
--typedef double PaTimestamp;
--
--/*
-- PortAudioCallback is implemented by PortAudio clients.
-- 
-- inputBuffer and outputBuffer are arrays of interleaved samples,
-- the format, packing and number of channels used by the buffers are
-- determined by parameters to Pa_OpenStream() (see below).
-- 
-- framesPerBuffer is the number of sample frames to be processed by the callback.
-- 
-- outTime is the time in samples when the buffer(s) processed by
-- this callback will begin being played at the audio output.
-- See also Pa_StreamTime()
-- 
-- userData is the value of a user supplied pointer passed to Pa_OpenStream()
-- intended for storing synthesis data etc.
-- 
-- return value:
-- The callback can return a non-zero value to stop the stream. This may be
-- useful in applications such as soundfile players where a specific duration
-- of output is required. However, it is not necessary to utilise this mechanism
-- as StopStream() will also terminate the stream. A callback returning a
-- non-zero value must fill the entire outputBuffer.
-- 
-- NOTE: None of the other stream functions may be called from within the
-- callback function except for Pa_GetCPULoad().
--
--*/
--
--typedef int (PortAudioCallback)(
--    void *inputBuffer, void *outputBuffer,
--    unsigned long framesPerBuffer,
--    PaTimestamp outTime, void *userData );
--
--
--/*
-- Stream flags
-- 
-- These flags may be supplied (ored together) in the streamFlags argument to
-- the Pa_OpenStream() function.
--
--*/
--
--#define   paNoFlag      (0)
--#define   paClipOff     (1<<0)   /* disable default clipping of out of range samples */
--#define   paDitherOff   (1<<1)   /* disable default dithering */
--#define   paPlatformSpecificFlags (0x00010000)
--typedef   unsigned long PaStreamFlags;
--
--/*
-- A single PortAudioStream provides multiple channels of real-time
-- input and output audio streaming to a client application.
-- Pointers to PortAudioStream objects are passed between PortAudio functions.
--*/
--
--typedef void PortAudioStream;
--#define PaStream PortAudioStream
--
--/*
-- Pa_OpenStream() opens a stream for either input, output or both.
-- 
-- stream is the address of a PortAudioStream pointer which will receive
-- a pointer to the newly opened stream.
-- 
-- inputDevice is the id of the device used for input (see PaDeviceID above.)
-- inputDevice may be paNoDevice to indicate that an input device is not required.
-- 
-- numInputChannels is the number of channels of sound to be delivered to the
-- callback. It can range from 1 to the value of maxInputChannels in the
-- PaDeviceInfo record for the device specified by the inputDevice parameter.
-- If inputDevice is paNoDevice numInputChannels is ignored.
-- 
-- inputSampleFormat is the sample format of inputBuffer provided to the callback
-- function. inputSampleFormat may be any of the formats described by the
-- PaSampleFormat enumeration (see above). PortAudio guarantees support for
-- the device's native formats (nativeSampleFormats in the device info record)
-- and additionally 16 and 32 bit integer and 32 bit floating point formats.
-- Support for other formats is implementation defined.
-- 
-- inputDriverInfo is a pointer to an optional driver specific data structure
-- containing additional information for device setup or stream processing.
-- inputDriverInfo is never required for correct operation. If not used
-- inputDriverInfo should be NULL.
-- 
-- outputDevice is the id of the device used for output (see PaDeviceID above.)
-- outputDevice may be paNoDevice to indicate that an output device is not required.
-- 
-- numOutputChannels is the number of channels of sound to be supplied by the
-- callback. See the definition of numInputChannels above for more details.
-- 
-- outputSampleFormat is the sample format of the outputBuffer filled by the
-- callback function. See the definition of inputSampleFormat above for more
-- details.
-- 
-- outputDriverInfo is a pointer to an optional driver specific data structure
-- containing additional information for device setup or stream processing.
-- outputDriverInfo is never required for correct operation. If not used
-- outputDriverInfo should be NULL.
-- 
-- sampleRate is the desired sampleRate. For full-duplex streams it is the
-- sample rate for both input and output
-- 
-- framesPerBuffer is the length in sample frames of all internal sample buffers
-- used for communication with platform specific audio routines. Wherever
-- possible this corresponds to the framesPerBuffer parameter passed to the
-- callback function.
-- 
-- numberOfBuffers is the number of buffers used for multibuffered communication
-- with the platform specific audio routines. If you pass zero, then an optimum
-- value will be chosen for you internally. This parameter is provided only
-- as a guide - and does not imply that an implementation must use multibuffered
-- i/o when reliable double buffering is available (such as SndPlayDoubleBuffer()
-- on the Macintosh.)
-- 
-- streamFlags may contain a combination of flags ORed together.
-- These flags modify the behaviour of the streaming process. Some flags may only
-- be relevant to certain buffer formats.
-- 
-- callback is a pointer to a client supplied function that is responsible
-- for processing and filling input and output buffers (see above for details.)
-- 
-- userData is a client supplied pointer which is passed to the callback
-- function. It could for example, contain a pointer to instance data necessary
-- for processing the audio buffers.
-- 
-- return value:
-- Upon success Pa_OpenStream() returns PaNoError and places a pointer to a
-- valid PortAudioStream in the stream argument. The stream is inactive (stopped).
-- If a call to Pa_OpenStream() fails a non-zero error code is returned (see
-- PaError above) and the value of stream is invalid.
-- 
--*/
--
--PaError Pa_OpenStream( PortAudioStream** stream,
--                       PaDeviceID inputDevice,
--                       int numInputChannels,
--                       PaSampleFormat inputSampleFormat,
--                       void *inputDriverInfo,
--                       PaDeviceID outputDevice,
--                       int numOutputChannels,
--                       PaSampleFormat outputSampleFormat,
--                       void *outputDriverInfo,
--                       double sampleRate,
--                       unsigned long framesPerBuffer,
--                       unsigned long numberOfBuffers,
--                       PaStreamFlags streamFlags,
--                       PortAudioCallback *callback,
--                       void *userData );
--
--
--/*
-- Pa_OpenDefaultStream() is a simplified version of Pa_OpenStream() that opens
-- the default input and/or output devices. Most parameters have identical meaning
-- to their Pa_OpenStream() counterparts, with the following exceptions:
-- 
-- If either numInputChannels or numOutputChannels is 0 the respective device
-- is not opened. This has the same effect as passing paNoDevice in the device
-- arguments to Pa_OpenStream().
-- 
-- sampleFormat applies to both the input and output buffers.
--
--*/
--
--PaError Pa_OpenDefaultStream( PortAudioStream** stream,
--                              int numInputChannels,
--                              int numOutputChannels,
--                              PaSampleFormat sampleFormat,
--                              double sampleRate,
--                              unsigned long framesPerBuffer,
--                              unsigned long numberOfBuffers,
--                              PortAudioCallback *callback,
--                              void *userData );
--
--/*
-- Pa_CloseStream() closes an audio stream, flushing any pending buffers.
--
--*/
--
--PaError Pa_CloseStream( PortAudioStream* );
--
--/*
-- Pa_StartStream() and Pa_StopStream() begin and terminate audio processing.
-- Pa_StopStream() waits until all pending audio buffers have been played.
-- Pa_AbortStream() stops playing immediately without waiting for pending
-- buffers to complete.
--    
--*/
--
--PaError Pa_StartStream( PortAudioStream *stream );
--
--PaError Pa_StopStream( PortAudioStream *stream );
--
--PaError Pa_AbortStream( PortAudioStream *stream );
--
--/*
-- Pa_StreamActive() returns one (1) when the stream is active (ie playing
-- or recording audio), zero (0) when not playing, or a negative error number
-- if the stream is invalid.
-- The stream is active between calls to Pa_StartStream() and Pa_StopStream(),
-- but may also become inactive if the callback returns a non-zero value.
-- In the latter case, the stream is considered inactive after the last
-- buffer has finished playing.
-- 
--*/
--
--PaError Pa_StreamActive( PortAudioStream *stream );
--
--/*
-- Pa_StreamTime() returns the current output time in samples for the stream.
-- This time may be used as a time reference (for example synchronizing audio to
-- MIDI).
-- 
--*/
--
--PaTimestamp Pa_StreamTime( PortAudioStream *stream );
--
--/*
-- Pa_GetCPULoad() returns the CPU Load for the stream.
-- The "CPU Load" is a fraction of total CPU time consumed by the stream's
-- audio processing routines including, but not limited to the client supplied
-- callback.
-- A value of 0.5 would imply that PortAudio and the sound generating
-- callback was consuming roughly 50% of the available CPU time.
-- This function may be called from the callback function or the application.
-- 
--*/
--
--double Pa_GetCPULoad( PortAudioStream* stream );
--
--/*
-- Pa_GetMinNumBuffers() returns the minimum number of buffers required by
-- the current host based on minimum latency.
-- On the PC, for the DirectSound implementation, latency can be optionally set
-- by user by setting an environment variable.
-- For example, to set latency to 200 msec, put:
-- 
--    set PA_MIN_LATENCY_MSEC=200
-- 
-- in the AUTOEXEC.BAT file and reboot.
-- If the environment variable is not set, then the latency will be determined
-- based on the OS. Windows NT has higher latency than Win95.
-- 
--*/
--
--int Pa_GetMinNumBuffers( int framesPerBuffer, double sampleRate );
--
--/*
-- Pa_Sleep() puts the caller to sleep for at least 'msec' milliseconds.
-- You may sleep longer than the requested time so don't rely on this for
-- accurate musical timing.
-- 
-- Pa_Sleep() is provided as a convenience for authors of portable code (such as
-- the tests and examples in the PortAudio distribution.)
-- 
--*/
--
--void Pa_Sleep( long msec );
--
--/*
-- Pa_GetSampleSize() returns the size in bytes of a single sample in the
-- supplied PaSampleFormat, or paSampleFormatNotSupported if the format is
-- no supported.
--  
--*/
--
--PaError Pa_GetSampleSize( PaSampleFormat format );
--
--
--#ifdef __cplusplus
--}
--#endif /* __cplusplus */
--#endif /* PORT_AUDIO_H */
---- a/src/portaudio19.h
-+++ /dev/null
-@@ -1,1127 +0,0 @@
--// NOTE: Copy this file to  portaudio.h  in order to compile with V19 portaudio
--
--#ifndef PORTAUDIO_H
--#define PORTAUDIO_H
--/*
-- * $Id: portaudio.h 1061 2006-06-19 22:46:41Z lschwardt $
-- * PortAudio Portable Real-Time Audio Library
-- * PortAudio API Header File
-- * Latest version available at: http://www.portaudio.com/
-- *
-- * Copyright (c) 1999-2002 Ross Bencina and Phil Burk
-- *
-- * Permission is hereby granted, free of charge, to any person obtaining
-- * a copy of this software and associated documentation files
-- * (the "Software"), to deal in the Software without restriction,
-- * including without limitation the rights to use, copy, modify, merge,
-- * publish, distribute, sublicense, and/or sell copies of the Software,
-- * and to permit persons to whom the Software is furnished to do so,
-- * subject to the following conditions:
-- *
-- * The above copyright notice and this permission notice shall be
-- * included in all copies or substantial portions of the Software.
-- *
-- * Any person wishing to distribute modifications to the Software is
-- * requested to send the modifications to the original developer so that
-- * they can be incorporated into the canonical version.
-- *
-- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
-- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
-- * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-- */
--
--/** @file
-- @brief The PortAudio API.
--*/
--
--
--#ifdef __cplusplus
--extern "C"
--{
--#endif /* __cplusplus */
--
-- 
--/** Retrieve the release number of the currently running PortAudio build,
-- eg 1900.
--*/
--int Pa_GetVersion( void );
--
--
--/** Retrieve a textual description of the current PortAudio build,
-- eg "PortAudio V19-devel 13 October 2002".
--*/
--const char* Pa_GetVersionText( void );
--
--
--/** Error codes returned by PortAudio functions.
-- Note that with the exception of paNoError, all PaErrorCodes are negative.
--*/
--
--typedef int PaError;
--typedef enum PaErrorCode
--{
--    paNoError = 0,
--
--    paNotInitialized = -10000,
--    paUnanticipatedHostError,
--    paInvalidChannelCount,
--    paInvalidSampleRate,
--    paInvalidDevice,
--    paInvalidFlag,
--    paSampleFormatNotSupported,
--    paBadIODeviceCombination,
--    paInsufficientMemory,
--    paBufferTooBig,
--    paBufferTooSmall,
--    paNullCallback,
--    paBadStreamPtr,
--    paTimedOut,
--    paInternalError,
--    paDeviceUnavailable,
--    paIncompatibleHostApiSpecificStreamInfo,
--    paStreamIsStopped,
--    paStreamIsNotStopped,
--    paInputOverflowed,
--    paOutputUnderflowed,
--    paHostApiNotFound,
--    paInvalidHostApi,
--    paCanNotReadFromACallbackStream,      /**< @todo review error code name */
--    paCanNotWriteToACallbackStream,       /**< @todo review error code name */
--    paCanNotReadFromAnOutputOnlyStream,   /**< @todo review error code name */
--    paCanNotWriteToAnInputOnlyStream,     /**< @todo review error code name */
--    paIncompatibleStreamHostApi,
--    paBadBufferPtr
--} PaErrorCode;
--
--
--/** Translate the supplied PortAudio error code into a human readable
-- message.
--*/
--const char *Pa_GetErrorText( PaError errorCode );
--
--
--/** Library initialization function - call this before using PortAudio.
-- This function initialises internal data structures and prepares underlying
-- host APIs for use. This function MUST be called before using any other
-- PortAudio API functions.
--
-- If Pa_Initialize() is called multiple times, each successful 
-- call must be matched with a corresponding call to Pa_Terminate(). 
-- Pairs of calls to Pa_Initialize()/Pa_Terminate() may overlap, and are not 
-- required to be fully nested.
--
-- Note that if Pa_Initialize() returns an error code, Pa_Terminate() should
-- NOT be called.
--
-- @return paNoError if successful, otherwise an error code indicating the cause
-- of failure.
--
-- @see Pa_Terminate
--*/
--PaError Pa_Initialize( void );
--
--
--/** Library termination function - call this when finished using PortAudio.
-- This function deallocates all resources allocated by PortAudio since it was
-- initializied by a call to Pa_Initialize(). In cases where Pa_Initialise() has
-- been called multiple times, each call must be matched with a corresponding call
-- to Pa_Terminate(). The final matching call to Pa_Terminate() will automatically
-- close any PortAudio streams that are still open.
--
-- Pa_Terminate() MUST be called before exiting a program which uses PortAudio.
-- Failure to do so may result in serious resource leaks, such as audio devices
-- not being available until the next reboot.
--
-- @return paNoError if successful, otherwise an error code indicating the cause
-- of failure.
-- 
-- @see Pa_Initialize
--*/
--PaError Pa_Terminate( void );
--
--
--
--/** The type used to refer to audio devices. Values of this type usually
-- range from 0 to (Pa_DeviceCount-1), and may also take on the PaNoDevice
-- and paUseHostApiSpecificDeviceSpecification values.
--
-- @see Pa_DeviceCount, paNoDevice, paUseHostApiSpecificDeviceSpecification
--*/
--typedef int PaDeviceIndex;
--
--
--/** A special PaDeviceIndex value indicating that no device is available,
-- or should be used.
--
-- @see PaDeviceIndex
--*/
--#define paNoDevice ((PaDeviceIndex)-1)
--
--
--/** A special PaDeviceIndex value indicating that the device(s) to be used
-- are specified in the host api specific stream info structure.
--
-- @see PaDeviceIndex
--*/
--#define paUseHostApiSpecificDeviceSpecification ((PaDeviceIndex)-2)
--
--
--/* Host API enumeration mechanism */
--
--/** The type used to enumerate to host APIs at runtime. Values of this type
-- range from 0 to (Pa_GetHostApiCount()-1).
--
-- @see Pa_GetHostApiCount
--*/
--typedef int PaHostApiIndex;
--
--
--/** Retrieve the number of available host APIs. Even if a host API is
-- available it may have no devices available.
--
-- @return A non-negative value indicating the number of available host APIs
-- or, a PaErrorCode (which are always negative) if PortAudio is not initialized
-- or an error is encountered.
--
-- @see PaHostApiIndex
--*/
--PaHostApiIndex Pa_GetHostApiCount( void );
--
--
--/** Retrieve the index of the default host API. The default host API will be
-- the lowest common denominator host API on the current platform and is
-- unlikely to provide the best performance.
--
-- @return A non-negative value ranging from 0 to (Pa_GetHostApiCount()-1)
-- indicating the default host API index or, a PaErrorCode (which are always
-- negative) if PortAudio is not initialized or an error is encountered.
--*/
--PaHostApiIndex Pa_GetDefaultHostApi( void );
--
--
--/** Unchanging unique identifiers for each supported host API. This type
-- is used in the PaHostApiInfo structure. The values are guaranteed to be
-- unique and to never change, thus allowing code to be written that
-- conditionally uses host API specific extensions.
--
-- New type ids will be allocated when support for a host API reaches
-- "public alpha" status, prior to that developers should use the
-- paInDevelopment type id.
--
-- @see PaHostApiInfo
--*/
--typedef enum PaHostApiTypeId
--{
--    paInDevelopment=0, /* use while developing support for a new host API */
--    paDirectSound=1,
--    paMME=2,
--    paASIO=3,
--    paSoundManager=4,
--    paCoreAudio=5,
--    paOSS=7,
--    paALSA=8,
--    paAL=9,
--    paBeOS=10,
--    paWDMKS=11,
--    paJACK=12,
--    paWASAPI=13,
--    paAudioScienceHPI=14
--} PaHostApiTypeId;
--
--
--/** A structure containing information about a particular host API. */
--
--typedef struct PaHostApiInfo
--{
--    /** this is struct version 1 */
--    int structVersion;
--    /** The well known unique identifier of this host API @see PaHostApiTypeId */
--    PaHostApiTypeId type;
--    /** A textual description of the host API for display on user interfaces. */
--    const char *name;
--
--    /**  The number of devices belonging to this host API. This field may be
--     used in conjunction with Pa_HostApiDeviceIndexToDeviceIndex() to enumerate
--     all devices for this host API.
--     @see Pa_HostApiDeviceIndexToDeviceIndex
--    */
--    int deviceCount;
--
--    /** The default input device for this host API. The value will be a
--     device index ranging from 0 to (Pa_GetDeviceCount()-1), or paNoDevice
--     if no default input device is available.
--    */
--    PaDeviceIndex defaultInputDevice;
--
--    /** The default output device for this host API. The value will be a
--     device index ranging from 0 to (Pa_GetDeviceCount()-1), or paNoDevice
--     if no default output device is available.
--    */
--    PaDeviceIndex defaultOutputDevice;
--    
--} PaHostApiInfo;
--
--
--/** Retrieve a pointer to a structure containing information about a specific
-- host Api.
--
-- @param hostApi A valid host API index ranging from 0 to (Pa_GetHostApiCount()-1)
--
-- @return A pointer to an immutable PaHostApiInfo structure describing
-- a specific host API. If the hostApi parameter is out of range or an error
-- is encountered, the function returns NULL.
--
-- The returned structure is owned by the PortAudio implementation and must not
-- be manipulated or freed. The pointer is only guaranteed to be valid between
-- calls to Pa_Initialize() and Pa_Terminate().
--*/
--const PaHostApiInfo * Pa_GetHostApiInfo( PaHostApiIndex hostApi );
--
--
--/** Convert a static host API unique identifier, into a runtime
-- host API index.
--
-- @param type A unique host API identifier belonging to the PaHostApiTypeId
-- enumeration.
--
-- @return A valid PaHostApiIndex ranging from 0 to (Pa_GetHostApiCount()-1) or,
-- a PaErrorCode (which are always negative) if PortAudio is not initialized
-- or an error is encountered.
-- 
-- The paHostApiNotFound error code indicates that the host API specified by the
-- type parameter is not available.
--
-- @see PaHostApiTypeId
--*/
--PaHostApiIndex Pa_HostApiTypeIdToHostApiIndex( PaHostApiTypeId type );
--
--
--/** Convert a host-API-specific device index to standard PortAudio device index.
-- This function may be used in conjunction with the deviceCount field of
-- PaHostApiInfo to enumerate all devices for the specified host API.
--
-- @param hostApi A valid host API index ranging from 0 to (Pa_GetHostApiCount()-1)
--
-- @param hostApiDeviceIndex A valid per-host device index in the range
-- 0 to (Pa_GetHostApiInfo(hostApi)->deviceCount-1)
--
-- @return A non-negative PaDeviceIndex ranging from 0 to (Pa_GetDeviceCount()-1)
-- or, a PaErrorCode (which are always negative) if PortAudio is not initialized
-- or an error is encountered.
--
-- A paInvalidHostApi error code indicates that the host API index specified by
-- the hostApi parameter is out of range.
--
-- A paInvalidDevice error code indicates that the hostApiDeviceIndex parameter
-- is out of range.
-- 
-- @see PaHostApiInfo
--*/
--PaDeviceIndex Pa_HostApiDeviceIndexToDeviceIndex( PaHostApiIndex hostApi,
--        int hostApiDeviceIndex );
--
--
--
--/** Structure used to return information about a host error condition.
--*/
--typedef struct PaHostErrorInfo{
--    PaHostApiTypeId hostApiType;    /**< the host API which returned the error code */
--    long errorCode;                 /**< the error code returned */
--    const char *errorText;          /**< a textual description of the error if available, otherwise a zero-length string */
--}PaHostErrorInfo;
--
--
--/** Return information about the last host error encountered. The error
-- information returned by Pa_GetLastHostErrorInfo() will never be modified
-- asyncronously by errors occurring in other PortAudio owned threads
-- (such as the thread that manages the stream callback.)
--
-- This function is provided as a last resort, primarily to enhance debugging
-- by providing clients with access to all available error information.
--
-- @return A pointer to an immutable structure constaining information about
-- the host error. The values in this structure will only be valid if a
-- PortAudio function has previously returned the paUnanticipatedHostError
-- error code.
--*/
--const PaHostErrorInfo* Pa_GetLastHostErrorInfo( void );
--
--
--
--/* Device enumeration and capabilities */
--
--/** Retrieve the number of available devices. The number of available devices
-- may be zero.
--
-- @return A non-negative value indicating the number of available devices or,
-- a PaErrorCode (which are always negative) if PortAudio is not initialized
-- or an error is encountered.
--*/
--PaDeviceIndex Pa_GetDeviceCount( void );
--
--
--/** Retrieve the index of the default input device. The result can be
-- used in the inputDevice parameter to Pa_OpenStream().
--
-- @return The default input device index for the default host API, or paNoDevice
-- if no default input device is available or an error was encountered.
--*/
--PaDeviceIndex Pa_GetDefaultInputDevice( void );
--
--
--/** Retrieve the index of the default output device. The result can be
-- used in the outputDevice parameter to Pa_OpenStream().
--
-- @return The default output device index for the defualt host API, or paNoDevice
-- if no default output device is available or an error was encountered.
--
-- @note
-- On the PC, the user can specify a default device by
-- setting an environment variable. For example, to use device #1.
--<pre>
-- set PA_RECOMMENDED_OUTPUT_DEVICE=1
--</pre>
-- The user should first determine the available device ids by using
-- the supplied application "pa_devs".
--*/
--PaDeviceIndex Pa_GetDefaultOutputDevice( void );
--
--
--/** The type used to represent monotonic time in seconds that can be used
-- for syncronisation. The type is used for the outTime argument to the
-- PaStreamCallback and as the result of Pa_GetStreamTime().
--     
-- @see PaStreamCallback, Pa_GetStreamTime
--*/
--typedef double PaTime;
--
--
--/** A type used to specify one or more sample formats. Each value indicates
-- a possible format for sound data passed to and from the stream callback,
-- Pa_ReadStream and Pa_WriteStream.
--
-- The standard formats paFloat32, paInt16, paInt32, paInt24, paInt8
-- and aUInt8 are usually implemented by all implementations.
--
-- The floating point representation (paFloat32) uses +1.0 and -1.0 as the
-- maximum and minimum respectively.
--
-- paUInt8 is an unsigned 8 bit format where 128 is considered "ground"
--
-- The paNonInterleaved flag indicates that a multichannel buffer is passed
-- as a set of non-interleaved pointers.
--
-- @see Pa_OpenStream, Pa_OpenDefaultStream, PaDeviceInfo
-- @see paFloat32, paInt16, paInt32, paInt24, paInt8
-- @see paUInt8, paCustomFormat, paNonInterleaved
--*/
--typedef unsigned long PaSampleFormat;
--
--
--#define paFloat32        ((PaSampleFormat) 0x00000001) /**< @see PaSampleFormat */
--#define paInt32          ((PaSampleFormat) 0x00000002) /**< @see PaSampleFormat */
--#define paInt24          ((PaSampleFormat) 0x00000004) /**< Packed 24 bit format. @see PaSampleFormat */
--#define paInt16          ((PaSampleFormat) 0x00000008) /**< @see PaSampleFormat */
--#define paInt8           ((PaSampleFormat) 0x00000010) /**< @see PaSampleFormat */
--#define paUInt8          ((PaSampleFormat) 0x00000020) /**< @see PaSampleFormat */
--#define paCustomFormat   ((PaSampleFormat) 0x00010000)/**< @see PaSampleFormat */
--
--#define paNonInterleaved ((PaSampleFormat) 0x80000000)
--
--/** A structure providing information and capabilities of PortAudio devices.
-- Devices may support input, output or both input and output.
--*/
--typedef struct PaDeviceInfo
--{
--    int structVersion;  /* this is struct version 2 */
--    const char *name;
--    PaHostApiIndex hostApi; /* note this is a host API index, not a type id*/
--    
--    int maxInputChannels;
--    int maxOutputChannels;
--
--    /* Default latency values for interactive performance. */
--    PaTime defaultLowInputLatency;
--    PaTime defaultLowOutputLatency;
--    /* Default latency values for robust non-interactive applications (eg. playing sound files). */
--    PaTime defaultHighInputLatency;
--    PaTime defaultHighOutputLatency;
--
--    double defaultSampleRate;
--} PaDeviceInfo;
--
--
--/** Retrieve a pointer to a PaDeviceInfo structure containing information
-- about the specified device.
-- @return A pointer to an immutable PaDeviceInfo structure. If the device
-- parameter is out of range the function returns NULL.
--
-- @param device A valid device index in the range 0 to (Pa_GetDeviceCount()-1)
--
-- @note PortAudio manages the memory referenced by the returned pointer,
-- the client must not manipulate or free the memory. The pointer is only
-- guaranteed to be valid between calls to Pa_Initialize() and Pa_Terminate().
--
-- @see PaDeviceInfo, PaDeviceIndex
--*/
--const PaDeviceInfo* Pa_GetDeviceInfo( PaDeviceIndex device );
--
--
--/** Parameters for one direction (input or output) of a stream.
--*/
--typedef struct PaStreamParameters
--{
--    /** A valid device index in the range 0 to (Pa_GetDeviceCount()-1)
--     specifying the device to be used or the special constant
--     paUseHostApiSpecificDeviceSpecification which indicates that the actual
--     device(s) to use are specified in hostApiSpecificStreamInfo.
--     This field must not be set to paNoDevice.
--    */
--    PaDeviceIndex device;
--    
--    /** The number of channels of sound to be delivered to the
--     stream callback or accessed by Pa_ReadStream() or Pa_WriteStream().
--     It can range from 1 to the value of maxInputChannels in the
--     PaDeviceInfo record for the device specified by the device parameter.
--    */
--    int channelCount;
--
--    /** The sample format of the buffer provided to the stream callback,
--     a_ReadStream() or Pa_WriteStream(). It may be any of the formats described
--     by the PaSampleFormat enumeration.
--    */
--    PaSampleFormat sampleFormat;
--
--    /** The desired latency in seconds. Where practical, implementations should
--     configure their latency based on these parameters, otherwise they may
--     choose the closest viable latency instead. Unless the suggested latency
--     is greater than the absolute upper limit for the device implementations
--     should round the suggestedLatency up to the next practial value - ie to
--     provide an equal or higher latency than suggestedLatency wherever possibe.
--     Actual latency values for an open stream may be retrieved using the
--     inputLatency and outputLatency fields of the PaStreamInfo structure
--     returned by Pa_GetStreamInfo().
--     @see default*Latency in PaDeviceInfo, *Latency in PaStreamInfo
--    */
--    PaTime suggestedLatency;
--
--    /** An optional pointer to a host api specific data structure
--     containing additional information for device setup and/or stream processing.
--     hostApiSpecificStreamInfo is never required for correct operation,
--     if not used it should be set to NULL.
--    */
--    void *hostApiSpecificStreamInfo;
--
--} PaStreamParameters;
--
--
--/** Return code for Pa_IsFormatSupported indicating success. */
--#define paFormatIsSupported (0)
--
--/** Determine whether it would be possible to open a stream with the specified
-- parameters.
--
-- @param inputParameters A structure that describes the input parameters used to
-- open a stream. The suggestedLatency field is ignored. See PaStreamParameters
-- for a description of these parameters. inputParameters must be NULL for
-- output-only streams.
--
-- @param outputParameters A structure that describes the output parameters used
-- to open a stream. The suggestedLatency field is ignored. See PaStreamParameters
-- for a description of these parameters. outputParameters must be NULL for
-- input-only streams.
--
-- @param sampleRate The required sampleRate. For full-duplex streams it is the
-- sample rate for both input and output
--
-- @return Returns 0 if the format is supported, and an error code indicating why
-- the format is not supported otherwise. The constant paFormatIsSupported is
-- provided to compare with the return value for success.
--
-- @see paFormatIsSupported, PaStreamParameters
--*/
--PaError Pa_IsFormatSupported( const PaStreamParameters *inputParameters,
--                              const PaStreamParameters *outputParameters,
--                              double sampleRate );
--
--
--
--/* Streaming types and functions */
--
--
--/**
-- A single PaStream can provide multiple channels of real-time
-- streaming audio input and output to a client application. A stream
-- provides access to audio hardware represented by one or more
-- PaDevices. Depending on the underlying Host API, it may be possible 
-- to open multiple streams using the same device, however this behavior 
-- is implementation defined. Portable applications should assume that 
-- a PaDevice may be simultaneously used by at most one PaStream.
--
-- Pointers to PaStream objects are passed between PortAudio functions that
-- operate on streams.
--
-- @see Pa_OpenStream, Pa_OpenDefaultStream, Pa_OpenDefaultStream, Pa_CloseStream,
-- Pa_StartStream, Pa_StopStream, Pa_AbortStream, Pa_IsStreamActive,
-- Pa_GetStreamTime, Pa_GetStreamCpuLoad
--
--*/
--typedef void PaStream;
--
--
--/** Can be passed as the framesPerBuffer parameter to Pa_OpenStream()
-- or Pa_OpenDefaultStream() to indicate that the stream callback will
-- accept buffers of any size.
--*/
--#define paFramesPerBufferUnspecified  (0)
--
--
--/** Flags used to control the behavior of a stream. They are passed as
-- parameters to Pa_OpenStream or Pa_OpenDefaultStream. Multiple flags may be
-- ORed together.
--
-- @see Pa_OpenStream, Pa_OpenDefaultStream
-- @see paNoFlag, paClipOff, paDitherOff, paNeverDropInput,
--  paPrimeOutputBuffersUsingStreamCallback, paPlatformSpecificFlags
--*/
--typedef unsigned long PaStreamFlags;
--
--/** @see PaStreamFlags */
--#define   paNoFlag          ((PaStreamFlags) 0)
--
--/** Disable default clipping of out of range samples.
-- @see PaStreamFlags
--*/
--#define   paClipOff         ((PaStreamFlags) 0x00000001)
--
--/** Disable default dithering.
-- @see PaStreamFlags
--*/
--#define   paDitherOff       ((PaStreamFlags) 0x00000002)
--
--/** Flag requests that where possible a full duplex stream will not discard
-- overflowed input samples without calling the stream callback. This flag is
-- only valid for full duplex callback streams and only when used in combination
-- with the paFramesPerBufferUnspecified (0) framesPerBuffer parameter. Using
-- this flag incorrectly results in a paInvalidFlag error being returned from
-- Pa_OpenStream and Pa_OpenDefaultStream.
--
-- @see PaStreamFlags, paFramesPerBufferUnspecified
--*/
--#define   paNeverDropInput  ((PaStreamFlags) 0x00000004)
--
--/** Call the stream callback to fill initial output buffers, rather than the
-- default behavior of priming the buffers with zeros (silence). This flag has
-- no effect for input-only and blocking read/write streams.
-- 
-- @see PaStreamFlags
--*/
--#define   paPrimeOutputBuffersUsingStreamCallback ((PaStreamFlags) 0x00000008)
--
--/** A mask specifying the platform specific bits.
-- @see PaStreamFlags
--*/
--#define   paPlatformSpecificFlags ((PaStreamFlags)0xFFFF0000)
--
--/**
-- Timing information for the buffers passed to the stream callback.
--*/
--typedef struct PaStreamCallbackTimeInfo{
--    PaTime inputBufferAdcTime;
--    PaTime currentTime;
--    PaTime outputBufferDacTime;
--} PaStreamCallbackTimeInfo;
--
--
--/**
-- Flag bit constants for the statusFlags to PaStreamCallback.
--
-- @see paInputUnderflow, paInputOverflow, paOutputUnderflow, paOutputOverflow,
-- paPrimingOutput
--*/
--typedef unsigned long PaStreamCallbackFlags;
--
--/** In a stream opened with paFramesPerBufferUnspecified, indicates that
-- input data is all silence (zeros) because no real data is available. In a
-- stream opened without paFramesPerBufferUnspecified, it indicates that one or
-- more zero samples have been inserted into the input buffer to compensate
-- for an input underflow.
-- @see PaStreamCallbackFlags
--*/
--#define paInputUnderflow   ((PaStreamCallbackFlags) 0x00000001)
--
--/** In a stream opened with paFramesPerBufferUnspecified, indicates that data
-- prior to the first sample of the input buffer was discarded due to an
-- overflow, possibly because the stream callback is using too much CPU time.
-- Otherwise indicates that data prior to one or more samples in the
-- input buffer was discarded.
-- @see PaStreamCallbackFlags
--*/
--#define paInputOverflow    ((PaStreamCallbackFlags) 0x00000002)
--
--/** Indicates that output data (or a gap) was inserted, possibly because the
-- stream callback is using too much CPU time.
-- @see PaStreamCallbackFlags
--*/
--#define paOutputUnderflow  ((PaStreamCallbackFlags) 0x00000004)
--
--/** Indicates that output data will be discarded because no room is available.
-- @see PaStreamCallbackFlags
--*/
--#define paOutputOverflow   ((PaStreamCallbackFlags) 0x00000008)
--
--/** Some of all of the output data will be used to prime the stream, input
-- data may be zero.
-- @see PaStreamCallbackFlags
--*/
--#define paPrimingOutput    ((PaStreamCallbackFlags) 0x00000010)
--
--/**
-- Allowable return values for the PaStreamCallback.
-- @see PaStreamCallback
--*/
--typedef enum PaStreamCallbackResult
--{
--    paContinue=0,
--    paComplete=1,
--    paAbort=2
--} PaStreamCallbackResult;
--
--
--/**
-- Functions of type PaStreamCallback are implemented by PortAudio clients.
-- They consume, process or generate audio in response to requests from an
-- active PortAudio stream.
--     
-- @param input and @param output are arrays of interleaved samples,
-- the format, packing and number of channels used by the buffers are
-- determined by parameters to Pa_OpenStream().
--     
-- @param frameCount The number of sample frames to be processed by
-- the stream callback.
--
-- @param timeInfo The time in seconds when the first sample of the input
-- buffer was received at the audio input, the time in seconds when the first
-- sample of the output buffer will begin being played at the audio output, and
-- the time in seconds when the stream callback was called.
-- See also Pa_GetStreamTime()
--
-- @param statusFlags Flags indicating whether input and/or output buffers
-- have been inserted or will be dropped to overcome underflow or overflow
-- conditions.
--
-- @param userData The value of a user supplied pointer passed to
-- Pa_OpenStream() intended for storing synthesis data etc.
--
-- @return
-- The stream callback should return one of the values in the
-- PaStreamCallbackResult enumeration. To ensure that the callback continues
-- to be called, it should return paContinue (0). Either paComplete or paAbort
-- can be returned to finish stream processing, after either of these values is
-- returned the callback will not be called again. If paAbort is returned the
-- stream will finish as soon as possible. If paComplete is returned, the stream
-- will continue until all buffers generated by the callback have been played.
-- This may be useful in applications such as soundfile players where a specific
-- duration of output is required. However, it is not necessary to utilise this
-- mechanism as Pa_StopStream(), Pa_AbortStream() or Pa_CloseStream() can also
-- be used to stop the stream. The callback must always fill the entire output
-- buffer irrespective of its return value.
--
-- @see Pa_OpenStream, Pa_OpenDefaultStream
--
-- @note With the exception of Pa_GetStreamCpuLoad() it is not permissable to call
-- PortAudio API functions from within the stream callback.
--*/
--typedef int PaStreamCallback(
--    const void *input, void *output,
--    unsigned long frameCount,
--    const PaStreamCallbackTimeInfo* timeInfo,
--    PaStreamCallbackFlags statusFlags,
--    void *userData );
--
--
--/** Opens a stream for either input, output or both.
--     
-- @param stream The address of a PaStream pointer which will receive
-- a pointer to the newly opened stream.
--     
-- @param inputParameters A structure that describes the input parameters used by
-- the opened stream. See PaStreamParameters for a description of these parameters.
-- inputParameters must be NULL for output-only streams.
--
-- @param outputParameters A structure that describes the output parameters used by
-- the opened stream. See PaStreamParameters for a description of these parameters.
-- outputParameters must be NULL for input-only streams.
-- 
-- @param sampleRate The desired sampleRate. For full-duplex streams it is the
-- sample rate for both input and output
--     
-- @param framesPerBuffer The number of frames passed to the stream callback
-- function, or the preferred block granularity for a blocking read/write stream.
-- The special value paFramesPerBufferUnspecified (0) may be used to request that
-- the stream callback will recieve an optimal (and possibly varying) number of
-- frames based on host requirements and the requested latency settings.
-- Note: With some host APIs, the use of non-zero framesPerBuffer for a callback
-- stream may introduce an additional layer of buffering which could introduce
-- additional latency. PortAudio guarantees that the additional latency
-- will be kept to the theoretical minimum however, it is strongly recommended
-- that a non-zero framesPerBuffer value only be used when your algorithm
-- requires a fixed number of frames per stream callback.
-- 
-- @param streamFlags Flags which modify the behaviour of the streaming process.
-- This parameter may contain a combination of flags ORed together. Some flags may
-- only be relevant to certain buffer formats.
--     
-- @param streamCallback A pointer to a client supplied function that is responsible
-- for processing and filling input and output buffers. If this parameter is NULL
-- the stream will be opened in 'blocking read/write' mode. In blocking mode,
-- the client can receive sample data using Pa_ReadStream and write sample data
-- using Pa_WriteStream, the number of samples that may be read or written
-- without blocking is returned by Pa_GetStreamReadAvailable and
-- Pa_GetStreamWriteAvailable respectively.
--
-- @param userData A client supplied pointer which is passed to the stream callback
-- function. It could for example, contain a pointer to instance data necessary
-- for processing the audio buffers. This parameter is ignored if streamCallback
-- is NULL.
--     
-- @return
-- Upon success Pa_OpenStream() returns paNoError and places a pointer to a
-- valid PaStream in the stream argument. The stream is inactive (stopped).
-- If a call to Pa_OpenStream() fails, a non-zero error code is returned (see
-- PaError for possible error codes) and the value of stream is invalid.
--
-- @see PaStreamParameters, PaStreamCallback, Pa_ReadStream, Pa_WriteStream,
-- Pa_GetStreamReadAvailable, Pa_GetStreamWriteAvailable
--*/
--PaError Pa_OpenStream( PaStream** stream,
--                       const PaStreamParameters *inputParameters,
--                       const PaStreamParameters *outputParameters,
--                       double sampleRate,
--                       unsigned long framesPerBuffer,
--                       PaStreamFlags streamFlags,
--                       PaStreamCallback *streamCallback,
--                       void *userData );
--
--
--/** A simplified version of Pa_OpenStream() that opens the default input
-- and/or output devices.
--
-- @param stream The address of a PaStream pointer which will receive
-- a pointer to the newly opened stream.
-- 
-- @param numInputChannels  The number of channels of sound that will be supplied
-- to the stream callback or returned by Pa_ReadStream. It can range from 1 to
-- the value of maxInputChannels in the PaDeviceInfo record for the default input
-- device. If 0 the stream is opened as an output-only stream.
--
-- @param numOutputChannels The number of channels of sound to be delivered to the
-- stream callback or passed to Pa_WriteStream. It can range from 1 to the value
-- of maxOutputChannels in the PaDeviceInfo record for the default output dvice.
-- If 0 the stream is opened as an output-only stream.
--
-- @param sampleFormat The sample format of both the input and output buffers
-- provided to the callback or passed to and from Pa_ReadStream and Pa_WriteStream.
-- sampleFormat may be any of the formats described by the PaSampleFormat
-- enumeration.
-- 
-- @param sampleRate Same as Pa_OpenStream parameter of the same name.
-- @param framesPerBuffer Same as Pa_OpenStream parameter of the same name.
-- @param streamCallback Same as Pa_OpenStream parameter of the same name.
-- @param userData Same as Pa_OpenStream parameter of the same name.
--
-- @return As for Pa_OpenStream
--
-- @see Pa_OpenStream, PaStreamCallback
--*/
--PaError Pa_OpenDefaultStream( PaStream** stream,
--                              int numInputChannels,
--                              int numOutputChannels,
--                              PaSampleFormat sampleFormat,
--                              double sampleRate,
--                              unsigned long framesPerBuffer,
--                              PaStreamCallback *streamCallback,
--                              void *userData );
--
--
--/** Closes an audio stream. If the audio stream is active it
-- discards any pending buffers as if Pa_AbortStream() had been called.
--*/
--PaError Pa_CloseStream( PaStream *stream );
--
--
--/** Functions of type PaStreamFinishedCallback are implemented by PortAudio 
-- clients. They can be registered with a stream using the Pa_SetStreamFinishedCallback
-- function. Once registered they are called when the stream becomes inactive
-- (ie once a call to Pa_StopStream() will not block).
-- A stream will become inactive after the stream callback returns non-zero,
-- or when Pa_StopStream or Pa_AbortStream is called. For a stream providing audio
-- output, if the stream callback returns paComplete, or Pa_StopStream is called,
-- the stream finished callback will not be called until all generated sample data
-- has been played.
-- 
-- @param userData The userData parameter supplied to Pa_OpenStream()
--
-- @see Pa_SetStreamFinishedCallback
--*/
--typedef void PaStreamFinishedCallback( void *userData );
--
--
--/** Register a stream finished callback function which will be called when the 
-- stream becomes inactive. See the description of PaStreamFinishedCallback for 
-- further details about when the callback will be called.
--
-- @param stream a pointer to a PaStream that is in the stopped state - if the
-- stream is not stopped, the stream's finished callback will remain unchanged 
-- and an error code will be returned.
--
-- @param streamFinishedCallback a pointer to a function with the same signature
-- as PaStreamFinishedCallback, that will be called when the stream becomes
-- inactive. Passing NULL for this parameter will un-register a previously
-- registered stream finished callback function.
--
-- @return on success returns paNoError, otherwise an error code indicating the cause
-- of the error.
--
-- @see PaStreamFinishedCallback
--*/
--PaError Pa_SetStreamFinishedCallback( PaStream *stream, PaStreamFinishedCallback* streamFinishedCallback ); 
--
--
--/** Commences audio processing.
--*/
--PaError Pa_StartStream( PaStream *stream );
--
--
--/** Terminates audio processing. It waits until all pending
-- audio buffers have been played before it returns.
--*/
--PaError Pa_StopStream( PaStream *stream );
--
--
--/** Terminates audio processing immediately without waiting for pending
-- buffers to complete.
--*/
--PaError Pa_AbortStream( PaStream *stream );
--
--
--/** Determine whether the stream is stopped.
-- A stream is considered to be stopped prior to a successful call to
-- Pa_StartStream and after a successful call to Pa_StopStream or Pa_AbortStream.
-- If a stream callback returns a value other than paContinue the stream is NOT
-- considered to be stopped.
--
-- @return Returns one (1) when the stream is stopped, zero (0) when
-- the stream is running or, a PaErrorCode (which are always negative) if
-- PortAudio is not initialized or an error is encountered.
--
-- @see Pa_StopStream, Pa_AbortStream, Pa_IsStreamActive
--*/
--PaError Pa_IsStreamStopped( PaStream *stream );
--
--
--/** Determine whether the stream is active.
-- A stream is active after a successful call to Pa_StartStream(), until it
-- becomes inactive either as a result of a call to Pa_StopStream() or
-- Pa_AbortStream(), or as a result of a return value other than paContinue from
-- the stream callback. In the latter case, the stream is considered inactive
-- after the last buffer has finished playing.
--
-- @return Returns one (1) when the stream is active (ie playing or recording
-- audio), zero (0) when not playing or, a PaErrorCode (which are always negative)
-- if PortAudio is not initialized or an error is encountered.
--
-- @see Pa_StopStream, Pa_AbortStream, Pa_IsStreamStopped
--*/
--PaError Pa_IsStreamActive( PaStream *stream );
--
--
--
--/** A structure containing unchanging information about an open stream.
-- @see Pa_GetStreamInfo
--*/
--
--typedef struct PaStreamInfo
--{
--    /** this is struct version 1 */
--    int structVersion;
--
--    /** The input latency of the stream in seconds. This value provides the most
--     accurate estimate of input latency available to the implementation. It may
--     differ significantly from the suggestedLatency value passed to Pa_OpenStream().
--     The value of this field will be zero (0.) for output-only streams.
--     @see PaTime
--    */
--    PaTime inputLatency;
--
--    /** The output latency of the stream in seconds. This value provides the most
--     accurate estimate of output latency available to the implementation. It may
--     differ significantly from the suggestedLatency value passed to Pa_OpenStream().
--     The value of this field will be zero (0.) for input-only streams.
--     @see PaTime
--    */
--    PaTime outputLatency;
--
--    /** The sample rate of the stream in Hertz (samples per second). In cases
--     where the hardware sample rate is inaccurate and PortAudio is aware of it,
--     the value of this field may be different from the sampleRate parameter
--     passed to Pa_OpenStream(). If information about the actual hardware sample
--     rate is not available, this field will have the same value as the sampleRate
--     parameter passed to Pa_OpenStream().
--    */
--    double sampleRate;
--    
--} PaStreamInfo;
--
--
--/** Retrieve a pointer to a PaStreamInfo structure containing information
-- about the specified stream.
-- @return A pointer to an immutable PaStreamInfo structure. If the stream
-- parameter invalid, or an error is encountered, the function returns NULL.
--
-- @param stream A pointer to an open stream previously created with Pa_OpenStream.
--
-- @note PortAudio manages the memory referenced by the returned pointer,
-- the client must not manipulate or free the memory. The pointer is only
-- guaranteed to be valid until the specified stream is closed.
--
-- @see PaStreamInfo
--*/
--const PaStreamInfo* Pa_GetStreamInfo( PaStream *stream );
--
--
--/** Determine the current time for the stream according to the same clock used
-- to generate buffer timestamps. This time may be used for syncronising other
-- events to the audio stream, for example synchronizing audio to MIDI.
--                                        
-- @return The stream's current time in seconds, or 0 if an error occurred.
--
-- @see PaTime, PaStreamCallback
--*/
--PaTime Pa_GetStreamTime( PaStream *stream );
--
--
--/** Retrieve CPU usage information for the specified stream.
-- The "CPU Load" is a fraction of total CPU time consumed by a callback stream's
-- audio processing routines including, but not limited to the client supplied
-- stream callback. This function does not work with blocking read/write streams.
--
-- This function may be called from the stream callback function or the
-- application.
--     
-- @return
-- A floating point value, typically between 0.0 and 1.0, where 1.0 indicates
-- that the stream callback is consuming the maximum number of CPU cycles possible
-- to maintain real-time operation. A value of 0.5 would imply that PortAudio and
-- the stream callback was consuming roughly 50% of the available CPU time. The
-- return value may exceed 1.0. A value of 0.0 will always be returned for a
-- blocking read/write stream, or if an error occurrs.
--*/
--double Pa_GetStreamCpuLoad( PaStream* stream );
--
--
--/** Read samples from an input stream. The function doesn't return until
-- the entire buffer has been filled - this may involve waiting for the operating
-- system to supply the data.
--
-- @param stream A pointer to an open stream previously created with Pa_OpenStream.
-- 
-- @param buffer A pointer to a buffer of sample frames. The buffer contains
-- samples in the format specified by the inputParameters->sampleFormat field
-- used to open the stream, and the number of channels specified by
-- inputParameters->numChannels. If non-interleaved samples were requested,
-- buffer is a pointer to the first element of an array of non-interleaved
-- buffer pointers, one for each channel.
--
-- @param frames The number of frames to be read into buffer. This parameter
-- is not constrained to a specific range, however high performance applications
-- will want to match this parameter to the framesPerBuffer parameter used
-- when opening the stream.
--
-- @return On success PaNoError will be returned, or PaInputOverflowed if input
-- data was discarded by PortAudio after the previous call and before this call.
--*/
--PaError Pa_ReadStream( PaStream* stream,
--                       void *buffer,
--                       unsigned long frames );
--
--
--/** Write samples to an output stream. This function doesn't return until the
-- entire buffer has been consumed - this may involve waiting for the operating
-- system to consume the data.
--
-- @param stream A pointer to an open stream previously created with Pa_OpenStream.
--
-- @param buffer A pointer to a buffer of sample frames. The buffer contains
-- samples in the format specified by the outputParameters->sampleFormat field
-- used to open the stream, and the number of channels specified by
-- outputParameters->numChannels. If non-interleaved samples were requested,
-- buffer is a pointer to the first element of an array of non-interleaved
-- buffer pointers, one for each channel.
--
-- @param frames The number of frames to be written from buffer. This parameter
-- is not constrained to a specific range, however high performance applications
-- will want to match this parameter to the framesPerBuffer parameter used
-- when opening the stream.
--
-- @return On success PaNoError will be returned, or paOutputUnderflowed if
-- additional output data was inserted after the previous call and before this
-- call.
--*/
--PaError Pa_WriteStream( PaStream* stream,
--                        const void *buffer,
--                        unsigned long frames );
--
--
--/** Retrieve the number of frames that can be read from the stream without
-- waiting.
--
-- @return Returns a non-negative value representing the maximum number of frames
-- that can be read from the stream without blocking or busy waiting or, a
-- PaErrorCode (which are always negative) if PortAudio is not initialized or an
-- error is encountered.
--*/
--signed long Pa_GetStreamReadAvailable( PaStream* stream );
--
--
--/** Retrieve the number of frames that can be written to the stream without
-- waiting.
--
-- @return Returns a non-negative value representing the maximum number of frames
-- that can be written to the stream without blocking or busy waiting or, a
-- PaErrorCode (which are always negative) if PortAudio is not initialized or an
-- error is encountered.
--*/
--signed long Pa_GetStreamWriteAvailable( PaStream* stream );
--
--
--/* Miscellaneous utilities */
--
--
--/** Retrieve the size of a given sample format in bytes.
--
-- @return The size in bytes of a single sample in the specified format,
-- or paSampleFormatNotSupported if the format is not supported.
--*/
--PaError Pa_GetSampleSize( PaSampleFormat format );
--
--
--/** Put the caller to sleep for at least 'msec' milliseconds. This function is
-- provided only as a convenience for authors of portable code (such as the tests
-- and examples in the PortAudio distribution.)
--
-- The function may sleep longer than requested so don't rely on this for accurate
-- musical timing.
--*/
--void Pa_Sleep( long msec );
--
--
--
--#ifdef __cplusplus
--}
--#endif /* __cplusplus */
--#endif /* PORTAUDIO_H */
---- a/src/wave.cpp
-+++ b/src/wave.cpp
-@@ -31,7 +31,10 @@
- #include <sys/time.h>
- #include <time.h>
--#include "portaudio.h"
-+#ifdef USE_PORTAUDIO
-+#include <portaudio.h>
-+#endif
-+
- #ifdef PLATFORM_WINDOWS
- #include <windows.h>
- #else
---- a/src/wavegen.cpp
-+++ b/src/wavegen.cpp
-@@ -40,7 +40,7 @@
- #endif
- #ifdef USE_PORTAUDIO
--#include "portaudio.h"
-+#include <portaudio.h>
- #undef USE_PORTAUDIO
- // determine portaudio version by looking for a #define which is not in V18
- #ifdef paNeverDropInput
index eafed375d2173a1c2b7749f9e0bdae84b2ed43d3..ea2bf903c5462e55c65e5eeb3f7ffbe5758d2dbd 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=forked-daapd
-PKG_VERSION:=26.1
+PKG_VERSION:=26.4
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=https://github.com/ejurgensen/$(PKG_NAME)/releases/download/$(PKG_VERSION)/
-PKG_HASH:=dec7a6b5879c43726ceeb40cb16b77f7bb3148ab4e0afec0947629b11f302720
+PKG_HASH:=c37012faf56238544fc7274ad0ade7bf16c15a9ae6af9ef4ba56ba88e508fffa
 
 PKG_FIXUP:=autoreconf
 PKG_USE_MIPS16:=0
@@ -54,6 +54,7 @@ CONFIGURE_ARGS += \
        --enable-mpd \
        --enable-chromecast \
        --enable-verification \
+       --enable-webinterface \
        --disable-spotify \
        --with-libplist \
        --with-libwebsockets \
index 132f22fb0f20ae5a9c0378913a30d91d4176f2cf..a170b29930d8c0690c11b52dd03090b75de18b61 100644 (file)
@@ -6,12 +6,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=mpd
-PKG_VERSION:=0.20.20
+PKG_VERSION:=0.20.21
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=http://www.musicpd.org/download/mpd/0.20/
-PKG_HASH:=a9e458c6e07cdf62649de7722e1e5a7f13aa82eeb397bfbbebc07cf5cf273584
+PKG_HASH:=8322764dc265c20f05c8c8fdfdd578b0722e74626bef56fcd8eebfb01acc58dc
 PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>
 
 PKG_LICENSE:=GPL-2.0
@@ -144,8 +144,7 @@ CONFIGURE_ARGS += \
        --disable-vorbis-encoder \
        --enable-wave-encoder \
        --disable-wavpack \
-       --disable-webdav \
-       --disable-wildmidi \
+       --enable-webdav \
        --disable-zzip \
        --with-zeroconf=no \
        --disable-soxr \
index 1284fd5ed9c91b071720ab5166302b160b798091..0ff900248df328f0a058cff7ec7d322b8912fca5 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=pianod
-PKG_VERSION:=174.07
+PKG_VERSION:=174.09
 PKG_RELEASE:=1
 
 PKG_SOURCE_URL:=https://github.com/thess/pianod-sc/releases/download/$(PKG_VERSION)
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
-PKG_HASH:=eee969926c095497893fbd28711258a31efb2d2301da87563dbcd101d8771bff
+PKG_HASH:=744c833ee17a7c95068c6925f4301f342bcad838ad8e48b40a19fd6739533eac
 
 PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>
 
index 40d99d79b1003d94099ac5cbc3bf53407a765638..64eddbe226c59773dac7f84ed24c0ac5935ae1b5 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=portaudio
-PKG_VERSION:=19_20140130
-PKG_RELEASE:=2
+PKG_VERSION:=190600_20161030
+PKG_RELEASE:=1
 
 PKG_SOURCE:=pa_stable_v$(PKG_VERSION).tgz
 PKG_SOURCE_URL:=http://www.portaudio.com/archives/
-PKG_HASH:=8fe024a5f0681e112c6979808f684c3516061cc51d3acc0b726af98fc96c8d57
+PKG_HASH:=f5a21d7dcd6ee84397446fa1fa1a0675bb2e8a4a6dceb4305a8404698d8d1513
 
 PKG_LICENSE:=MIT
 PKG_LICENSE_FILES:=LICENSE.txt
index aea241df32b6461cb73c2dff0f0ff5fe619bf1b4..5b6e956ad9086e83d41e02941b37c36946b4e7af 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=acpica-unix
-PKG_VERSION:=20180629
+PKG_VERSION:=20180927
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://acpica.org/sites/$(patsubst %-unix,%,$(PKG_NAME))/files/$(PKG_SOURCE_URL)
-PKG_HASH:=70d11f3f2adbdc64a5b33753e1889918af811ec8050722fbee0fdfc3bfd29a4f
+PKG_HASH:=dc408d11889bcbedcfe9cc5b7ed23f65e857ca8fd5125f8c7a9e075e0b282db1
 PKG_MAINTAINER:=Philip Prindeville <philipp@redfish-solutions.com>
 
 PKG_LICENSE:=GPL-2.0
index 17a2d721b9744269b02664c4991880fe8f77da20..563665590f23511eb08e27eb89af8c030c309c10 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=at
-PKG_VERSION:=3.1.20
+PKG_VERSION:=3.1.23
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)_$(PKG_VERSION).orig.tar.gz
 PKG_SOURCE_URL:=http://ftp.debian.org/debian/pool/main/a/at
-PKG_HASH:=0871923cab73050b98ace020664eb2ddc1e669e4166b5abb64d864d02fcefab9
+PKG_HASH:=97450aa954aaa8a70218cc8e61a33df9fee9f86527e9f861de302fb7a3c81710
 
 PKG_LICENSE:=GPL-2.0+ GPL-3.0+ ISC
 PKG_LICENSE_FILES:=COPYING Copyright
index e483071744645c25210e9c516b40067193f9c6d3..9dd1f64d355ba7f4f0fafb86901b3411e4350f8c 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=bandwidthd
 PKG_VERSION:=2.0.1-35
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://codeload.github.com/NethServer/bandwidthd/tar.gz/$(PKG_VERSION)?
@@ -140,7 +140,7 @@ CONFIGURE_ARGS += \
        ac_cv_lib_sqlite3_sqlite3_open=no
 endif
 
-EXTRA_CFLAGS+= $(TARGET_CPPFLAGS)
+EXTRA_CFLAGS+= $(TARGET_CPPFLAGS) -fgnu89-inline
 EXTRA_LDFLAGS+= $(TARGET_LDFLAGS) -Wl,-rpath-link,$(STAGING_DIR)/usr/lib
 
 define Package/bandwidthd/install
index 49eaa532f5e4526efb0f351a0b623aa201cc2d64..15d02144103b2e8faebabee90b395cb659bb9cd2 100644 (file)
@@ -9,9 +9,9 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=bluelog
 PKG_VERSION:=1.1.2
-PKG_RELEASE:=3
+PKG_RELEASE:=4
 
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE:=Bluelog-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://codeload.github.com/MS3FGX/Bluelog/tar.gz/$(PKG_VERSION)?
 PKG_HASH:=ebbc1357e14bc46cbddd8390cdbd29c0131b09b8ab680a1c382164ef076cb53e
 PKG_BUILD_DIR:=$(BUILD_DIR)/Bluelog-$(PKG_VERSION)
index 6ae0d415358c926e3b2cf2bf0fa9c4626a4ab466..b7b72f5c79f5a7d977875c99f2b45348036cbc8c 100644 (file)
@@ -8,17 +8,17 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=bonnie++
-PKG_VERSION:=1.97
+PKG_VERSION:=1.97.3
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tgz
-PKG_SOURCE_URL:=http://www.coker.com.au/bonnie++/experimental/
-PKG_HASH:=44f5a05937648a6526ba99354555d7d15f2dd392e55d3436f6746da6f6c35982
+PKG_SOURCE_URL:=http://www.coker.com.au/bonnie++/
+PKG_HASH:=e27b386ae0dc054fa7b530aab6bdead7aea6337a864d1f982bc9ebacb320746e
 PKG_LICENSE:=GPL-2.0
 PKG_LICENSE_FILES:=copyright.txt
 PKG_MAINTAINER:=Florian Fainelli <florian@openwrt.org>
 
-PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION).1
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
 
 include $(INCLUDE_DIR)/package.mk
 
index 0379fec0bd6e1ead82aa3ee7d03a7ca13cdcf6b9..e3ff56b121b5e28e5dccfbc8f7b6875c09981340 100644 (file)
@@ -1,7 +1,7 @@
-Index: bonnie++-1.97.1/configure
+Index: bonnie++-1.97.3/configure
 ===================================================================
---- bonnie++-1.97.1.orig/configure
-+++ bonnie++-1.97.1/configure
+--- bonnie++-1.97.3.orig/configure
++++ bonnie++-1.97.3/configure
 @@ -3955,9 +3955,7 @@ rm -f core conftest.err conftest.$ac_obj
  
  if test "$cross_compiling" = yes; then :
@@ -13,10 +13,10 @@ Index: bonnie++-1.97.1/configure
  else
    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
-Index: bonnie++-1.97.1/Makefile
+Index: bonnie++-1.97.3/Makefile
 ===================================================================
---- bonnie++-1.97.1.orig/Makefile
-+++ bonnie++-1.97.1/Makefile
+--- bonnie++-1.97.3.orig/Makefile
++++ bonnie++-1.97.3/Makefile
 @@ -1,5 +1,7 @@
  EXES=bonnie++ zcav getc_putc getc_putc_helper
  EXE=bon_csv2html generate_randfile
index 025738e0e0ecc0196e29aaa392af9dc1beaf576b..5ce1252f328aed401c47328537ec607b7493a493 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=ccid
-PKG_VERSION:=1.4.29
+PKG_VERSION:=1.4.30
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
 PKG_SOURCE_URL:=https://ccid.apdu.fr/files/
-PKG_HASH:=a5432ae845730493c04e59304b5c0c6103cd0e2c8827df57d69469a3eaaab84d
+PKG_HASH:=ac17087be08880a0cdf99a8a2799a4ef004dc6ffa08b4d9b0ad995f39a53ff7c
 PKG_MAINTAINER:=Daniel Golle <daniel@makrotopia.org>
 PKG_LICENSE:=LGPL-2.1+
 PKG_LICENSE_FILES:=COPYING
index 6c7356a406656d654161cc7072b42627a99967c6..a63e9e202620d77f240265b3a16d45856b1f38ee 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=cmdpad
 PKG_VERSION:=0.0.3
-PKG_RELEASE:=3
+PKG_RELEASE:=4
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tgz
 PKG_SOURCE_URL:=@SF/cmdpad
@@ -28,6 +28,8 @@ define Package/cmdpad
   URL:=http://cmdpad.sourceforge.net/index.php
 endef
 
+TARGET_CFLAGS += -std=gnu89
+
 CONFIGURE_ARGS += \
        --enable-static \
        --enable-shared
index 7e83795e5ebab863943cf6d2f30b4df72f3bf334..70013ff489beb8fa6c6f05de4d97bcc2574c70d6 100644 (file)
@@ -8,13 +8,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=collectd
-PKG_VERSION:=5.8.0
-PKG_RELEASE:=6
+PKG_VERSION:=5.8.1
+PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
 PKG_SOURCE_URL:=https://collectd.org/files/ \
        https://github.com/collectd/collectd/releases/download/collectd-$(PKG_VERSION)
-PKG_HASH:=b06ff476bbf05533cb97ae6749262cc3c76c9969f032bd8496690084ddeb15c9
+PKG_HASH:=e796fda27ce06377f491ad91aa286962a68c2b54076aa77a29673d53204453da
 
 PKG_FIXUP:=autoreconf
 PKG_REMOVE_FILES:=aclocal.m4 libltdl/aclocal.m4
@@ -213,10 +213,6 @@ define Package/collectd/config
        select PACKAGE_collectd-mod-network
 endef
 
-ifneq ($(CONFIG_avr32),)
-  TARGET_CFLAGS += -fsigned-char
-endif
-
 # common configure args
 CONFIGURE_ARGS+= \
        --disable-werror \
@@ -393,7 +389,7 @@ $(eval $(call BuildPlugin,tail,tail input,tail,))
 $(eval $(call BuildPlugin,tail-csv,tail CSV input,tail_csv,))
 $(eval $(call BuildPlugin,table,table-like structured file input,table,))
 $(eval $(call BuildPlugin,teamspeak2,TeamSpeak2 input,teamspeak2,))
-$(eval $(call BuildPlugin,ted,The Energy Detective input,ted,@((!TARGET_avr32)||BROKEN))) # fails on avr32 because of warnings treated as errors
+$(eval $(call BuildPlugin,ted,The Energy Detective input,ted,))
 $(eval $(call BuildPlugin,tcpconns,TCP connection tracking input,tcpconns,))
 $(eval $(call BuildPlugin,thermal,system temperatures input,thermal,))
 $(eval $(call BuildPlugin,unixsock,unix socket output,unixsock,))
index 6cb970393349147a5cc44be54a059e9f343abea7..26a589d6d6bec8f2486c973520c4154e1edeb350 100644 (file)
@@ -152,7 +152,7 @@ diff --git a/src/collectd.conf.pod b/src/collectd.conf.pod
 index dfd785a2c8..e9715126e6 100644
 --- a/src/collectd.conf.pod
 +++ b/src/collectd.conf.pod
-@@ -4128,11 +4128,19 @@ Configures the base register to read from the device. If the option
+@@ -4139,11 +4139,19 @@ Configures the base register to read from the device. If the option
  B<RegisterType> has been set to B<Uint32> or B<Float>, this and the next
  register will be read (the register number is increased by one).
  
index b0ef7c48477c64b5e9fc5f82b091cb859929312d..2820e07558c4eeeadecbab81eaf2a3c3e6b25c5a 100644 (file)
@@ -17,7 +17,7 @@
      /* consolidation_functions = */ NULL,
      /* consolidation_functions_num = */ 0,
  
-@@ -950,6 +953,12 @@ static int rrd_config(const char *key, c
+@@ -949,6 +952,12 @@ static int rrd_config(const char *key, c
            /* compar = */ rrd_compare_numeric);
  
      free(value_copy);
index 69aaf791284e6f8665dddbc6f2c01db85575a7a2..360c41751975a265e0315dbb03ea3129fa057ae4 100644 (file)
@@ -54,7 +54,7 @@
  #@BUILD_PLUGIN_JAVA_TRUE@LoadPlugin java
  @BUILD_PLUGIN_LOAD_TRUE@@BUILD_PLUGIN_LOAD_TRUE@LoadPlugin load
  #@BUILD_PLUGIN_LPAR_TRUE@LoadPlugin lpar
-@@ -720,6 +721,12 @@
+@@ -721,6 +722,12 @@
  #     IgnoreSelected true
  #</Plugin>
  
@@ -69,7 +69,7 @@
  #     JVMArg "-Djava.class.path=@prefix@/share/collectd/java/collectd-api.jar"
 --- a/src/collectd.conf.pod
 +++ b/src/collectd.conf.pod
-@@ -3503,6 +3503,27 @@ and all other interrupts are collected.
+@@ -3521,6 +3521,27 @@ and all other interrupts are collected.
  
  =back
  
  # Legacy types
 --- a/Makefile.am
 +++ b/Makefile.am
-@@ -983,6 +983,14 @@ irq_la_LDFLAGS = $(PLUGIN_LDFLAGS)
+@@ -997,6 +997,14 @@ irq_la_LDFLAGS = $(PLUGIN_LDFLAGS)
  irq_la_LIBADD = libignorelist.la
  endif
  
index b39207e35d21620695fecd215e7e2de63e021e31..e32947dc967ea3dcb8dc385b1c3d5c04a1294472 100644 (file)
@@ -1,6 +1,6 @@
 --- a/src/ping.c
 +++ b/src/ping.c
-@@ -635,7 +635,7 @@ static int ping_read(void) /* {{{ */
+@@ -633,7 +633,7 @@ static int ping_read(void) /* {{{ */
                              ((double)(pkg_recv * (pkg_recv - 1))));
  
      /* Calculate drop rate. */
index 29ad43e0cf8e8921eebb3187f55d6a16b9ddb3de..8c0cf79289dd251d9b6eddb58347e932b7d11264 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=crelay
-PKG_VERSION:=0.12
+PKG_VERSION:=0.13
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://codeload.github.com/ondrej1024/crelay/tar.gz/V$(PKG_VERSION)?
-PKG_HASH:=84b2523107bb3e7263d0be1c3c367de1956b41711293e108f4ce483f5e66913f
+PKG_HASH:=d9919fe91e8641352f0b4705a37acc7ba4b3c4286ca78a629968f16f343cfdc4
 
 PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>
 PKG_LICENSE:=GPL-2.0
index 433a1da7d61c555a377675dccf725fc8773b9365..196d1aa8ab66ccb849553c83b9b8ed2528c4792c 100644 (file)
@@ -8,13 +8,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=dbus
-PKG_VERSION:=1.12.8
+PKG_VERSION:=1.12.10
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://dbus.freedesktop.org/releases/dbus/
-PKG_HASH:=e2dc99e7338303393b6663a98320aba6a63421bcdaaf571c8022f815e5896eb3
-PKG_MAINTAINER:=Steven Barth <cyrus@openwrt.org>
+PKG_HASH:=4b693d24976258c3f2fa9cc33ad9288c5fbfa7a16481dbd9a8a429f7aa8cdcf7
+PKG_MAINTAINER:=
 PKG_LICENSE:=AFL-2.1
 
 PKG_BUILD_PARALLEL:=1
index bf61564d87ccf9e8c7e88af0e19f735a79a00943..defe6c0862e640b29005fc736168f4222e95c72c 100644 (file)
@@ -8,15 +8,16 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=fio
-PKG_VERSION:=3.8
+PKG_VERSION:=3.11
 PKG_RELEASE:=1
-PKG_MAINTAINER:=Dragan Stancevic <ds@codeminutia.com>
-PKG_LICENSE:=GPL-2.0+
-PKG_LICENSE_FILES:=COPYING
 
 PKG_SOURCE_URL:=http://brick.kernel.dk/snaps
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
-PKG_HASH:=7868c4332aab98b88b7ebbb3ecfebc86cbc68b74ac0104575fa4f66bb7874a0e
+PKG_HASH:=4aab4f81e443f554f7526ff8f3a026ab78afc7e40049ba6050dac8f219071569
+
+PKG_MAINTAINER:=Rosen Penev <rosenp@gmail.com>
+PKG_LICENSE:=GPL-2.0+
+PKG_LICENSE_FILES:=COPYING
 
 include $(INCLUDE_DIR)/package.mk
 
@@ -42,6 +43,7 @@ CONFIGURE_ARGS = \
        --disable-numa \
        --disable-rdma \
        --disable-rados \
+       --disable-http \
        --disable-rbd \
        --disable-gfapi \
        --disable-lex \
diff --git a/utils/fio/patches/010-Add-Musl-support.patch b/utils/fio/patches/010-Add-Musl-support.patch
new file mode 100644 (file)
index 0000000..938f8d6
--- /dev/null
@@ -0,0 +1,76 @@
+From 2759b7c8dda77641fe271102a26ad7a02419ad62 Mon Sep 17 00:00:00 2001
+From: Rosen Penev <rosenp@gmail.com>
+Date: Sun, 16 Sep 2018 11:07:14 -0700
+Subject: [PATCH] Add Musl support
+
+The *48_r functions are glibc extensions that also happen to be supported
+by uclibc as well. Adapted from the Android solution.
+
+__USE_FILE_OFFSET64 is glibc specific so use LARGEFILE_SOURCE.
+
+Signed-off-by: Rosen Penev <rosenp@gmail.com>
+---
+ os/os-linux.h         | 17 +++++++++++++++++
+ oslib/libmtd_common.h |  2 +-
+ 2 files changed, 18 insertions(+), 1 deletion(-)
+
+diff --git a/os/os-linux.h b/os/os-linux.h
+index 6b63d123..e06aadae 100644
+--- a/os/os-linux.h
++++ b/os/os-linux.h
+@@ -60,7 +60,11 @@
+ typedef cpu_set_t os_cpu_mask_t;
++#if defined(__GLIBC__) || defined(__UCLIBC__)
+ typedef struct drand48_data os_random_state_t;
++#else
++typedef struct { unsigned short r[3]; } os_random_state_t;
++#endif
+ #ifdef CONFIG_3ARG_AFFINITY
+ #define fio_setaffinity(pid, cpumask)         \
+@@ -172,14 +176,27 @@ static inline unsigned long long os_phys_mem(void)
+ static inline void os_random_seed(unsigned long seed, os_random_state_t *rs)
+ {
++#if defined(__GLIBC__) || defined (__UCLIBC__)
+       srand48_r(seed, rs);
++#else
++      rs->r[0] = seed & 0xffff;
++      seed >>= 16;
++      rs->r[1] = seed & 0xffff;
++      seed >>= 16;
++      rs->r[2] = seed & 0xffff;
++      seed48(rs->r);
++#endif
+ }
+ static inline long os_random_long(os_random_state_t *rs)
+ {
+       long val;
++#if defined(__GLIBC__) || (__UCLIBC__)
+       lrand48_r(rs, &val);
++#else
++      val = nrand48(rs->r);
++#endif
+       return val;
+ }
+diff --git a/oslib/libmtd_common.h b/oslib/libmtd_common.h
+index 4ed9f0ba..c5cfd217 100644
+--- a/oslib/libmtd_common.h
++++ b/oslib/libmtd_common.h
+@@ -69,7 +69,7 @@ extern "C" {
+ #endif
+ /* define a print format specifier for off_t */
+-#ifdef __USE_FILE_OFFSET64
++#ifdef _LARGEFILE_SOURCE
+ #define PRIxoff_t PRIx64
+ #define PRIdoff_t PRId64
+ #else
+-- 
+2.19.1
+
diff --git a/utils/fish/Makefile b/utils/fish/Makefile
new file mode 100644 (file)
index 0000000..4c4e108
--- /dev/null
@@ -0,0 +1,67 @@
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=fish
+PKG_VERSION:=2.7.1
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://codeload.github.com/fish-shell/fish-shell/tar.gz/$(PKG_VERSION)?
+PKG_HASH:=eb43ea2eb9accf76661c487dd530a5fd345fa40a3201bd22cef2c52be39fb474
+PKG_MAINTAINER:=Curtis Jiang <jqqqqqqqqqq@gmail.com>
+PKG_LICENSE:=GPL-2.0
+
+PKG_FIXUP:=autoreconf
+PKG_INSTALL:=1
+PKG_BUILD_DIR:=$(BUILD_DIR)/fish-shell-$(PKG_VERSION)
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/fish
+  SECTION:=utils
+  CATEGORY:=Utilities
+  SUBMENU:=Shells
+  TITLE:=A smart and user-friendly command line shell
+  DEPENDS:=+libncurses +libstdcpp +librt
+  URL:=https://fishshell.com
+endef
+
+define Package/fish/description
+  Fish is a smart and user-friendly command line shell for OS X, Linux, and the
+  rest of the family. Fish includes features like syntax highlighting,
+  autosuggest-as-you-type, and fancy tab completions that just work, with no
+  configuration required.
+endef
+
+CONFIGURE_VARS += ac_cv_file__proc_self_stat=yes
+TARGET_CXXFLAGS += -std=c++0x
+
+define Package/fish/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/fish $(1)/usr/bin
+       $(INSTALL_DIR) $(1)/usr/share/fish
+       $(CP) $(PKG_INSTALL_DIR)/usr/share/fish/* $(1)/usr/share/fish/
+       rm -rf $(1)/usr/share/fish/groff
+       rm -rf $(1)/usr/share/fish/man
+       rm -rf $(1)/usr/share/fish/tools
+endef
+
+define Package/fish/postinst
+#!/bin/sh
+grep fish $${IPKG_INSTROOT}/etc/shells || \
+    echo "/usr/bin/fish" >> $${IPKG_INSTROOT}/etc/shells
+
+    # Backwards compatibility
+    if [[ -e /bin/fish ]] && ([[ ! -L /bin/fish ]] || [[ "$(readlink -fn $${IPKG_INSTROOT}/bin/fish)" != "../$(CONFIGURE_PREFIX)/bin/fish" ]]); then
+        ln -fs "../$(CONFIGURE_PREFIX)/bin/fish" "$${IPKG_INSTROOT}/bin/fish"
+    fi
+endef
+
+define Package/fish/postrm
+       rm -rf "$${IPKG_INSTROOT}/$(CONFIGURE_PREFIX)/share/fish/$(PKG_VERSION)"
+endef
+
+$(eval $(call BuildPackage,fish))
diff --git a/utils/fish/patches/001-no-hostname-and-whoami.patch b/utils/fish/patches/001-no-hostname-and-whoami.patch
new file mode 100644 (file)
index 0000000..c530734
--- /dev/null
@@ -0,0 +1,54 @@
+diff --git a/share/functions/prompt_hostname.fish b/share/functions/prompt_hostname.fish
+index 4348bce2..8502ce3f 100644
+--- a/share/functions/prompt_hostname.fish
++++ b/share/functions/prompt_hostname.fish
+@@ -2,7 +2,7 @@
+ # hostname command uses. So cache the answer so including it in the prompt doesn't make fish seem
+ # slow.
+ if not set -q __fish_prompt_hostname
+-    set -g __fish_prompt_hostname (hostname | string split '.')[1]
++    set -g __fish_prompt_hostname (uname -n | string split '.')[1]
+ end
+ function prompt_hostname
+diff --git a/share/tools/web_config/sample_prompts/pythonista.fish b/share/tools/web_config/sample_prompts/pythonista.fish
+index 9529035c..57ffaf86 100644
+--- a/share/tools/web_config/sample_prompts/pythonista.fish
++++ b/share/tools/web_config/sample_prompts/pythonista.fish
+@@ -7,7 +7,7 @@ function fish_prompt
+         set -g VIRTUAL_ENV_DISABLE_PROMPT true
+     end
+     set_color yellow
+-    printf '%s' (whoami)
++    printf '%s' (id -un)
+     set_color normal
+     printf ' at '
+diff --git a/share/tools/web_config/sample_prompts/screen_savvy.fish b/share/tools/web_config/sample_prompts/screen_savvy.fish
+index 411a5501..5cdcfb69 100644
+--- a/share/tools/web_config/sample_prompts/screen_savvy.fish
++++ b/share/tools/web_config/sample_prompts/screen_savvy.fish
+@@ -2,8 +2,8 @@
+ # author: Matthias
+ function fish_prompt -d "Write out the prompt"
+     if test -z $WINDOW
+-        printf '%s%s@%s%s%s%s%s> ' (set_color yellow) (whoami) (set_color purple) (prompt_hostname) (set_color $fish_color_cwd) (prompt_pwd) (set_color normal)
++        printf '%s%s@%s%s%s%s%s> ' (set_color yellow) (id -un) (set_color purple) (prompt_hostname) (set_color $fish_color_cwd) (prompt_pwd) (set_color normal)
+     else
+-        printf '%s%s@%s%s%s(%s)%s%s%s> ' (set_color yellow) (whoami) (set_color purple) (prompt_hostname) (set_color white) (echo $WINDOW) (set_color $fish_color_cwd) (prompt_pwd) (set_color normal)
++        printf '%s%s@%s%s%s(%s)%s%s%s> ' (set_color yellow) (id -un) (set_color purple) (prompt_hostname) (set_color white) (echo $WINDOW) (set_color $fish_color_cwd) (prompt_pwd) (set_color normal)
+     end
+ end
+diff --git a/share/tools/web_config/sample_prompts/terlar.fish b/share/tools/web_config/sample_prompts/terlar.fish
+index d49ef340..59b3d267 100644
+--- a/share/tools/web_config/sample_prompts/terlar.fish
++++ b/share/tools/web_config/sample_prompts/terlar.fish
+@@ -6,7 +6,7 @@ function fish_prompt --description 'Write out the prompt'
+     # User
+     set_color $fish_color_user
+-    echo -n (whoami)
++    echo -n (id -un)
+     set_color normal
+     echo -n '@'
index d3efbcbfd2cf75e3ad701d6aa3079fd457562eaf..84e05530b4ea48685177b922e0ae301dc033a127 100644 (file)
@@ -7,19 +7,20 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=hamlib
-PKG_VERSION:=3.0.1
+PKG_VERSION:=3.3
 PKG_RELEASE:=1
-PKG_HASH:=3fec97ea326d02aa8f35834c4af34194a3f544e6212f391397d788c566b44e32
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=@SF/hamlib
-PKG_FIXUP:=autoreconf
-PKG_INSTALL:=1
+PKG_HASH:=c90b53949c767f049733b442cd6e0a48648b55d99d4df5ef3f852d985f45e880
 
+PKG_MAINTAINER:=Vasilis Tsiligiannis <acinonyx@openwrt.gr>
 PKG_LICENSE:=GPLv2
 PKG_LICENSE_FILES:=COPYING
 
-PKG_MAINTAINER:=Vasilis Tsiligiannis <acinonyx@openwrt.gr>
+PKG_FIXUP:=autoreconf
+PKG_BUILD_PARALLEL:=1
+PKG_INSTALL:=1
 
 include $(INCLUDE_DIR)/package.mk
 
index ed9d8735eac792567a573edcb4db13d326d665db..22d42b5cc02bee1a37e3b10ad6683fa706f8c851 100644 (file)
@@ -8,13 +8,14 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=hdparm
-PKG_VERSION:=9.56
+PKG_VERSION:=9.57
 PKG_RELEASE:=1
 PKG_USE_MIPS16:=0
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=@SF/$(PKG_NAME)
-PKG_HASH:=6ff9ed695f1017396eec4101f990f114b7b0e0a04c5aa6369c0394053d16e4da
+PKG_HASH:=9d568db955a5428797f0b1677ef7cc8bab7756c6e7ff39f6c4a2b2c3640fe870
+
 PKG_MAINTAINER:=Richard Kunze <richard.kunze@web.de>
 PKG_LICENSE:=BSD-Style Open Source License
 
@@ -27,7 +28,7 @@ define Package/hdparm
   CATEGORY:=Utilities
   SUBMENU:=Disc
   TITLE:=Hard disk drive configuration utilitity
-  URL:=http://sourceforge.net/projects/hdparm/
+  URL:=https://sourceforge.net/projects/hdparm/
 endef
 
 define Package/hdparm/description
diff --git a/utils/hplip/Makefile b/utils/hplip/Makefile
new file mode 100644 (file)
index 0000000..13499ca
--- /dev/null
@@ -0,0 +1,109 @@
+#
+# Copyright (C) 2006-2011 OpenWrt.org
+# Copyright (C) 2017-2018 Luiz Angelo Daros de Luca <luizluca@gmail.com>
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=hplip
+PKG_VERSION:=3.18.9
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=@SF/hplip
+PKG_HASH:=20093830994de16bb36c049c1fdb688569531525fb994f7e605e66266a2d783c
+
+PKG_MAINTAINER:=Luiz Angelo Daros de Luca <luizluca@gmail.com>
+PKG_LICENSE:=GPL-2.0 GPL-2.0+
+PKG_LICENSE_FILES:=COPYING LICENSE
+
+PKG_BUILD_PARALLEL:=1
+PKG_BUILD_DEPENDS:= python libcups
+PKG_FIXUP:=autoreconf
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/hplip/Default
+  SECTION:=utils
+  CATEGORY:=Utilities
+  TITLE:=HP Linux Imaging and Printing
+  URL:=https://sourceforge.net/projects/hplip/
+endef
+
+define Package/hplip/Default/description
+       HPLIP is an HP developed solution for printing, scanning, and faxing with HP inkjet and laser based printers in Linux.
+endef
+
+define Package/hplip-common
+$(call Package/hplip/Default)
+  TITLE+= (common files)
+  DEPENDS+=+libusb-1.0
+endef
+
+define Package/hplip-common/description
+$(call Package/hplip/Default/description)
+
+These are common files shared between subpackages
+endef
+
+define Package/hplip-sane
+$(call Package/hplip/Default)
+  TITLE+= (scanner drivers)
+  DEPENDS+=+libsane +hplip-common
+endef
+
+define Package/hplip-sane/description
+$(call Package/hplip/Default/description)
+
+S.A.N.E backend for HP Scanners
+endef
+
+CONFIGURE_ARGS += \
+       --disable-gui-build \
+       --disable-network-build \
+       --disable-fax-build \
+       --disable-pp-build \
+       --disable-doc-build \
+       --disable-dbus-build \
+       --disable-hpijs-only-build \
+       --disable-hpcups-install \
+       --disable-hpps-install \
+       --disable-cups-drv-install \
+       --enable-lite-build
+
+define Package/hplip-common/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_BUILD_DIR)/.libs/libhpip.so* $(1)/usr/lib/
+       $(CP) $(PKG_BUILD_DIR)/.libs/libhpmud.so* $(1)/usr/lib/
+
+       $(INSTALL_DIR) $(1)/etc/hp
+       $(CP) $(PKG_BUILD_DIR)/hplip.conf $(1)/etc/hp/hplip.conf
+
+       $(INSTALL_DIR) $(1)/usr/share/hplip/data/models/
+       $(CP) $(PKG_BUILD_DIR)/data/models/models.dat $(1)/usr/share/hplip/data/models/
+
+       $(INSTALL_DIR) $(1)/etc/hotplug.d/usb/
+       $(INSTALL_BIN) ./files/20-hplip $(1)/etc/hotplug.d/usb/
+endef
+
+define Package/hplip-sane/install
+       $(INSTALL_DIR) $(1)/usr/lib/sane
+       $(CP) $(PKG_BUILD_DIR)/.libs/libsane-hpaio.so* $(1)/usr/lib/sane
+
+       $(INSTALL_DIR) $(1)/etc/sane.d/dll.d/
+       $(INSTALL_DATA) ./files/hplib.conf $(1)/etc/sane.d/dll.d/hplib
+endef
+
+define Package/hplip-common/conffiles
+/etc/hp/hplip.conf
+endef
+
+define Package/hplip-sane/conffiles
+/etc/sane.d/dll.d/hplib
+endef
+
+$(eval $(call BuildPackage,hplip-common))
+$(eval $(call BuildPackage,hplip-sane))
diff --git a/utils/hplip/files/20-hplip b/utils/hplip/files/20-hplip
new file mode 100644 (file)
index 0000000..6066cc5
--- /dev/null
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+# Copyright (C) 2009 OpenWrt.org
+
+
+case "$ACTION" in
+        add)
+                # You have to figure out your PRODUCT id. Uncomment the line below,
+                # attach and detach your HP USB printer to find your id in /tmp/hplip.test.
+                # It will look like "Found 3f0/1717/100 on /proc/bus/usb/002/009"
+                # Replace 3f0/1717/100 below with your id.
+                #
+                # echo "Found $PRODUCT on $DEVICE" > /tmp/hplip.test
+
+                [ "$PRODUCT" = "3f0/1717/100" ] && chown nobody $DEVICE && chmod 666 $DEVICE
+                ;;
+        remove)
+                # device is gone
+                ;;
+esac
diff --git a/utils/hplip/files/hplib.conf b/utils/hplip/files/hplib.conf
new file mode 100644 (file)
index 0000000..d67d370
--- /dev/null
@@ -0,0 +1,2 @@
+# Load the hplib driver
+hpaio
diff --git a/utils/hplip/patches/010-libusb_fix.patch b/utils/hplip/patches/010-libusb_fix.patch
new file mode 100644 (file)
index 0000000..05ba400
--- /dev/null
@@ -0,0 +1,13 @@
+--- a/configure.in
++++ b/configure.in
+@@ -598,6 +598,10 @@ if test "$class_driver" = "no" && test "$hpijs_only_build" = "no" && test "$hpcu
+    else
+       AC_CHECK_LIB([usb-1.0], [libusb_init], [LIBS="$LIBS"], [AC_MSG_ERROR([cannot find libusb 1.0 support], 2)])
+       AC_CHECK_HEADERS(libusb-1.0/libusb.h, ,[AC_MSG_ERROR([cannot find libusb-1.0-devel support], 11)])
++      PKG_CHECK_MODULES(LIBUSB_1_0, [ libusb-1.0 >= 1.0.0 ], have_libusb_1_0=yes, have_libusb_1_0=no)
++      if test "$have_libusb_1_0" = "yes"; then
++        CFLAGS="$CFLAGS $LIBUSB_1_0_CFLAGS"
++      fi
+    fi
+ fi
diff --git a/utils/hplip/patches/020-remove_cups_dep_on_scan.patch b/utils/hplip/patches/020-remove_cups_dep_on_scan.patch
new file mode 100644 (file)
index 0000000..3951e3b
--- /dev/null
@@ -0,0 +1,163 @@
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -71,7 +71,7 @@ else
+ libsane_hpaio_la_LDFLAGS = -version-info 1:0:0
+ endif
+ # The following is a interlibrary dependency that must be compiled first.
+-libsane_hpaio_la_LIBADD = libhpip.la libhpmud.la libhpipp.la $(DBUS_LIBS) -lcups -ldl
++libsane_hpaio_la_LIBADD = libhpip.la libhpmud.la libhpipp.la $(DBUS_LIBS) -ldl
+ #libsane_hpaio_la_CFLAGS = -DWITH_NONAMESPACES -DSOAP_DEBUG
+ libsane_hpaio_la_CFLAGS = $(DBUS_CFLAGS) -Iprotocol
+--- a/scan/sane/hpaio.c
++++ b/scan/sane/hpaio.c
+@@ -34,7 +34,6 @@
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+-#include <cups/cups.h>
+ #include "hpmud.h"
+ #include "hp_ipp.h"
+ #include "soap.h"
+@@ -145,98 +144,6 @@ static int GetUriLine(char *buf, char *uri, char **tail)
+    return i;
+ }
+-static int AddCupsList(char *uri, char ***printer)
+-{
+-   int i, stat=1;
+-
+-   /* Look for hp network URIs only. */
+-   if (strncasecmp(uri, "hp:/net/", 8) !=0)
+-      goto bugout;
+-
+-   if (*printer == NULL)
+-   {
+-      /* Allocate array of string pointers. */
+-      *printer = malloc(sizeof(char *) * MAX_DEVICE);
+-      memset(*printer, 0, sizeof(char *) * MAX_DEVICE);
+-   }
+-
+-   /* Ignor duplicates (ie: printer queues using the same device). */
+-   for (i=0; (*printer)[i] != NULL && i<MAX_DEVICE; i++)
+-   {
+-      if (strcmp((*printer)[i], uri) == 0)
+-         goto bugout;
+-   }
+-
+-   /* Find empty slot in array of pointers. */
+-   for (i=0; i<MAX_DEVICE; i++)
+-   {
+-      if ((*printer)[i] == NULL)
+-      {
+-         (*printer)[i] = strdup(uri);
+-         break;
+-      }
+-   }
+-
+-   stat = 0;
+-
+-bugout:
+-
+-   return stat;
+-}
+-
+-
+-static int GetCupsPrinters(char ***printer)
+-{
+-   http_t *http=NULL;     /* HTTP object */
+-   ipp_t *request=NULL;  /* IPP request object */
+-   ipp_t *response=NULL; /* IPP response object */
+-   ipp_attribute_t *attr;     /* Current IPP attribute */
+-   int cnt=0;
+-
+-   /* Connect to the HTTP server */
+-   if ((http = httpConnectEncrypt(cupsServer(), ippPort(), cupsEncryption())) == NULL)
+-      goto bugout;
+-
+-   /* Assemble the IPP request */
+-   request = ippNew();
+-
+-   ippSetOperation( request, CUPS_GET_PRINTERS );
+-   ippSetRequestId( request, 1 );
+-
+-   ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET, "attributes-charset", NULL, "utf-8");
+-   ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE, "attributes-natural-language", NULL, "en");
+-   ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", NULL, "device-uri");
+-
+-   /* Send the request and get a response. */
+-   if ((response = cupsDoRequest(http, request, "/")) == NULL)
+-      goto bugout;
+-
+-   for (attr = ippFirstAttribute ( response ); attr != NULL; attr = ippNextAttribute( response ))
+-   {
+-      /* Skip leading attributes until we hit a printer. */
+-      while (attr != NULL && ippGetGroupTag( attr ) != IPP_TAG_PRINTER)
+-         attr = ippNextAttribute( response );
+-
+-      if (attr == NULL)
+-         break;
+-
+-      while (attr != NULL && ippGetGroupTag( attr ) == IPP_TAG_PRINTER)
+-      {
+-         if (strcmp(ippGetName( attr ), "device-uri") == 0 && ippGetValueTag( attr ) == IPP_TAG_URI && AddCupsList(ippGetString( attr, 0, NULL ), printer) == 0)
+-            cnt++;
+-         attr = ippNextAttribute( response );
+-      }
+-
+-      if (attr == NULL)
+-         break;
+-   }
+-
+-   ippDelete(response);
+-
+- bugout:
+-   return cnt;
+-}
+-
+ static int AddDevice(char *uri)
+ {
+     struct hpmud_model_attributes ma;
+@@ -289,7 +196,6 @@ static int DevDiscovery(int localOnly)
+     char uri[HPMUD_LINE_SIZE];
+     char *tail = message;
+     int i, scan_type, cnt=0, total=0, bytes_read;
+-    char **cups_printer=NULL;     /* list of printers */
+     char* token = NULL;
+     enum HPMUD_RESULT stat;
+@@ -304,34 +210,6 @@ static int DevDiscovery(int localOnly)
+         total += AddDevice(uri);
+     }
+-    /* Look for Network Scan devices if localonly flag if FALSE. */
+-    if (!localOnly)
+-    {
+-        /* Look for all-in-one scan devices for which print queue created */
+-        cnt = GetCupsPrinters(&cups_printer);
+-        for (i=0; i<cnt; i++)
+-        {
+-            total += AddDevice(cups_printer[i]);
+-            free(cups_printer[i]);
+-        }
+-        if (cups_printer)
+-            free(cups_printer);
+-#ifdef HAVE_LIBNETSNMP
+-        /* Discover NW scanners using Bonjour*/
+-        bytes_read = mdns_probe_nw_scanners(message, sizeof(message), &cnt);
+-        token = strtok(message, ";");
+-        while (token)
+-        {
+-            total += AddDevice(token);
+-            token = strtok(NULL, ";");
+-        }
+-#endif
+-        if(!total)
+-        {          
+-          SendScanEvent("hpaio:/net/HP_Scan_Devices?ip=1.1.1.1", EVENT_ERROR_NO_PROBED_DEVICES_FOUND);
+-        }
+-    }
+-
+ bugout:
+    return total;
+ }
diff --git a/utils/hplip/patches/030-replace_unsafe_memcpy_with_memmove.patch b/utils/hplip/patches/030-replace_unsafe_memcpy_with_memmove.patch
new file mode 100644 (file)
index 0000000..5a71180
--- /dev/null
@@ -0,0 +1,15 @@
+https://bugs.launchpad.net/hplip/+bug/1672256
+
+memcpy should never be used with overlapping memory regions
+
+--- a/io/hpmud/musb.c
++++ b/io/hpmud/musb.c
+@@ -775,7 +775,7 @@ static int device_id(int fd, unsigned char *buffer, int size)
+         len = size-1;   /* leave byte for zero termination */
+     if (len > 2)
+         len -= 2;
+-    memcpy(buffer, buffer+2, len);    /* remove length */
++    memmove(buffer, buffer+2, len);    /* remove length */
+     buffer[len]=0;
+     DBG("read actual device_id successfully fd=%d len=%d\n", fd, len);
diff --git a/utils/hplip/patches/040-fix_bool.patch b/utils/hplip/patches/040-fix_bool.patch
new file mode 100644 (file)
index 0000000..eab984e
--- /dev/null
@@ -0,0 +1,31 @@
+https://bugs.launchpad.net/hplip/+bug/1778626
+
+--- a/prnt/hpcups/genPCLm.cpp
++++ b/prnt/hpcups/genPCLm.cpp
+@@ -171,7 +171,7 @@ Defines
+ #define rgb_2_gray(r,g,b) (ubyte)(0.299*(double)r+0.587*(double)g+0.114*(double)b)
+ // Note: this is required for debugging
+-boolean writeOutputFile(int numBytes, ubyte *ptr, char *user_name);
++bool writeOutputFile(int numBytes, ubyte *ptr, char *user_name);
+ /* 
+ ********************************************* Helper Routines **************************
+@@ -343,7 +343,7 @@ bool PCLmGenerator::addKids(sint32 kidObj)
+       return(true);
+ }
+-boolean writeOutputFile(int numBytes, ubyte *ptr, char *user_name)
++bool writeOutputFile(int numBytes, ubyte *ptr, char *user_name)
+ {
+       FILE *outputFile;
+       char outFileName[MAX_FILE_PATH_LEN];
+@@ -1074,7 +1074,7 @@ void PCLmGenerator::writePDFGrammarPage(int imageWidth, int imageHeight, int num
+ * Limitations:
+ *   - 
+ *****************************************************************************************/
+-boolean prepImageForBacksideDuplex(ubyte *imagePtr, sint32 imageHeight, sint32 imageWidth, sint32 numComponents)
++bool prepImageForBacksideDuplex(ubyte *imagePtr, sint32 imageHeight, sint32 imageWidth, sint32 numComponents)
+ {
+       sint32 numBytes=imageHeight*imageWidth*numComponents;
+       ubyte *head, *tail, t0, t1, t2; 
diff --git a/utils/hplip/patches/050-fix-glibcisms.patch b/utils/hplip/patches/050-fix-glibcisms.patch
new file mode 100644 (file)
index 0000000..e020bd4
--- /dev/null
@@ -0,0 +1,17 @@
+diff --git a/scan/sane/OrbliteScan/LinuxCommon.h b/scan/sane/OrbliteScan/LinuxCommon.h
+index 6605dd9..55c7110 100644
+--- a/scan/sane/OrbliteScan/LinuxCommon.h
++++ b/scan/sane/OrbliteScan/LinuxCommon.h
+@@ -18,10 +18,8 @@ typedef u_int32_t                   UInt32;
+ typedef int32_t                               SInt32;\r
+ //typedef unsigned long                       UInt32;\r
+ //typedef signed long                 SInt32;\r
+-typedef __S64_TYPE                    SInt64;\r
+-typedef __U64_TYPE                    UInt64;\r
+-typedef __S64_TYPE                    int64_t;\r
+-typedef __U64_TYPE                    uint64_t;\r
++typedef int64_t                       SInt64;\r
++typedef uint64_t                      UInt64;\r
\r
+ //typedef unsigned long       ULONG;\r
+ //typedef void*                       LPVOID;\r
index 5db0de7470c395f0e4cb29917218af29c5ed3edb..9b334f13cc2412e1827a0c080f85dfd762e3d0e6 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=less
-PKG_VERSION:=487
+PKG_VERSION:=530
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=http://www.greenwoodsoftware.com/less
-PKG_HASH:=f3dc8455cb0b2b66e0c6b816c00197a71bf6d1787078adeee0bcf2aea4b12706
+PKG_HASH:=503f91ab0af4846f34f0444ab71c4b286123f0044a4964f1ae781486c617f2e2
 
 PKG_LICENSE:=GPL-3.0
 PKG_LICENSE_FILES:=COPYING
index 7b36b67988f331d47a4b4cb7d9398cc559a4135b..30d3276872fc472a323e455bda5449bbd673b217 100644 (file)
@@ -13,9 +13,10 @@ PKG_VERSION:=4.91
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)_$(PKG_VERSION).tar.bz2
-PKG_SOURCE_URL:=https://www.mirrorservice.org/sites/lsof.itap.purdue.edu/pub/tools/unix/lsof/ ftp://sunsite.ualberta.ca/pub/Mirror/lsof/ ftp://ftp.fu-berlin.de/pub/unix/tools/lsof
+PKG_SOURCE_URL:=https://www.mirrorservice.org/sites/lsof.itap.purdue.edu/pub/tools/unix/lsof/ ftp://ftp.fu-berlin.de/pub/unix/tools/lsof
 PKG_HASH:=c9da946a525fbf82ff80090b6d1879c38df090556f3fe0e6d782cb44172450a3
 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)_$(PKG_VERSION)
+
 PKG_MAINTAINER:=Maxim Storchak <m.storchak@gmail.com>
 PKG_LICENSE:=Unique
 PKG_LICENSE_FILES:=00README
@@ -59,7 +60,7 @@ define Build/Configure
                ./Configure -n linux
 endef
 
-define Build/Compile   
+define Build/Compile
        LSOF_HOST="none" \
        LSOF_LOGNAME="none" \
        LSOF_SYSINFO="none" \
@@ -67,7 +68,7 @@ define Build/Compile
        $(MAKE) -C $(PKG_BUILD_DIR)
 endef
 
-define Package/lsof/install    
+define Package/lsof/install
        $(INSTALL_DIR) $(1)/usr/bin
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/lsof $(1)/usr/bin
 endef
index f3168e579e2106dedc8e6a9b39f08c51b2d62a86..0aafec8d10986e2a9ef583729119f73cb81d88ba 100644 (file)
@@ -2,7 +2,7 @@ diff --git a/Configure b/Configure
 index e4a25a2..3a6e78b 100755
 --- a/Configure
 +++ b/Configure
-@@ -2923,7 +2923,7 @@ return(0); }
+@@ -2976,7 +2976,7 @@ return(0); }
        LSOF_TMP1=1
        fi      # }
      fi        # }
index e2f162ba752b089cbc2b57676a1287be2f968107..e0b4f27185c75b7d575a7b108f3133a19f6502ce 100644 (file)
@@ -2,7 +2,7 @@ diff --git a/Configure b/Configure
 index 3a6e78b..a2946c6 100755
 --- a/Configure
 +++ b/Configure
-@@ -2788,6 +2788,9 @@ LOCKF_OWNER4
+@@ -2841,6 +2841,9 @@ LOCKF_OWNER4
      if test "X$LSOF_CC" = "X" # {
      then
        LSOF_CC=cc
index 3d2e198dbdf533a26862897341d988f21748c4d1..c0c4e3a693a4b826bbc4397436a0d516ce40fa42 100644 (file)
@@ -8,8 +8,8 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=mariadb
-PKG_VERSION:=10.2.16
-PKG_RELEASE:=3
+PKG_VERSION:=10.2.17
+PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL := \
@@ -18,7 +18,7 @@ PKG_SOURCE_URL := \
        https://ftp.yz.yamagata-u.ac.jp/pub/dbms/mariadb/$(PKG_NAME)-$(PKG_VERSION)/source \
        https://downloads.mariadb.org/interstitial/$(PKG_NAME)-$(PKG_VERSION)/source
 
-PKG_HASH:=c182ee93bacee9c1395a4cece56acfc433bc5153ec627c4898927b93eee54dc4
+PKG_HASH:=e7b3078f8de874a4d451242a8a3eed49bf6f916dcd52fc3efa55886f5f35be27
 PKG_MAINTAINER:=Sebastian Kemper <sebastian_ml@gmx.net>
 PKG_LICENSE:=GPL-2.0 LGPL-2.1
 PKG_LICENSE_FILES:=COPYING libmariadb/COPYING.LIB
index 4e6f22bdddd14aab54267b3a6a1a4f3bc6a6f16e..829b98fb287242d0208fa7579351c528c91c3562 100644 (file)
@@ -1,6 +1,6 @@
 --- a/scripts/mysql_install_db.sh
 +++ b/scripts/mysql_install_db.sh
-@@ -383,7 +383,7 @@ fi
+@@ -388,7 +388,7 @@ fi
  
  
  # Try to determine the hostname
index b2c57941b187f2a9c20714ae98b45c2901c6c75e..fcd8fad33fea3625c341f0e84cff35799fb647e7 100644 (file)
@@ -49,11 +49,11 @@ config MC_CHARSET
 
 config MC_VFS
        bool "Enable virtual filesystem support"
-       default n
+       default y
        help
            This option enables the Virtual File System switch code to get
            transparent access to the following file systems:
-           cpio, tar, fish, sfs, ftp, sftp, extfs, smb.
-           Disabled by default.
+           cpio, tar, fish, sfs, ftp, sftp, extfs.
+           Enabled by default.
 
 endmenu
index ab3ae2b6813fa3a8bcb0fae8f91a20fe8df9807a..51384798c398d37918932120721cb56d8d67561b 100644 (file)
@@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=mc
 PKG_VERSION:=4.8.21
-PKG_RELEASE:=2
+PKG_RELEASE:=3
 PKG_MAINTAINER:=Dirk Brenken <dev@brenken.org>
 PKG_LICENSE:=GPL-3.0+
 
@@ -58,7 +58,6 @@ CONFIGURE_ARGS += \
        --disable-doxygen-doc \
        --with-homedir=/etc/mc \
        --with-screen=ncurses \
-       --without-gpm-mouse \
        --without-x \
 
 CONFIGURE_VARS += \
index 62c78a7563f707d7f383b85a589130c6af360166..c52e5803ab9b752c36513cc179610afbae6142e6 100644 (file)
@@ -8,14 +8,14 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=nano
-PKG_VERSION:=2.9.8
+PKG_VERSION:=3.1
 PKG_RELEASE:=1
 PKG_LICENSE:=GPL-3.0+
 PKG_LICENSE_FILES:=COPYING
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=@GNU/nano
-PKG_HASH:=c2deac31ba4d3fd27a42fafcc47ccf499296cc69a422bbecab63f2933ea85488
+PKG_HASH:=14c02ca40a5bc61c580ce2f9cb7f9fc72d5ccc9da17ad044f78f6fb3fdb7719e
 
 PKG_INSTALL:=1
 PKG_BUILD_PARALLEL:=1
diff --git a/utils/nano/patches/001-upstream-fix-for-3.1-tiny-compilation.patch b/utils/nano/patches/001-upstream-fix-for-3.1-tiny-compilation.patch
new file mode 100644 (file)
index 0000000..58fe198
--- /dev/null
@@ -0,0 +1,29 @@
+From 368ec04870a366b19f1c5801a6868786547968b0 Mon Sep 17 00:00:00 2001
+From: Benno Schulenberg <bensberg@telfort.nl>
+Date: Wed, 19 Sep 2018 20:36:39 +0200
+Subject: build: fix compilation again when configured with --enable-tiny
+
+Reported-by: Jordi Mallach <jordi@mallach.net>
+---
+ src/nano.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/src/nano.c b/src/nano.c
+index ebb1f11..01f92a1 100644
+--- a/src/nano.c
++++ b/src/nano.c
+@@ -1756,7 +1756,10 @@ int do_input(bool allow_funcs)
+       if (shortcut == NULL)
+               pletion_line = NULL;
+       else {
+-              if (ISSET(VIEW_MODE) && shortcut->func != do_toggle_void &&
++              if (ISSET(VIEW_MODE) &&
++#ifndef NANO_TINY
++                                                              shortcut->func != do_toggle_void &&
++#endif
+                                                               !okay_for_view(shortcut)) {
+                       print_view_warning();
+                       return ERR;
+-- 
+cgit v1.0-41-gc330
+
index 55b71687503b6a4d69b7c29e9e9f370207a17717..ebee904d63768a00694a9b8967b20287d7ffc398 100644 (file)
@@ -9,14 +9,19 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=oath-toolkit
 PKG_VERSION:=2.6.2
-PKG_RELEASE:=1
+PKG_RELEASE:=2
+
 PKG_SOURCE:=oath-toolkit-$(PKG_VERSION).tar.gz
-PKG_HASH:=b03446fa4b549af5ebe4d35d7aba51163442d255660558cd861ebce536824aa0
 PKG_SOURCE_URL:=@SAVANNAH/oath-toolkit
+PKG_HASH:=b03446fa4b549af5ebe4d35d7aba51163442d255660558cd861ebce536824aa0
+
+PKG_MAINTAINER:=Fam Zheng <fam@euphon.net>
 PKG_LICENSE:=LGPL-2.0+ GPL-3.0+
 PKG_LICENSE_FILES:=COPYING
+PKG_CPE_ID:=cpe:/a:nongnu:oath_toolkit
+
+PKG_BUILD_PARALLEL:=1
 PKG_INSTALL:=1
-PKG_MAINTAINER:=Fam Zheng <fam@euphon.net>
 
 include $(INCLUDE_DIR)/package.mk
 
diff --git a/utils/oath-toolkit/patches/oath-toolkit-2.6.2-build-fix.patch b/utils/oath-toolkit/patches/oath-toolkit-2.6.2-build-fix.patch
new file mode 100644 (file)
index 0000000..a2fc1ad
--- /dev/null
@@ -0,0 +1,874 @@
+diff --git a/liboath/gl/fflush.c b/liboath/gl/fflush.c
+index 3664842..a140b7a 100644
+--- a/liboath/gl/fflush.c
++++ b/liboath/gl/fflush.c
+@@ -1,18 +1,18 @@
+ /* fflush.c -- allow flushing input streams
+-   Copyright (C) 2007-2016 Free Software Foundation, Inc.
++   Copyright (C) 2007-2018 Free Software Foundation, Inc.
+    This program is free software: you can redistribute it and/or modify
+-   it under the terms of the GNU Lesser General Public License as published by
+-   the Free Software Foundation; either version 2.1 of the License, or
++   it under the terms of the GNU General Public License as published by
++   the Free Software Foundation; either version 3 of the License, or
+    (at your option) any later version.
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-   GNU Lesser General Public License for more details.
++   GNU General Public License for more details.
+-   You should have received a copy of the GNU Lesser General Public License
+-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
++   You should have received a copy of the GNU General Public License
++   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
+ /* Written by Eric Blake. */
+@@ -33,7 +33,8 @@
+ #undef fflush
+-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
++#if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1
++/* GNU libc, BeOS, Haiku, Linux libc5 */
+ /* Clear the stream's ungetc buffer, preserving the value of ftello (fp).  */
+ static void
+@@ -51,7 +52,7 @@ static void
+ clear_ungetc_buffer (FILE *fp)
+ {
+ # if defined __sferror || defined __DragonFly__ || defined __ANDROID__
+-  /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Android */
++  /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
+   if (HASUB (fp))
+     {
+       fp_->_p += fp_->_r;
+@@ -63,7 +64,7 @@ clear_ungetc_buffer (FILE *fp)
+       fp->_ungetc_count = 0;
+       fp->_rcount = - fp->_rcount;
+     }
+-# elif defined _IOERR               /* Minix, AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, NonStop Kernel */
++# elif defined _IOERR               /* Minix, AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, MSVC, NonStop Kernel, OpenVMS */
+   /* Nothing to do.  */
+ # else                              /* other implementations */
+   fseeko (fp, 0, SEEK_CUR);
+@@ -72,10 +73,11 @@ clear_ungetc_buffer (FILE *fp)
+ #endif
+-#if ! (defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */)
++#if ! (defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1)
++/* GNU libc, BeOS, Haiku, Linux libc5 */
+ # if (defined __sferror || defined __DragonFly__ || defined __ANDROID__) && defined __SNPT
+-/* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Android */
++/* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
+ static int
+ disable_seek_optimization (FILE *fp)
+@@ -98,7 +100,7 @@ update_fpos_cache (FILE *fp _GL_UNUSED_PARAMETER,
+                    off_t pos _GL_UNUSED_PARAMETER)
+ {
+ #  if defined __sferror || defined __DragonFly__ || defined __ANDROID__
+-  /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Android */
++  /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
+ #   if defined __CYGWIN__
+   /* fp_->_offset is typed as an integer.  */
+   fp_->_offset = pos;
+@@ -148,7 +150,8 @@ rpl_fflush (FILE *stream)
+   if (stream == NULL || ! freading (stream))
+     return fflush (stream);
+-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
++#if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1
++  /* GNU libc, BeOS, Haiku, Linux libc5 */
+   clear_ungetc_buffer_preserving_position (stream);
+@@ -199,7 +202,7 @@ rpl_fflush (FILE *stream)
+     }
+ # if (defined __sferror || defined __DragonFly__ || defined __ANDROID__) && defined __SNPT
+-    /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Android */
++    /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
+     {
+       /* Disable seek optimization for the next fseeko call.  This tells the
+diff --git a/liboath/gl/fpurge.c b/liboath/gl/fpurge.c
+index acf5905..f9c2d25 100644
+--- a/liboath/gl/fpurge.c
++++ b/liboath/gl/fpurge.c
+@@ -62,7 +62,7 @@ fpurge (FILE *fp)
+   /* Most systems provide FILE as a struct and the necessary bitmask in
+      <stdio.h>, because they need it for implementing getc() and putc() as
+      fast macros.  */
+-# if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
++# if defined _IO_ftrylockfile || __GNU_LIBRARY__ /* GNU libc, BeOS, Haiku, Linux libc5 */
+   fp->_IO_read_end = fp->_IO_read_ptr;
+   fp->_IO_write_ptr = fp->_IO_write_base;
+   /* Avoid memory leak when there is an active ungetc buffer.  */
+diff --git a/liboath/gl/freading.c b/liboath/gl/freading.c
+index 8ab19fd..54c3d5a 100644
+--- a/liboath/gl/freading.c
++++ b/liboath/gl/freading.c
+@@ -31,7 +31,7 @@ freading (FILE *fp)
+   /* Most systems provide FILE as a struct and the necessary bitmask in
+      <stdio.h>, because they need it for implementing getc() and putc() as
+      fast macros.  */
+-# if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
++# if defined _IO_ftrylockfile || __GNU_LIBRARY__ /* GNU libc, BeOS, Haiku, Linux libc5 */
+   return ((fp->_flags & _IO_NO_WRITES) != 0
+           || ((fp->_flags & (_IO_NO_READS | _IO_CURRENTLY_PUTTING)) == 0
+               && fp->_IO_read_base != NULL));
+diff --git a/liboath/gl/fseeko.c b/liboath/gl/fseeko.c
+index 67bb9ec..5616221 100644
+--- a/liboath/gl/fseeko.c
++++ b/liboath/gl/fseeko.c
+@@ -47,7 +47,7 @@ fseeko (FILE *fp, off_t offset, int whence)
+ #endif
+   /* These tests are based on fpurge.c.  */
+-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
++#if defined _IO_ftrylockfile || __GNU_LIBRARY__ /* GNU libc, BeOS, Haiku, Linux libc5 */
+   if (fp->_IO_read_end == fp->_IO_read_ptr
+       && fp->_IO_write_ptr == fp->_IO_write_base
+       && fp->_IO_save_base == NULL)
+@@ -123,7 +123,7 @@ fseeko (FILE *fp, off_t offset, int whence)
+           return -1;
+         }
+-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
++#if defined _IO_ftrylockfile || __GNU_LIBRARY__ /* GNU libc, BeOS, Haiku, Linux libc5 */
+       fp->_flags &= ~_IO_EOF_SEEN;
+       fp->_offset = pos;
+ #elif defined __sferror || defined __DragonFly__ || defined __ANDROID__
+diff --git a/liboath/gl/stdio-impl.h b/liboath/gl/stdio-impl.h
+index 4c02c9f..393ef0c 100644
+--- a/liboath/gl/stdio-impl.h
++++ b/liboath/gl/stdio-impl.h
+@@ -1,23 +1,29 @@
+ /* Implementation details of FILE streams.
+-   Copyright (C) 2007-2008, 2010-2016 Free Software Foundation, Inc.
++   Copyright (C) 2007-2008, 2010-2018 Free Software Foundation, Inc.
+    This program is free software: you can redistribute it and/or modify
+-   it under the terms of the GNU Lesser General Public License as published by
+-   the Free Software Foundation; either version 2.1 of the License, or
++   it under the terms of the GNU General Public License as published by
++   the Free Software Foundation; either version 3 of the License, or
+    (at your option) any later version.
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-   GNU Lesser General Public License for more details.
++   GNU General Public License for more details.
+-   You should have received a copy of the GNU Lesser General Public License
+-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
++   You should have received a copy of the GNU General Public License
++   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
+ /* Many stdio implementations have the same logic and therefore can share
+    the same implementation of stdio extension API, except that some fields
+    have different naming conventions, or their access requires some casts.  */
++/* Glibc 2.28 made _IO_IN_BACKUP private.  For now, work around this
++   problem by defining it ourselves.  FIXME: Do not rely on glibc
++   internals.  */
++#if !defined _IO_IN_BACKUP && defined _IO_EOF_SEEN
++# define _IO_IN_BACKUP 0x100
++#endif
+ /* BSD stdio derived implementations.  */
+@@ -29,10 +35,10 @@
+ #include <errno.h>                             /* For detecting Plan9.  */
+ #if defined __sferror || defined __DragonFly__ || defined __ANDROID__
+-  /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Android */
++  /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
+ # if defined __DragonFly__          /* DragonFly */
+-  /* See <http://www.dragonflybsd.org/cvsweb/src/lib/libc/stdio/priv_stdio.h?rev=HEAD&content-type=text/x-cvsweb-markup>.  */
++  /* See <https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/lib/libc/stdio/priv_stdio.h>.  */
+ #  define fp_ ((struct { struct __FILE_public pub; \
+                          struct { unsigned char *_base; int _size; } _bf; \
+                          void *cookie; \
+@@ -49,30 +55,84 @@
+                          fpos_t _offset; \
+                          /* More fields, not relevant here.  */ \
+                        } *) fp)
+-  /* See <http://www.dragonflybsd.org/cvsweb/src/include/stdio.h?rev=HEAD&content-type=text/x-cvsweb-markup>.  */
++  /* See <https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/include/stdio.h>.  */
+ #  define _p pub._p
+ #  define _flags pub._flags
+ #  define _r pub._r
+ #  define _w pub._w
++# elif defined __ANDROID__ /* Android */
++  /* Up to this commit from 2015-10-12
++     <https://android.googlesource.com/platform/bionic.git/+/f0141dfab10a4b332769d52fa76631a64741297a>
++     the innards of FILE were public, and fp_ub could be defined like for OpenBSD,
++     see <https://android.googlesource.com/platform/bionic.git/+/e78392637d5086384a5631ddfdfa8d7ec8326ee3/libc/stdio/fileext.h>
++     and <https://android.googlesource.com/platform/bionic.git/+/e78392637d5086384a5631ddfdfa8d7ec8326ee3/libc/stdio/local.h>.
++     After this commit, the innards of FILE are hidden.  */
++#  define fp_ ((struct { unsigned char *_p; \
++                         int _r; \
++                         int _w; \
++                         int _flags; \
++                         int _file; \
++                         struct { unsigned char *_base; size_t _size; } _bf; \
++                         int _lbfsize; \
++                         void *_cookie; \
++                         void *_close; \
++                         void *_read; \
++                         void *_seek; \
++                         void *_write; \
++                         struct { unsigned char *_base; size_t _size; } _ext; \
++                         unsigned char *_up; \
++                         int _ur; \
++                         unsigned char _ubuf[3]; \
++                         unsigned char _nbuf[1]; \
++                         struct { unsigned char *_base; size_t _size; } _lb; \
++                         int _blksize; \
++                         fpos_t _offset; \
++                         /* More fields, not relevant here.  */ \
++                       } *) fp)
+ # else
+ #  define fp_ fp
+ # endif
+-# if (defined __NetBSD__ && __NetBSD_Version__ >= 105270000) || defined __OpenBSD__ || defined __ANDROID__ /* NetBSD >= 1.5ZA, OpenBSD, Android */
++# if (defined __NetBSD__ && __NetBSD_Version__ >= 105270000) || defined __OpenBSD__ || defined __minix /* NetBSD >= 1.5ZA, OpenBSD, Minix 3 */
+   /* See <http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup>
+-     and <http://www.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup> */
++     and <https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup>
++     and <https://github.com/Stichting-MINIX-Research-Foundation/minix/blob/master/lib/libc/stdio/fileext.h> */
+   struct __sfileext
+     {
+       struct  __sbuf _ub; /* ungetc buffer */
+       /* More fields, not relevant here.  */
+     };
+ #  define fp_ub ((struct __sfileext *) fp->_ext._base)->_ub
+-# else                                         /* FreeBSD, NetBSD <= 1.5Z, DragonFly, Mac OS X, Cygwin, Android */
++# elif defined __ANDROID__                     /* Android */
++  struct __sfileext
++    {
++      struct { unsigned char *_base; size_t _size; } _ub; /* ungetc buffer */
++      /* More fields, not relevant here.  */
++    };
++#  define fp_ub ((struct __sfileext *) fp_->_ext._base)->_ub
++# else                                         /* FreeBSD, NetBSD <= 1.5Z, DragonFly, Mac OS X, Cygwin */
+ #  define fp_ub fp_->_ub
+ # endif
+ # define HASUB(fp) (fp_ub._base != NULL)
++# if defined __ANDROID__ /* Android */
++  /* Needed after this commit from 2016-01-25
++     <https://android.googlesource.com/platform/bionic.git/+/e70e0e9267d069bf56a5078c99307e08a7280de7> */
++#  ifndef __SEOF
++#   define __SLBF 1
++#   define __SNBF 2
++#   define __SRD 4
++#   define __SWR 8
++#   define __SRW 0x10
++#   define __SEOF 0x20
++#   define __SERR 0x40
++#  endif
++#  ifndef __SOFF
++#   define __SOFF 0x1000
++#  endif
++# endif
++
+ #endif
+@@ -81,7 +141,7 @@
+ #ifdef __TANDEM                     /* NonStop Kernel */
+ # ifndef _IOERR
+ /* These values were determined by the program 'stdioext-flags' at
+-   <http://lists.gnu.org/archive/html/bug-gnulib/2010-12/msg00165.html>.  */
++   <https://lists.gnu.org/r/bug-gnulib/2010-12/msg00165.html>.  */
+ #  define _IOERR   0x40
+ #  define _IOREAD  0x80
+ #  define _IOWRT    0x4
+@@ -99,6 +159,8 @@
+                          int _file; \
+                          unsigned int _flag; \
+                        } *) fp)
++# elif defined __VMS                /* OpenVMS */
++#  define fp_ ((struct _iobuf *) fp)
+ # else
+ #  define fp_ fp
+ # endif
+@@ -110,4 +172,31 @@
+ #  define _flag __flag
+ # endif
++#elif defined _WIN32 && ! defined __CYGWIN__  /* newer Windows with MSVC */
++
++/* <stdio.h> does not define the innards of FILE any more.  */
++# define WINDOWS_OPAQUE_FILE
++
++struct _gl_real_FILE
++{
++  /* Note: Compared to older Windows and to mingw, it has the fields
++     _base and _cnt swapped. */
++  unsigned char *_ptr;
++  unsigned char *_base;
++  int _cnt;
++  int _flag;
++  int _file;
++  int _charbuf;
++  int _bufsiz;
++};
++# define fp_ ((struct _gl_real_FILE *) fp)
++
++/* These values were determined by a program similar to the one at
++   <https://lists.gnu.org/r/bug-gnulib/2010-12/msg00165.html>.  */
++# define _IOREAD   0x1
++# define _IOWRT    0x2
++# define _IORW     0x4
++# define _IOEOF    0x8
++# define _IOERR   0x10
++
+ #endif
+diff --git a/libpskc/gl/intprops.h b/libpskc/gl/intprops.h
+index feb02c3..af456ff 100644
+--- a/libpskc/gl/intprops.h
++++ b/libpskc/gl/intprops.h
+@@ -1,6 +1,6 @@
+ /* intprops.h -- properties of integer types
+-   Copyright (C) 2001-2016 Free Software Foundation, Inc.
++   Copyright (C) 2001-2018 Free Software Foundation, Inc.
+    This program is free software: you can redistribute it and/or modify it
+    under the terms of the GNU Lesser General Public License as published
+@@ -13,7 +13,7 @@
+    GNU Lesser General Public License for more details.
+    You should have received a copy of the GNU Lesser General Public License
+-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
++   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
+ /* Written by Paul Eggert.  */
+@@ -21,13 +21,12 @@
+ #define _GL_INTPROPS_H
+ #include <limits.h>
+-#include <verify.h>
+ /* Return a value with the common real type of E and V and the value of V.  */
+ #define _GL_INT_CONVERT(e, v) (0 * (e) + (v))
+ /* Act like _GL_INT_CONVERT (E, -V) but work around a bug in IRIX 6.5 cc; see
+-   <http://lists.gnu.org/archive/html/bug-gnulib/2011-05/msg00406.html>.  */
++   <https://lists.gnu.org/r/bug-gnulib/2011-05/msg00406.html>.  */
+ #define _GL_INT_NEGATE_CONVERT(e, v) (0 * (e) - (v))
+ /* The extra casts in the following macros work around compiler bugs,
+@@ -47,12 +46,16 @@
+ /* Minimum and maximum values for integer types and expressions.  */
++/* The width in bits of the integer type or expression T.
++   Padding bits are not supported; this is checked at compile-time below.  */
++#define TYPE_WIDTH(t) (sizeof (t) * CHAR_BIT)
++
+ /* The maximum and minimum values for the integer type T.  */
+ #define TYPE_MINIMUM(t) ((t) ~ TYPE_MAXIMUM (t))
+ #define TYPE_MAXIMUM(t)                                                 \
+   ((t) (! TYPE_SIGNED (t)                                               \
+         ? (t) -1                                                        \
+-        : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1)))
++        : ((((t) 1 << (TYPE_WIDTH (t) - 2)) - 1) * 2 + 1)))
+ /* The maximum and minimum values for the type of the expression E,
+    after integer promotion.  E should not have side effects.  */
+@@ -65,29 +68,23 @@
+    ? _GL_SIGNED_INT_MAXIMUM (e)                                         \
+    : _GL_INT_NEGATE_CONVERT (e, 1))
+ #define _GL_SIGNED_INT_MAXIMUM(e)                                       \
+-  (((_GL_INT_CONVERT (e, 1) << (sizeof ((e) + 0) * CHAR_BIT - 2)) - 1) * 2 + 1)
++  (((_GL_INT_CONVERT (e, 1) << (TYPE_WIDTH ((e) + 0) - 2)) - 1) * 2 + 1)
++
++/* Work around OpenVMS incompatibility with C99.  */
++#if !defined LLONG_MAX && defined __INT64_MAX
++# define LLONG_MAX __INT64_MAX
++# define LLONG_MIN __INT64_MIN
++#endif
+ /* This include file assumes that signed types are two's complement without
+    padding bits; the above macros have undefined behavior otherwise.
+    If this is a problem for you, please let us know how to fix it for your host.
+-   As a sanity check, test the assumption for some signed types that
+-   <limits.h> bounds.  */
+-verify (TYPE_MINIMUM (signed char) == SCHAR_MIN);
+-verify (TYPE_MAXIMUM (signed char) == SCHAR_MAX);
+-verify (TYPE_MINIMUM (short int) == SHRT_MIN);
+-verify (TYPE_MAXIMUM (short int) == SHRT_MAX);
+-verify (TYPE_MINIMUM (int) == INT_MIN);
+-verify (TYPE_MAXIMUM (int) == INT_MAX);
+-verify (TYPE_MINIMUM (long int) == LONG_MIN);
+-verify (TYPE_MAXIMUM (long int) == LONG_MAX);
+-#ifdef LLONG_MAX
+-verify (TYPE_MINIMUM (long long int) == LLONG_MIN);
+-verify (TYPE_MAXIMUM (long long int) == LLONG_MAX);
+-#endif
++   This assumption is tested by the intprops-tests module.  */
+ /* Does the __typeof__ keyword work?  This could be done by
+    'configure', but for now it's easier to do it by hand.  */
+-#if (2 <= __GNUC__ || defined __IBM__TYPEOF__ \
++#if (2 <= __GNUC__ \
++     || (1210 <= __IBMC__ && defined __IBM__TYPEOF__) \
+      || (0x5110 <= __SUNPRO_C && !__STDC__))
+ # define _GL_HAVE___TYPEOF__ 1
+ #else
+@@ -116,8 +113,7 @@ verify (TYPE_MAXIMUM (long long int) == LLONG_MAX);
+    signed, this macro may overestimate the true bound by one byte when
+    applied to unsigned types of size 2, 4, 16, ... bytes.  */
+ #define INT_STRLEN_BOUND(t)                                     \
+-  (INT_BITS_STRLEN_BOUND (sizeof (t) * CHAR_BIT                 \
+-                          - _GL_SIGNED_TYPE_OR_EXPR (t))        \
++  (INT_BITS_STRLEN_BOUND (TYPE_WIDTH (t) - _GL_SIGNED_TYPE_OR_EXPR (t)) \
+    + _GL_SIGNED_TYPE_OR_EXPR (t))
+ /* Bound on buffer size needed to represent an integer type or expression T,
+@@ -183,7 +179,7 @@ verify (TYPE_MAXIMUM (long long int) == LLONG_MAX);
+ /* Return 1 if A * B would overflow in [MIN,MAX] arithmetic.
+    See above for restrictions.  Avoid && and || as they tickle
+    bugs in Sun C 5.11 2010/08/13 and other compilers; see
+-   <http://lists.gnu.org/archive/html/bug-gnulib/2011-05/msg00401.html>.  */
++   <https://lists.gnu.org/r/bug-gnulib/2011-05/msg00401.html>.  */
+ #define INT_MULTIPLY_RANGE_OVERFLOW(a, b, min, max)     \
+   ((b) < 0                                              \
+    ? ((a) < 0                                           \
+@@ -222,20 +218,27 @@ verify (TYPE_MAXIMUM (long long int) == LLONG_MAX);
+    ? (a) < (min) >> (b)                                 \
+    : (max) >> (b) < (a))
+-/* True if __builtin_add_overflow (A, B, P) works when P is null.  */
+-#define _GL_HAS_BUILTIN_OVERFLOW_WITH_NULL (7 <= __GNUC__)
++/* True if __builtin_add_overflow (A, B, P) works when P is non-null.  */
++#if 5 <= __GNUC__ && !defined __ICC
++# define _GL_HAS_BUILTIN_OVERFLOW 1
++#else
++# define _GL_HAS_BUILTIN_OVERFLOW 0
++#endif
++
++/* True if __builtin_add_overflow_p (A, B, C) works.  */
++#define _GL_HAS_BUILTIN_OVERFLOW_P (7 <= __GNUC__)
+ /* The _GL*_OVERFLOW macros have the same restrictions as the
+    *_RANGE_OVERFLOW macros, except that they do not assume that operands
+    (e.g., A and B) have the same type as MIN and MAX.  Instead, they assume
+    that the result (e.g., A + B) has that type.  */
+-#if _GL_HAS_BUILTIN_OVERFLOW_WITH_NULL
+-# define _GL_ADD_OVERFLOW(a, b, min, max)
+-   __builtin_add_overflow (a, b, (__typeof__ ((a) + (b)) *) 0)
+-# define _GL_SUBTRACT_OVERFLOW(a, b, min, max)
+-   __builtin_sub_overflow (a, b, (__typeof__ ((a) - (b)) *) 0)
+-# define _GL_MULTIPLY_OVERFLOW(a, b, min, max)
+-   __builtin_mul_overflow (a, b, (__typeof__ ((a) * (b)) *) 0)
++#if _GL_HAS_BUILTIN_OVERFLOW_P
++# define _GL_ADD_OVERFLOW(a, b, min, max)                               \
++   __builtin_add_overflow_p (a, b, (__typeof__ ((a) + (b))) 0)
++# define _GL_SUBTRACT_OVERFLOW(a, b, min, max)                          \
++   __builtin_sub_overflow_p (a, b, (__typeof__ ((a) - (b))) 0)
++# define _GL_MULTIPLY_OVERFLOW(a, b, min, max)                          \
++   __builtin_mul_overflow_p (a, b, (__typeof__ ((a) * (b))) 0)
+ #else
+ # define _GL_ADD_OVERFLOW(a, b, min, max)                                \
+    ((min) < 0 ? INT_ADD_RANGE_OVERFLOW (a, b, min, max)                  \
+@@ -315,7 +318,7 @@ verify (TYPE_MAXIMUM (long long int) == LLONG_MAX);
+   _GL_BINARY_OP_OVERFLOW (a, b, _GL_ADD_OVERFLOW)
+ #define INT_SUBTRACT_OVERFLOW(a, b) \
+   _GL_BINARY_OP_OVERFLOW (a, b, _GL_SUBTRACT_OVERFLOW)
+-#if _GL_HAS_BUILTIN_OVERFLOW_WITH_NULL
++#if _GL_HAS_BUILTIN_OVERFLOW_P
+ # define INT_NEGATE_OVERFLOW(a) INT_SUBTRACT_OVERFLOW (0, a)
+ #else
+ # define INT_NEGATE_OVERFLOW(a) \
+@@ -349,10 +352,6 @@ verify (TYPE_MAXIMUM (long long int) == LLONG_MAX);
+ #define INT_MULTIPLY_WRAPV(a, b, r) \
+   _GL_INT_OP_WRAPV (a, b, r, *, __builtin_mul_overflow, INT_MULTIPLY_OVERFLOW)
+-#ifndef __has_builtin
+-# define __has_builtin(x) 0
+-#endif
+-
+ /* Nonzero if this compiler has GCC bug 68193 or Clang bug 25390.  See:
+    https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68193
+    https://llvm.org/bugs/show_bug.cgi?id=25390
+@@ -369,17 +368,17 @@ verify (TYPE_MAXIMUM (long long int) == LLONG_MAX);
+    the operation.  BUILTIN is the builtin operation, and OVERFLOW the
+    overflow predicate.  Return 1 if the result overflows.  See above
+    for restrictions.  */
+-#if 5 <= __GNUC__ || __has_builtin (__builtin_add_overflow)
++#if _GL_HAS_BUILTIN_OVERFLOW
+ # define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) builtin (a, b, r)
+ #elif 201112 <= __STDC_VERSION__ && !_GL__GENERIC_BOGUS
+ # define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) \
+    (_Generic \
+     (*(r), \
+      signed char: \
+-       _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned char, \
++       _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
+                         signed char, SCHAR_MIN, SCHAR_MAX), \
+      short int: \
+-       _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned short int, \
++       _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
+                         short int, SHRT_MIN, SHRT_MAX), \
+      int: \
+        _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
+@@ -393,10 +392,10 @@ verify (TYPE_MAXIMUM (long long int) == LLONG_MAX);
+ #else
+ # define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) \
+    (sizeof *(r) == sizeof (signed char) \
+-    ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned char, \
++    ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
+                        signed char, SCHAR_MIN, SCHAR_MAX) \
+     : sizeof *(r) == sizeof (short int) \
+-    ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned short int, \
++    ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
+                        short int, SHRT_MIN, SHRT_MAX) \
+     : sizeof *(r) == sizeof (int) \
+     ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
+@@ -412,15 +411,14 @@ verify (TYPE_MAXIMUM (long long int) == LLONG_MAX);
+ # else
+ #  define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \
+     _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \
+-                     long int, LONG_MIN, LONG_MAX))
++                     long int, LONG_MIN, LONG_MAX)
+ # endif
+ #endif
+ /* Store the low-order bits of A <op> B into *R, where the operation
+    is given by OP.  Use the unsigned type UT for calculation to avoid
+-   overflow problems.  *R's type is T, with extremal values TMIN and
+-   TMAX.  T must be a signed integer type.  Return 1 if the result
+-   overflows.  */
++   overflow problems.  *R's type is T, with extrema TMIN and TMAX.
++   T must be a signed integer type.  Return 1 if the result overflows.  */
+ #define _GL_INT_OP_CALC(a, b, r, op, overflow, ut, t, tmin, tmax) \
+   (sizeof ((a) op (b)) < sizeof (t) \
+    ? _GL_INT_OP_CALC1 ((t) (a), (t) (b), r, op, overflow, ut, t, tmin, tmax) \
+@@ -429,17 +427,27 @@ verify (TYPE_MAXIMUM (long long int) == LLONG_MAX);
+   ((overflow (a, b) \
+     || (EXPR_SIGNED ((a) op (b)) && ((a) op (b)) < (tmin)) \
+     || (tmax) < ((a) op (b))) \
+-   ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t, tmin, tmax), 1) \
+-   : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t, tmin, tmax), 0))
+-
+-/* Return A <op> B, where the operation is given by OP.  Use the
+-   unsigned type UT for calculation to avoid overflow problems.
+-   Convert the result to type T without overflow by subtracting TMIN
+-   from large values before converting, and adding it afterwards.
+-   Compilers can optimize all the operations except OP.  */
+-#define _GL_INT_OP_WRAPV_VIA_UNSIGNED(a, b, op, ut, t, tmin, tmax) \
+-  (((ut) (a) op (ut) (b)) <= (tmax) \
+-   ? (t) ((ut) (a) op (ut) (b)) \
+-   : ((t) (((ut) (a) op (ut) (b)) - (tmin)) + (tmin)))
++   ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 1) \
++   : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 0))
++
++/* Return the low-order bits of A <op> B, where the operation is given
++   by OP.  Use the unsigned type UT for calculation to avoid undefined
++   behavior on signed integer overflow, and convert the result to type T.
++   UT is at least as wide as T and is no narrower than unsigned int,
++   T is two's complement, and there is no padding or trap representations.
++   Assume that converting UT to T yields the low-order bits, as is
++   done in all known two's-complement C compilers.  E.g., see:
++   https://gcc.gnu.org/onlinedocs/gcc/Integers-implementation.html
++
++   According to the C standard, converting UT to T yields an
++   implementation-defined result or signal for values outside T's
++   range.  However, code that works around this theoretical problem
++   runs afoul of a compiler bug in Oracle Studio 12.3 x86.  See:
++   https://lists.gnu.org/r/bug-gnulib/2017-04/msg00049.html
++   As the compiler bug is real, don't try to work around the
++   theoretical problem.  */
++
++#define _GL_INT_OP_WRAPV_VIA_UNSIGNED(a, b, op, ut, t) \
++  ((t) ((ut) (a) op (ut) (b)))
+ #endif /* _GL_INTPROPS_H */
+diff --git a/oathtool/gl/intprops.h b/oathtool/gl/intprops.h
+index e1fce5c..af456ff 100644
+--- a/oathtool/gl/intprops.h
++++ b/oathtool/gl/intprops.h
+@@ -1,19 +1,19 @@
+ /* intprops.h -- properties of integer types
+-   Copyright (C) 2001-2016 Free Software Foundation, Inc.
++   Copyright (C) 2001-2018 Free Software Foundation, Inc.
+    This program is free software: you can redistribute it and/or modify it
+-   under the terms of the GNU General Public License as published
+-   by the Free Software Foundation; either version 3 of the License, or
++   under the terms of the GNU Lesser General Public License as published
++   by the Free Software Foundation; either version 2.1 of the License, or
+    (at your option) any later version.
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-   GNU General Public License for more details.
++   GNU Lesser General Public License for more details.
+-   You should have received a copy of the GNU General Public License
+-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
++   You should have received a copy of the GNU Lesser General Public License
++   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
+ /* Written by Paul Eggert.  */
+@@ -21,13 +21,12 @@
+ #define _GL_INTPROPS_H
+ #include <limits.h>
+-#include <verify.h>
+ /* Return a value with the common real type of E and V and the value of V.  */
+ #define _GL_INT_CONVERT(e, v) (0 * (e) + (v))
+ /* Act like _GL_INT_CONVERT (E, -V) but work around a bug in IRIX 6.5 cc; see
+-   <http://lists.gnu.org/archive/html/bug-gnulib/2011-05/msg00406.html>.  */
++   <https://lists.gnu.org/r/bug-gnulib/2011-05/msg00406.html>.  */
+ #define _GL_INT_NEGATE_CONVERT(e, v) (0 * (e) - (v))
+ /* The extra casts in the following macros work around compiler bugs,
+@@ -47,12 +46,16 @@
+ /* Minimum and maximum values for integer types and expressions.  */
++/* The width in bits of the integer type or expression T.
++   Padding bits are not supported; this is checked at compile-time below.  */
++#define TYPE_WIDTH(t) (sizeof (t) * CHAR_BIT)
++
+ /* The maximum and minimum values for the integer type T.  */
+ #define TYPE_MINIMUM(t) ((t) ~ TYPE_MAXIMUM (t))
+ #define TYPE_MAXIMUM(t)                                                 \
+   ((t) (! TYPE_SIGNED (t)                                               \
+         ? (t) -1                                                        \
+-        : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1)))
++        : ((((t) 1 << (TYPE_WIDTH (t) - 2)) - 1) * 2 + 1)))
+ /* The maximum and minimum values for the type of the expression E,
+    after integer promotion.  E should not have side effects.  */
+@@ -65,29 +68,23 @@
+    ? _GL_SIGNED_INT_MAXIMUM (e)                                         \
+    : _GL_INT_NEGATE_CONVERT (e, 1))
+ #define _GL_SIGNED_INT_MAXIMUM(e)                                       \
+-  (((_GL_INT_CONVERT (e, 1) << (sizeof ((e) + 0) * CHAR_BIT - 2)) - 1) * 2 + 1)
++  (((_GL_INT_CONVERT (e, 1) << (TYPE_WIDTH ((e) + 0) - 2)) - 1) * 2 + 1)
++
++/* Work around OpenVMS incompatibility with C99.  */
++#if !defined LLONG_MAX && defined __INT64_MAX
++# define LLONG_MAX __INT64_MAX
++# define LLONG_MIN __INT64_MIN
++#endif
+ /* This include file assumes that signed types are two's complement without
+    padding bits; the above macros have undefined behavior otherwise.
+    If this is a problem for you, please let us know how to fix it for your host.
+-   As a sanity check, test the assumption for some signed types that
+-   <limits.h> bounds.  */
+-verify (TYPE_MINIMUM (signed char) == SCHAR_MIN);
+-verify (TYPE_MAXIMUM (signed char) == SCHAR_MAX);
+-verify (TYPE_MINIMUM (short int) == SHRT_MIN);
+-verify (TYPE_MAXIMUM (short int) == SHRT_MAX);
+-verify (TYPE_MINIMUM (int) == INT_MIN);
+-verify (TYPE_MAXIMUM (int) == INT_MAX);
+-verify (TYPE_MINIMUM (long int) == LONG_MIN);
+-verify (TYPE_MAXIMUM (long int) == LONG_MAX);
+-#ifdef LLONG_MAX
+-verify (TYPE_MINIMUM (long long int) == LLONG_MIN);
+-verify (TYPE_MAXIMUM (long long int) == LLONG_MAX);
+-#endif
++   This assumption is tested by the intprops-tests module.  */
+ /* Does the __typeof__ keyword work?  This could be done by
+    'configure', but for now it's easier to do it by hand.  */
+-#if (2 <= __GNUC__ || defined __IBM__TYPEOF__ \
++#if (2 <= __GNUC__ \
++     || (1210 <= __IBMC__ && defined __IBM__TYPEOF__) \
+      || (0x5110 <= __SUNPRO_C && !__STDC__))
+ # define _GL_HAVE___TYPEOF__ 1
+ #else
+@@ -116,8 +113,7 @@ verify (TYPE_MAXIMUM (long long int) == LLONG_MAX);
+    signed, this macro may overestimate the true bound by one byte when
+    applied to unsigned types of size 2, 4, 16, ... bytes.  */
+ #define INT_STRLEN_BOUND(t)                                     \
+-  (INT_BITS_STRLEN_BOUND (sizeof (t) * CHAR_BIT                 \
+-                          - _GL_SIGNED_TYPE_OR_EXPR (t))        \
++  (INT_BITS_STRLEN_BOUND (TYPE_WIDTH (t) - _GL_SIGNED_TYPE_OR_EXPR (t)) \
+    + _GL_SIGNED_TYPE_OR_EXPR (t))
+ /* Bound on buffer size needed to represent an integer type or expression T,
+@@ -183,7 +179,7 @@ verify (TYPE_MAXIMUM (long long int) == LLONG_MAX);
+ /* Return 1 if A * B would overflow in [MIN,MAX] arithmetic.
+    See above for restrictions.  Avoid && and || as they tickle
+    bugs in Sun C 5.11 2010/08/13 and other compilers; see
+-   <http://lists.gnu.org/archive/html/bug-gnulib/2011-05/msg00401.html>.  */
++   <https://lists.gnu.org/r/bug-gnulib/2011-05/msg00401.html>.  */
+ #define INT_MULTIPLY_RANGE_OVERFLOW(a, b, min, max)     \
+   ((b) < 0                                              \
+    ? ((a) < 0                                           \
+@@ -222,20 +218,27 @@ verify (TYPE_MAXIMUM (long long int) == LLONG_MAX);
+    ? (a) < (min) >> (b)                                 \
+    : (max) >> (b) < (a))
+-/* True if __builtin_add_overflow (A, B, P) works when P is null.  */
+-#define _GL_HAS_BUILTIN_OVERFLOW_WITH_NULL (7 <= __GNUC__)
++/* True if __builtin_add_overflow (A, B, P) works when P is non-null.  */
++#if 5 <= __GNUC__ && !defined __ICC
++# define _GL_HAS_BUILTIN_OVERFLOW 1
++#else
++# define _GL_HAS_BUILTIN_OVERFLOW 0
++#endif
++
++/* True if __builtin_add_overflow_p (A, B, C) works.  */
++#define _GL_HAS_BUILTIN_OVERFLOW_P (7 <= __GNUC__)
+ /* The _GL*_OVERFLOW macros have the same restrictions as the
+    *_RANGE_OVERFLOW macros, except that they do not assume that operands
+    (e.g., A and B) have the same type as MIN and MAX.  Instead, they assume
+    that the result (e.g., A + B) has that type.  */
+-#if _GL_HAS_BUILTIN_OVERFLOW_WITH_NULL
+-# define _GL_ADD_OVERFLOW(a, b, min, max)
+-   __builtin_add_overflow (a, b, (__typeof__ ((a) + (b)) *) 0)
+-# define _GL_SUBTRACT_OVERFLOW(a, b, min, max)
+-   __builtin_sub_overflow (a, b, (__typeof__ ((a) - (b)) *) 0)
+-# define _GL_MULTIPLY_OVERFLOW(a, b, min, max)
+-   __builtin_mul_overflow (a, b, (__typeof__ ((a) * (b)) *) 0)
++#if _GL_HAS_BUILTIN_OVERFLOW_P
++# define _GL_ADD_OVERFLOW(a, b, min, max)                               \
++   __builtin_add_overflow_p (a, b, (__typeof__ ((a) + (b))) 0)
++# define _GL_SUBTRACT_OVERFLOW(a, b, min, max)                          \
++   __builtin_sub_overflow_p (a, b, (__typeof__ ((a) - (b))) 0)
++# define _GL_MULTIPLY_OVERFLOW(a, b, min, max)                          \
++   __builtin_mul_overflow_p (a, b, (__typeof__ ((a) * (b))) 0)
+ #else
+ # define _GL_ADD_OVERFLOW(a, b, min, max)                                \
+    ((min) < 0 ? INT_ADD_RANGE_OVERFLOW (a, b, min, max)                  \
+@@ -315,7 +318,7 @@ verify (TYPE_MAXIMUM (long long int) == LLONG_MAX);
+   _GL_BINARY_OP_OVERFLOW (a, b, _GL_ADD_OVERFLOW)
+ #define INT_SUBTRACT_OVERFLOW(a, b) \
+   _GL_BINARY_OP_OVERFLOW (a, b, _GL_SUBTRACT_OVERFLOW)
+-#if _GL_HAS_BUILTIN_OVERFLOW_WITH_NULL
++#if _GL_HAS_BUILTIN_OVERFLOW_P
+ # define INT_NEGATE_OVERFLOW(a) INT_SUBTRACT_OVERFLOW (0, a)
+ #else
+ # define INT_NEGATE_OVERFLOW(a) \
+@@ -349,10 +352,6 @@ verify (TYPE_MAXIMUM (long long int) == LLONG_MAX);
+ #define INT_MULTIPLY_WRAPV(a, b, r) \
+   _GL_INT_OP_WRAPV (a, b, r, *, __builtin_mul_overflow, INT_MULTIPLY_OVERFLOW)
+-#ifndef __has_builtin
+-# define __has_builtin(x) 0
+-#endif
+-
+ /* Nonzero if this compiler has GCC bug 68193 or Clang bug 25390.  See:
+    https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68193
+    https://llvm.org/bugs/show_bug.cgi?id=25390
+@@ -369,17 +368,17 @@ verify (TYPE_MAXIMUM (long long int) == LLONG_MAX);
+    the operation.  BUILTIN is the builtin operation, and OVERFLOW the
+    overflow predicate.  Return 1 if the result overflows.  See above
+    for restrictions.  */
+-#if 5 <= __GNUC__ || __has_builtin (__builtin_add_overflow)
++#if _GL_HAS_BUILTIN_OVERFLOW
+ # define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) builtin (a, b, r)
+ #elif 201112 <= __STDC_VERSION__ && !_GL__GENERIC_BOGUS
+ # define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) \
+    (_Generic \
+     (*(r), \
+      signed char: \
+-       _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned char, \
++       _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
+                         signed char, SCHAR_MIN, SCHAR_MAX), \
+      short int: \
+-       _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned short int, \
++       _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
+                         short int, SHRT_MIN, SHRT_MAX), \
+      int: \
+        _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
+@@ -393,10 +392,10 @@ verify (TYPE_MAXIMUM (long long int) == LLONG_MAX);
+ #else
+ # define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) \
+    (sizeof *(r) == sizeof (signed char) \
+-    ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned char, \
++    ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
+                        signed char, SCHAR_MIN, SCHAR_MAX) \
+     : sizeof *(r) == sizeof (short int) \
+-    ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned short int, \
++    ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
+                        short int, SHRT_MIN, SHRT_MAX) \
+     : sizeof *(r) == sizeof (int) \
+     ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
+@@ -412,15 +411,14 @@ verify (TYPE_MAXIMUM (long long int) == LLONG_MAX);
+ # else
+ #  define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \
+     _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \
+-                     long int, LONG_MIN, LONG_MAX))
++                     long int, LONG_MIN, LONG_MAX)
+ # endif
+ #endif
+ /* Store the low-order bits of A <op> B into *R, where the operation
+    is given by OP.  Use the unsigned type UT for calculation to avoid
+-   overflow problems.  *R's type is T, with extremal values TMIN and
+-   TMAX.  T must be a signed integer type.  Return 1 if the result
+-   overflows.  */
++   overflow problems.  *R's type is T, with extrema TMIN and TMAX.
++   T must be a signed integer type.  Return 1 if the result overflows.  */
+ #define _GL_INT_OP_CALC(a, b, r, op, overflow, ut, t, tmin, tmax) \
+   (sizeof ((a) op (b)) < sizeof (t) \
+    ? _GL_INT_OP_CALC1 ((t) (a), (t) (b), r, op, overflow, ut, t, tmin, tmax) \
+@@ -429,17 +427,27 @@ verify (TYPE_MAXIMUM (long long int) == LLONG_MAX);
+   ((overflow (a, b) \
+     || (EXPR_SIGNED ((a) op (b)) && ((a) op (b)) < (tmin)) \
+     || (tmax) < ((a) op (b))) \
+-   ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t, tmin, tmax), 1) \
+-   : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t, tmin, tmax), 0))
+-
+-/* Return A <op> B, where the operation is given by OP.  Use the
+-   unsigned type UT for calculation to avoid overflow problems.
+-   Convert the result to type T without overflow by subtracting TMIN
+-   from large values before converting, and adding it afterwards.
+-   Compilers can optimize all the operations except OP.  */
+-#define _GL_INT_OP_WRAPV_VIA_UNSIGNED(a, b, op, ut, t, tmin, tmax) \
+-  (((ut) (a) op (ut) (b)) <= (tmax) \
+-   ? (t) ((ut) (a) op (ut) (b)) \
+-   : ((t) (((ut) (a) op (ut) (b)) - (tmin)) + (tmin)))
++   ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 1) \
++   : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 0))
++
++/* Return the low-order bits of A <op> B, where the operation is given
++   by OP.  Use the unsigned type UT for calculation to avoid undefined
++   behavior on signed integer overflow, and convert the result to type T.
++   UT is at least as wide as T and is no narrower than unsigned int,
++   T is two's complement, and there is no padding or trap representations.
++   Assume that converting UT to T yields the low-order bits, as is
++   done in all known two's-complement C compilers.  E.g., see:
++   https://gcc.gnu.org/onlinedocs/gcc/Integers-implementation.html
++
++   According to the C standard, converting UT to T yields an
++   implementation-defined result or signal for values outside T's
++   range.  However, code that works around this theoretical problem
++   runs afoul of a compiler bug in Oracle Studio 12.3 x86.  See:
++   https://lists.gnu.org/r/bug-gnulib/2017-04/msg00049.html
++   As the compiler bug is real, don't try to work around the
++   theoretical problem.  */
++
++#define _GL_INT_OP_WRAPV_VIA_UNSIGNED(a, b, op, ut, t) \
++  ((t) ((ut) (a) op (ut) (b)))
+ #endif /* _GL_INTPROPS_H */
index 3872c455cfbca9ec969d048251e9a30ecaa42a2e..dc8cf38ec48926855aa33683955da07b3fc206e4 100644 (file)
@@ -9,13 +9,13 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=picocom
 PKG_VERSION:=3.1
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://codeload.github.com/npat-efault/picocom/tar.gz/$(PKG_VERSION)?
 PKG_HASH:=e6761ca932ffc6d09bd6b11ff018bdaf70b287ce518b3282d29e0270e88420bb
 
-PKG_MAINTAINER:=Steven Barth <cyrus@openwrt.org>
+PKG_MAINTAINER:=Rosen Penev <rosenp@gmail.com>
 PKG_LICENSE:=GPL-2.0+
 
 include $(INCLUDE_DIR)/package.mk
diff --git a/utils/picocom/patches/020-fix-compile-x86.patch b/utils/picocom/patches/020-fix-compile-x86.patch
new file mode 100644 (file)
index 0000000..3cc3291
--- /dev/null
@@ -0,0 +1,44 @@
+From 6fad89a36968fe1bf6aed63f44b7e2e375271e76 Mon Sep 17 00:00:00 2001
+From: Nick Patavalis <npat@efault.net>
+Date: Thu, 12 Apr 2018 15:16:04 +0300
+Subject: [PATCH] Compile with libc's without cispeed / cospeed
+
+Some libc implementations (e.g. musl) do not define the cispeed and
+cospeed struct termios fields. So we have to check the
+_HAVE_STRUCT_TERMIOS_C_ISPEED and _HAVE_STRUCT_TERMIOS_C_OSPEED
+macros. If not defined, we disable custom baudrate support.
+---
+ custbaud.h | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/custbaud.h b/custbaud.h
+index 48151a4..ae4ae8d 100644
+--- a/custbaud.h
++++ b/custbaud.h
+@@ -26,6 +26,8 @@
+ #ifndef CUSTBAUD_H
+ #define CUSTBAUD_H
++#include <termios.h>
++
+ #ifndef NO_CUSTOM_BAUD
+ #if defined (__linux__)
+@@ -33,7 +35,13 @@
+ /* Enable by-default for kernels > 2.6.0 on x86 and x86_64 only */
+ #include <linux/version.h>
+ #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0)
+-#if defined (__i386__) || defined (__x86_64__) || defined (USE_CUSTOM_BAUD)
++/* Some libc implementations (e.g. musl) do not define the cispeed and
++   cospeed struct termios fields. We do not support custom baudrates
++   on them. */
++#if ( (defined (__i386__) || defined (__x86_64__))  \
++      && defined (_HAVE_STRUCT_TERMIOS_C_ISPEED)    \
++      && defined (_HAVE_STRUCT_TERMIOS_C_OSPEED) )  \
++    || defined (USE_CUSTOM_BAUD)
+ #ifndef USE_CUSTOM_BAUD
+ #define USE_CUSTOM_BAUD
+ #endif
+-- 
+2.19.1
+
index f302c2693b181de8769e24ed21166378067ea63b..3f389282598a11079f3ac6a6221213ed1c7409b4 100644 (file)
@@ -8,19 +8,16 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=procps-ng
-PKG_VERSION:=3.3.11
-PKG_RELEASE:=4
-PKG_LICENSE:=GPL-2.0
-PKG_LICENSE_FILES:=COPYING COPYING.LIB
+PKG_VERSION:=3.3.15
+PKG_RELEASE:=1
 
-PKG_SOURCE_PROTO:=git
-PKG_SOURCE_URL:=https://gitlab.com/procps-ng/procps.git
-PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=8a198e3eafbde0b627e9992b41d26e6762e4f8c7
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
-PKG_MIRROR_HASH:=60da7bd78e834112494e4019998c9de8d61f747eab244ef3c42cadc7fd0958cc
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
+PKG_SOURCE_URL:=@SF/procps-ng
+PKG_HASH:=10bd744ffcb3de2d591d2f6acf1a54a7ba070fdcc432a855931a5057149f0465
 
 PKG_MAINTAINER:=Gergely Kiss <mail.gery@gmail.com>
+PKG_LICENSE:=GPL-2.0
+PKG_LICENSE_FILES:=COPYING COPYING.LIB
 
 PKG_BUILD_PARALLEL:=1
 PKG_INSTALL:=1
index 50ef7fbf67fb6b43e8a942a929d4551836102948..3ae60ace8cbf87baa041041c5b503b81365734b5 100644 (file)
@@ -1,6 +1,6 @@
 --- a/Makefile.am
 +++ b/Makefile.am
-@@ -13,10 +13,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
+@@ -14,10 +14,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
  
  ACLOCAL_AMFLAGS = -I m4
  SUBDIRS = \
@@ -14,7 +14,7 @@
  LDADD = ./proc/libprocps.la $(CYGWINFLAGS)
 --- a/configure.ac
 +++ b/configure.ac
-@@ -256,8 +256,5 @@ AC_CHECK_FUNCS([__fpending alarm atexit
+@@ -292,8 +292,5 @@ AC_CHECK_FUNCS([__fpending alarm atexit dup2 gethostname getpagesize gettimeofda
  
  AC_CONFIG_FILES([Makefile
                   include/Makefile
old mode 100755 (executable)
new mode 100644 (file)
index 5e9f708..b34cef6
@@ -8,13 +8,14 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=rtty
-PKG_VERSION:=5.1.0
-PKG_RELEASE:=2
+PKG_VERSION:=6.3.1
+PKG_RELEASE:=1
 
-PKG_SOURCE_PROTO:=git
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_VERSION:=v$(PKG_VERSION)
-PKG_SOURCE_URL=https://github.com/zhaojh329/rtty.git
-PKG_MIRROR_HASH:=0d81595305abae252b2914e53d0aa8e64de433357c147fd6391363a223c694d8
+PKG_SOURCE_URL=https://codeload.github.com/zhaojh329/rtty/tar.gz/v$(PKG_VERSION)?
+PKG_HASH:=1dd7852cd5a3615134dc1c6266157072652592bda847b44cc747ccfcaa27ce2f
+CMAKE_INSTALL:=1
 
 PKG_BUILD_DIR=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_SOURCE_SUBDIR)
 
@@ -26,68 +27,30 @@ PKG_MAINTAINER:=Jianhui Zhao <jianhuizhao329@gmail.com>
 include $(INCLUDE_DIR)/package.mk
 include $(INCLUDE_DIR)/cmake.mk
 
-define Package/rtty/default
+define Package/rtty/Default
+  TITLE:=Access your terminals from anywhere via the web
   SECTION:=utils
   CATEGORY:=Utilities
   SUBMENU:=Terminal
-  TITLE:=A reverse proxy WebTTY
-  DEPENDS:=+libprotobuf-c
+  URL:=https://github.com/zhaojh329/rtty
+  DEPENDS:=$(2)
+  VARIANT:=$(1)
+  PROVIDES:=rtty
 endef
 
-define Package/rtty/default/description
-A reverse proxy WebTTY. This is the client part running on devices to be managed.
-endef
-
-define Package/rtty-nossl
-  $(Package/rtty/default)
-  TITLE += (NO SSL)
-  DEPENDS += +libuwsc-nossl
-  VARIANT:=nossl
-  CONFLICTS:=rtty-openssl rtty-wolfssl rtty-mbedtls
-endef
-
-define Package/rtty-openssl
-  $(Package/rtty/default)
-  TITLE += (openssl)
-  DEPENDS += +libuwsc-openssl
-  VARIANT:=openssl
-  CONFLICTS:=rtty-wolfssl rtty-mbedtls
-endef
-
-define Package/rtty-wolfssl
-  $(Package/rtty/default)
-  TITLE += (wolfssl)
-  DEPENDS += +libuwsc-wolfssl
-  VARIANT:=wolfssl
-  CONFLICTS:=rtty-mbedtls
-endef
-
-define Package/rtty-mbedtls
-  $(Package/rtty/default)
-  TITLE += (mbedtls)
-  DEPENDS += +libuwsc-mbedtls
-  VARIANT:=mbedtls
-endef
+Package/rtty-openssl=$(call Package/rtty/Default,openssl,+PACKAGE_rtty-openssl:libuwsc-openssl)
+Package/rtty-wolfssl=$(call Package/rtty/Default,wolfssl,+PACKAGE_rtty-wolfssl:libuwsc-wolfssl)
+Package/rtty-mbedtls=$(call Package/rtty/Default,mbedtls,+PACKAGE_rtty-mbedtls:libuwsc-mbedtls)
+Package/rtty-nossl=$(call Package/rtty/Default,nossl,+PACKAGE_rtty-nossl:libuwsc-nossl)
 
-Package/rtty-nossl/description = $(Package/rtty/default/description)
-Package/rtty-openssl/description = $(Package/rtty/default/description)
-Package/rtty-wolfssl/description = $(Package/rtty/default/description)
-Package/rtty-mbedtls/description = $(Package/rtty/default/description)
-
-define Package/rtty/default/install
+define Package/rtty-$(BUILD_VARIANT)/install
        $(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/init.d $(1)/etc/config
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/rtty $(1)/usr/sbin
        $(INSTALL_BIN) ./files/rtty.init $(1)/etc/init.d/rtty
        $(INSTALL_CONF) ./files/rtty.config $(1)/etc/config/rtty
 endef
 
-Package/rtty-nossl/install = $(Package/rtty/default/install)
-Package/rtty-openssl/install = $(Package/rtty/default/install)
-Package/rtty-wolfssl/install = $(Package/rtty/default/install)
-Package/rtty-mbedtls/install = $(Package/rtty/default/install)
-
-$(eval $(call BuildPackage,rtty-nossl))
-$(eval $(call BuildPackage,rtty-mbedtls))
-$(eval $(call BuildPackage,rtty-wolfssl))
 $(eval $(call BuildPackage,rtty-openssl))
-
+$(eval $(call BuildPackage,rtty-wolfssl))
+$(eval $(call BuildPackage,rtty-mbedtls))
+$(eval $(call BuildPackage,rtty-nossl))
index dd8694a0f1c7c74d8f2982119a03a9a142596e88..dfa2aa33d7c466b0ebdabba9e0c168df3f42b2b1 100644 (file)
@@ -10,4 +10,4 @@
 #   option  host        'your-server-host'  # Server host
 #   option  port        '5912'              # Server Port
 #   option  ssl         1                   # Whether to use ssl
-#   option  ping        5                   # heartbeat interval(second)
+#   option  keepalive   5                   # keep alive in seconds for this client
index f5c2231a3f6a0f709de89ff997058e83b5e97763..130b4029d90d3f6a0528eb79c86c3d68f49c1ef4 100644 (file)
@@ -18,7 +18,7 @@ start_rtty() {
         'host:host' \
         'port:port' \
         'ssl:bool:0' \
-        'ping:uinteger:5'
+        'keepalive:uinteger:5'
     
     [ $? -ne 0 ] && {
         echo "validation failed" >&2
@@ -43,7 +43,7 @@ start_rtty() {
     }
 
     procd_open_instance
-    procd_set_param command $BIN -h $host -p $port -a -P $ping
+    procd_set_param command $BIN -h $host -p $port -a -k $keepalive
     [ -n "$ifname" ] && procd_append_param command -i "$ifname"
     [ -n "$id" ] && procd_append_param command -I "$id"
     [ -n "$description" ] && procd_append_param command -d "$description"
index caccb4523ff03f795d54604006eaba2b34923a2d..f4077c3a14f3b716a44e4002cb01058bfe7cce97 100644 (file)
@@ -18,6 +18,7 @@ PKG_HASH:=293747bf37275c424ebb2c833f8588601a60b2f9653945d5a3194875355e36c9
 PKG_MAINTAINER:=Luiz Angelo Daros de Luca <luizluca@gmail.com>
 PKG_LICENSE:=GPL-2.0 GPL-2.0+
 PKG_LICENSE_FILES:=COPYING LICENSE
+PKG_CPE_ID:=cpe:/a:sane-backends_project:sane-backends
 
 PKG_INSTALL:=1
 
index 0a7be5a691c3c3d780b0de06195aca586df3fb52..8279d3e13e8f91249887b254b4d217332c483a7a 100644 (file)
@@ -2,6 +2,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=setserial
 PKG_VERSION:=2.17
+PKG_RELEASE:=2
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=@SF/setserial
diff --git a/utils/setserial/patches/010-no-docs.patch b/utils/setserial/patches/010-no-docs.patch
new file mode 100644 (file)
index 0000000..1fc2473
--- /dev/null
@@ -0,0 +1,13 @@
+diff --git a/Makefile.in b/Makefile.in
+index 00b9eb1..2fdbae3 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -17,7 +17,7 @@ DEFS = @DEFS@
+ INCS = -I.
+ TAR = tar
+-all: setserial setserial.cat
++all: setserial
+ setserial: setserial.c
+       $(CC) $(CFLAGS) $(DEFS) $(INCS) setserial.c -o setserial
index 3ab40d9a3c3462e915b7e336a18b983be0ffa13b..8e9e31197c6f34dcf058a7ff0ab29554e2696e6e 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=shadow
-PKG_VERSION:=4.2.1
-PKG_RELEASE:=8
+PKG_VERSION:=4.6
+PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
-PKG_SOURCE_URL:=http://pkg-shadow.alioth.debian.org/releases
-PKG_HASH:=3b0893d1476766868cd88920f4f1231c4795652aa407569faff802bcda0f3d41
+PKG_SOURCE_URL:=https://github.com/shadow-maint/shadow/releases/download/$(PKG_VERSION)
+PKG_HASH:=0998c8d84242a231ab0acb7f8613927ff5bcff095f8aa6b79478893a03f05583
 PKG_MAINTAINER:=Steven Barth <cyrus@openwrt.org>
 PKG_LICENSE:=BSD-3-Clause
 
@@ -44,7 +44,7 @@ define Package/shadow/Default
   SECTION:=utils
   CATEGORY:=Utilities
   TITLE:=The PLD Linux shadow utilities
-  URL:=http://pkg-shadow.alioth.debian.org/
+  URL:=https://github.com/shadow-maint/shadow
 endef
 
 define Package/shadow
index a7ef1f74ddd08670bc0549b47a3c1ecd42fd04e1..da82bff067692977f660fc5c42e154e10baa7e0f 100644 (file)
@@ -1,6 +1,6 @@
---- a/configure.in
-+++ b/configure.in
-@@ -197,7 +197,6 @@ dnl XXX - quick hack, should disappear b
+--- a/configure.ac
++++ b/configure.ac
+@@ -200,7 +200,6 @@ dnl XXX - quick hack, should disappear b
  AC_DEFINE(USE_SYSLOG, 1, [Define to use syslog().])
  if test "$ac_cv_func_ruserok" = "yes"; then
        AC_DEFINE(RLOGIN, 1, [Define if login should support the -r flag for rlogind.])
diff --git a/utils/shadow/patches/003-Check-size-of-uid_t-and-gid_t-using-AC_CHECK_SIZEOF.patch b/utils/shadow/patches/003-Check-size-of-uid_t-and-gid_t-using-AC_CHECK_SIZEOF.patch
deleted file mode 100644 (file)
index 046523d..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-From 2cb54158b80cdbd97ca3b36df83f9255e923ae3f Mon Sep 17 00:00:00 2001
-From: James Le Cuirot <chewi@aura-online.co.uk>
-Date: Sat, 23 Aug 2014 09:46:39 +0100
-Subject: [PATCH] Check size of uid_t and gid_t using AC_CHECK_SIZEOF
-
-This built-in check is simpler than the previous method and, most
-importantly, works when cross-compiling.
-
-Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
----
- configure.in | 14 ++++----------
- 1 file changed, 4 insertions(+), 10 deletions(-)
-
---- a/configure.in
-+++ b/configure.in
-@@ -334,16 +334,10 @@ if test "$enable_subids" != "no"; then
-       dnl
-       dnl FIXME: check if 32 bit UIDs/GIDs are supported by libc
-       dnl
--      AC_RUN_IFELSE([AC_LANG_SOURCE([
--#include <sys/types.h>
--int main(void) {
--      uid_t u;
--      gid_t g;
--      return (sizeof u < 4) || (sizeof g < 4);
--}
--      ])], [id32bit="yes"], [id32bit="no"])
-+      AC_CHECK_SIZEOF([uid_t],, [#include "sys/types.h"])
-+      AC_CHECK_SIZEOF([gid_t],, [#include "sys/types.h"])
--      if test "x$id32bit" = "xyes"; then
-+      if test "$ac_cv_sizeof_uid_t" -ge 4 && test "$ac_cv_sizeof_gid_t" -ge 4; then
-               AC_DEFINE(ENABLE_SUBIDS, 1, [Define to support the subordinate IDs.])
-               enable_subids="yes"
-       else
index 2f7a670b36c9c58aea05fc98c1a9c195a006d619..e1dca65869208d703b97f185240b337aa6122272 100644 (file)
@@ -1,6 +1,6 @@
 --- a/src/su.c
 +++ b/src/su.c
-@@ -1090,8 +1090,12 @@ int main (int argc, char **argv)
+@@ -1127,8 +1127,12 @@ int main (int argc, char **argv)
  
                if (fd >= 0) {
                        err = ioctl (fd, TIOCNOTTY, (char *) 0);
index e029097c5658adc99350f06b8e6c65f622fdf13a..21efa69135ea5269e3db0b3627127ac8b99bbd39 100644 (file)
@@ -8,14 +8,14 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=ttyd
-PKG_VERSION:=1.4.0
+PKG_VERSION:=1.4.2
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
 PKG_SOURCE_URL:=https://codeload.github.com/tsl0922/ttyd/tar.gz/$(PKG_VERSION)?
 PKG_SOURCE_VERSION=$(PKG_VERSION)
-PKG_HASH=757a9b5b5dd3de801d7db8fab6035d97ea144b02a51c78bdab28a8e07bcf05d6
+PKG_HASH=ff1a66b418df6cd741868a8ea84f69cd63f15e52e3fa117641ec57d3c37a1315
 
 PKG_LICENSE:=MIT
 PKG_LICENSE_FILES:=LICENSE
index 1e4190454c0ca041e1887f7c58425ed96d072eb4..8e9e3f3f0936079f9af062499a9d50277835eaa7 100644 (file)
@@ -8,14 +8,15 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=vim
-PKG_VERSION:=8.0.586
-PKG_RELEASE:=2
-VIMVER:=80
+PKG_VERSION:=8.1
+PKG_RELEASE:=1
+VIMVER:=81
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
-PKG_SOURCE_URL:=ftp://ftp.vim.org/pub/vim/unix/
-PKG_HASH:=08bd0d1dd30ece3cb9905ccd48b82b2f81c861696377508021265177dc153a61
+PKG_SOURCE_URL:=http://ftp.vim.org/pub/vim/unix
+PKG_HASH:=8b69fbd01c877dd8ecbbeca1dc66e5e927228d631ac4c2174b9307eb5c827c86
 PKG_MAINTAINER:=Marko Ratkaj <marko.ratkaj@sartura.hr>
+PKG_CPE_ID:=cpe:/a:vim:vim
 
 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)$(VIMVER)
 PKG_BUILD_PARALLEL:=1
@@ -115,8 +116,7 @@ CONFIGURE_ARGS += \
        --disable-gpm \
        --disable-acl \
        --with-tlib=ncurses \
-       --with-compiledby="non-existent-hostname-compiled" \
-       --disable-darwin
+       --with-compiledby="non-existent-hostname-compiled"
 
 CONFIGURE_VARS += \
        vim_cv_getcwd_broken=no \
@@ -128,6 +128,10 @@ CONFIGURE_VARS += \
        vim_cv_tty_group=root \
        vim_cv_tty_mode=0620
 
+ifneq ($(HOST_OS),Linux)
+  TARGET_PATH_PKG:=$(CURDIR)/scripts:$(TARGET_PATH_PKG)
+endif
+
 define Build/Prepare
        $(call Build/Prepare/Default)
        $(MAKE) -C $(PKG_BUILD_DIR)/src autoconf
index 220539c76a570ef071a1b53d1057b4504d2fb31a..75f1a7995aec454c932f56e1946d577648388d02 100644 (file)
@@ -54,9 +54,9 @@ index e287124..5a16797 100644
 +  AC_DEFINE_UNQUOTED(BUILD_DATE, ["$BUILD_DATE"])
 +fi
 +
- dnl Check for the flag that fails if stuff are missing.
- AC_MSG_CHECKING(--enable-fail-if-missing argument)
+ dnl Check that the C99 features that Vim uses are supported:
+ if test x"$ac_cv_prog_cc_c99" != xno; then
+   dnl If the compiler doesn't explicitly support C99, then check
 diff --git a/src/version.c b/src/version.c
 index 65f5a4b..9422657 100644
 --- a/src/version.c
index 051c8dac80fd2569b58b488d256f839e0a1d54a1..c3d77385a7e3f9a23d914e6d246ffc02d45c62bf 100644 (file)
@@ -1,6 +1,6 @@
 --- a/runtime/doc/Makefile
 +++ b/runtime/doc/Makefile
-@@ -310,7 +310,6 @@ all: tags vim.man evim.man vimdiff.man v
+@@ -317,7 +317,6 @@ all: tags vim.man evim.man vimdiff.man v
  # Use Vim to generate the tags file.  Can only be used when Vim has been
  # compiled and installed.  Supports multiple languages.
  vimtags: $(DOCS)
diff --git a/utils/vim/scripts/uname b/utils/vim/scripts/uname
new file mode 100755 (executable)
index 0000000..d2cd568
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+echo "Linux"
index 5ed2d19ca0dcffb54661425e8a9003cc6655e985..4de075fe8e2ea518090214066de3444d796a1a39 100644 (file)
@@ -8,13 +8,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=yara
-PKG_VERSION:=3.7.1
+PKG_VERSION:=3.8.1
 PKG_RELEASE:=1
 PKG_LICENSE:=BSD-3-Clause
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://github.com/VirusTotal/yara/archive/v$(PKG_VERSION)/
-PKG_HASH:=df077a29b0fffbf4e7c575f838a440f42d09b215fcb3971e6fb6360318a64892
+PKG_SOURCE_URL:=https://codeload.github.com/VirusTotal/yara/tar.gz/v$(PKG_VERSION)?
+PKG_HASH:=283527711269354d3c60e2705f7f74b1f769d2d35ddba8f7f9ce97d0fd5cb1ca
 
 PKG_FIXUP:=autoreconf
 PKG_BUILD_PARALLEL:=1
index a6827e207df2d0b464bdbdc6cf0a3b9a79407654..24dbc9c736b576e92263690594c216dbd20db326 100644 (file)
@@ -14,7 +14,7 @@ PKG_RELEASE:=1
 PKG_SOURCE_URL:=https://codeload.github.com/arduino/YunBridge/tar.gz/$(PKG_VERSION)?
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_HASH:=9e5ffc7a0d0cc2c92e972e425adcc49b77cf39da075d31728e7755d316d910d8
-PKG_BUILD_DIR:=YunBridge-$(PKG_VERSION)
+PKG_BUILD_DIR:=$(BUILD_DIR)/YunBridge-$(PKG_VERSION)
 
 PKG_MAINTAINER:=John Crispin <blogic@openwrt.org>
 PKG_LICENSE:=GPL-2.0
index c358ea56f550de1a5c24f4e53f59e6753ccb9e54..f7208e717b7958856f755a7063fe987235bbc027 100644 (file)
@@ -9,8 +9,8 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=zoneinfo
-PKG_VERSION:=2018e
-PKG_VERSION_CODE:=2018e
+PKG_VERSION:=2018f
+PKG_VERSION_CODE:=2018f
 PKG_RELEASE:=1
 
 #As i couldn't find real license used "Public Domain"
@@ -20,14 +20,14 @@ PKG_LICENSE:=Public Domain
 PKG_SOURCE:=tzdata$(PKG_VERSION).tar.gz
 PKG_SOURCE_CODE:=tzcode$(PKG_VERSION_CODE).tar.gz
 PKG_SOURCE_URL:=http://www.iana.org/time-zones/repository/releases
-PKG_HASH:=6b288e5926841a4cb490909fe822d85c36ae75538ad69baf20da9628b63b692e
+PKG_HASH:=0af6a85fc4ea95832f76524f35696a61abb3992fd3f8db33e5a1f95653e043f2
 
 include $(INCLUDE_DIR)/package.mk
 
 define Download/tzcode
    FILE=$(PKG_SOURCE_CODE)
    URL=$(PKG_SOURCE_URL)
-   HASH:=ca340cf20e80b699d6e5c49b4ba47361b3aa681f06f38a0c88a8e8308c00ebce
+   HASH:=4ec74f8a84372570135ea4be16a042442fafe100f5598cb1017bfd30af6aaa70
 endef
 
 $(eval $(call Download,tzcode))
@@ -100,6 +100,24 @@ $(call Package/zoneinfo/Default)
   TITLE:=Zone Information (India)
 endef
 
+define Package/zoneinfo-all
+$(call Package/zoneinfo/Default)
+  TITLE:=Zone Information (all zones)
+  DEPENDS:= \
+       +zoneinfo-simple \
+       +zoneinfo-core \
+       +zoneinfo-africa \
+       +zoneinfo-northamerica \
+       +zoneinfo-southamerica \
+       +zoneinfo-poles \
+       +zoneinfo-asia \
+       +zoneinfo-atlantic \
+       +zoneinfo-australia-nz \
+       +zoneinfo-pacific \
+       +zoneinfo-europe \
+       +zoneinfo-india
+endef
+
 define Build/Prepare
        (cd $(PKG_BUILD_DIR) && tar -xzf $(DL_DIR)/$(PKG_SOURCE_CODE) && tar -xzf $(DL_DIR)/$(PKG_SOURCE))
 endef
@@ -240,3 +258,4 @@ $(eval $(call BuildPackage,zoneinfo-australia-nz))
 $(eval $(call BuildPackage,zoneinfo-pacific))
 $(eval $(call BuildPackage,zoneinfo-europe))
 $(eval $(call BuildPackage,zoneinfo-india))
+$(eval $(call BuildPackage,zoneinfo-all))
index 5fce535468aa8db20979f73211cbe19e88777c25..33cf3077c55190422670033b36277e632e403de1 100644 (file)
@@ -8,15 +8,19 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=zsh
-PKG_VERSION:=5.5.1
+PKG_VERSION:=5.6.2
 PKG_RELEASE:=1
 
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=@SF/zsh
-PKG_HASH:=774caa89e7aea5f33c3033cbffd93e28707f72ba5149c79709e48e6c2d2ee080
+PKG_HASH:=a50bd66c0557e8eca3b8fa24e85d0de533e775d7a22df042da90488623752e9e
+
 PKG_MAINTAINER:=Vadim A. Misbakh-Soloviov <openwrt-zsh@mva.name>
 PKG_LICENSE:=ZSH
+PKG_LICENSE_FILES:=LICENCE
+PKG_CPE_ID:=cpe:/a:zsh_project:zsh
 
+PKG_BUILD_PARALLEL:=1
 PKG_INSTALL:=1
 
 include $(INCLUDE_DIR)/package.mk
@@ -27,7 +31,7 @@ define Package/zsh
   SUBMENU:=Shells
   TITLE:=The Z shell
   DEPENDS:=+libcap +libncurses +libncursesw +libpcre +librt
-  URL:=http://www.zsh.org/
+  URL:=https://www.zsh.org/
 endef
 
 define Package/zsh/description