--- /dev/null
+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
--- /dev/null
+# 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
--- /dev/null
+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
+
# 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.
* 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:
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:
```
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)
--- /dev/null
+--- 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)
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
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
$(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))
-@version:3.9
+@version: 3.17
options {
chain_hostnames(no);
--- /dev/null
+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
+++ /dev/null
-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
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
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
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
--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"
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
# 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.."]}")'
# 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.."]}")'
--- /dev/null
+{
+ "user": "zabbix",
+ "access": {
+ "network.interface": {
+ "methods": [ "dump" ]
+ }
+ }
+}
--- /dev/null
+{
+ "user": "zabbix",
+ "access": {
+ "network.wireless": {
+ "methods": [ "status" ]
+ }
+ }
+}
### 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
##### Active checks related
-@@ -129,8 +127,6 @@ Server=127.0.0.1
+@@ -131,8 +129,6 @@ Server=127.0.0.1
# Default:
# ServerActive=
### 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=
### 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
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: 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);
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
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
--- /dev/null
+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
+
--- /dev/null
+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
+
--- /dev/null
+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
+
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
--- /dev/null
+#
+# 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))
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>
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
--- /dev/null
+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
+
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
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))
--- /dev/null
+if PACKAGE_node-mozilla-iot-gateway
+
+ comment "Optional features"
+
+ config MOIT_enable-plugin-support
+ bool "Enable packages needed for some plugins"
+ default y
+
+endif
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
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
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
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
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" &
}
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>
PKG_NAME:=perl
PKG_VERSION:=$(PERL_VERSION)
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE_URL:=\
https://cpan.metacpan.org/src/5.0 \
--- 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.
# 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)
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>
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 \
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:=
--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
$(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))
$(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))
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
SECTION:=lang
CATEGORY:=Languages
TITLE:=Micro Python
- URL:=http://micropython.org
+ URL:=https://micropython.org
DEPENDS:=+libffi
endef
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))
+++ /dev/null
-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)
-
--- /dev/null
+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)
+
+++ /dev/null
---- 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>
-
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
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
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
SECTION:=lang-python
CATEGORY:=Languages
SUBMENU:=Python
- URL:=http://www.pycrypto.org/
+ URL:=https://www.dlitz.net/software/pycrypto/
endef
define Package/python-crypto
--- /dev/null
+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)
+
--- /dev/null
+--- 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')
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
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
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)
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)
SECTION:=lang
CATEGORY:=Languages
SUBMENU:=Python
- URL:=http://lxml.de
+ URL:=https://lxml.de
DEPENDS:=+libxml2 +libxslt +libexslt
endef
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)
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
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
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
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
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
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
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
SUBMENU:=Python
SECTION:=lang
CATEGORY:=Languages
- URL:=http://pyyaml.org/wiki/PyYAML
+ URL:=https://pyyaml.org/wiki/PyYAML
DEPENDS:=+libyaml
endef
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 += \
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
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 += \
--- /dev/null
+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
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
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
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
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
include $(TOPDIR)/rules.mk
PKG_NAME:=ruby
-PKG_VERSION:=2.5.1
+PKG_VERSION:=2.5.3
PKG_RELEASE:=1
# First two numbes
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
#
-# 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.
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
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
$(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))
+++ /dev/null
---- 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)" ; \
+++ /dev/null
---- 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();
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
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>
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
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
#
-# 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
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.
-----------------------------------------------------------------------------
- chrono
- container
- context
- - contract (new in 1.67.0)
+ - contract
- coroutine (Deprecated - use Coroutine2)
- - coroutine2 (Requires GCC v5 and up)
- date_time
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
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
$(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
$(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))
$(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
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)
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 \
--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) \
$(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) \
$(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 ;\
,) \
)
# 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
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
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>
--- /dev/null
+--- 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");
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
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>
CONFIGURE_ARGS += \
--enable-shared \
- --enable-static
+ --enable-static \
+ --without-docbook
+
+HOST_CONFIGURE_ARGS += \
+ --without-docbook
define Host/Install
$(MAKE) -C $(HOST_BUILD_DIR) install
define Package/fftw3
SECTION:=libs
CATEGORY:=Libraries
- DEPENDS:=@!avr32 +libpthread
+ DEPENDS:=+libpthread
VARIANT:=double
TITLE:=Fast Fourier transform library
URL:=http://www.fftw.org/
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
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
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>
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
--- /dev/null
+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
+
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
PKG_NAME:=getdns
PKG_VERSION:=1.4.2
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_LICENSE:=BSD-3-Clause
PKG_LICENSE_FILES:=LICENSE
$(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/
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
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
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
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 \
---- 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 =
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
--- /dev/null
+#
+# 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))
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
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 \
--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)" \
$(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 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
--- /dev/null
+#
+# 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))
--- /dev/null
+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
--- /dev/null
+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
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
PKG_LICENSE:=BSD-3-Clause
PKG_LICENSE_FILES:=LICENSE
-PKG_MAINTAINER:=Nicolas Thill <nico@openwrt.org>
+PKG_MAINTAINER:=
PKG_FIXUP:=autoreconf
PKG_INSTALL:=1
--- /dev/null
+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
+
--- /dev/null
+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
+
--- /dev/null
+#
+# 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))
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>
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
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
+++ /dev/null
---- 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-* \
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>
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
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
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/
--- /dev/null
+--- 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 )
--- /dev/null
+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))
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
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
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
--- /dev/null
+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)
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
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
CATEGORY:=Libraries
TITLE:=NETCONF library
URL:=$(PKG_SOURCE_URL)
- DEPENDS:= +libyang +libssh +libopenssl
+ DEPENDS:= +libyang +libssh +libopenssl +libpthread
endef
define Package/libnetconf2/description
--- /dev/null
+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));
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
--- 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"
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
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)
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
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 \
--- /dev/null
+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))
--- /dev/null
+#
+# 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))
--- /dev/null
+--- 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
+
--- /dev/null
+--- 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"
--- /dev/null
+--- 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>
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
PKG_NAME:=libpsl
PKG_VERSION:=0.20.2
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org>
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
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) \
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
+++ /dev/null
-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"
-
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
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
#
-# Copyright (C) 2016 OpenWrt.org
-#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
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
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
--- /dev/null
+--- 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,
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
+++ /dev/null
-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);
-#
-# 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
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
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
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)
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))
#
-# 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.
#
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>
$(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
$(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))
+--- 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>
+++ /dev/null
---- 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;
- }
-
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>
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)
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/
--- /dev/null
+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
+
+++ /dev/null
-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
-
--- /dev/null
+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
+
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
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
SECTION:=libs
CATEGORY:=Libraries
TITLE:=OPUS Audio Codec
- URL:=http://opus-codec.org/
+ URL:=https://opus-codec.org
endef
define Package/libopus/description
endif
CPU_ASM_BLACKLIST:=xscale arm926ej-s
-
ifneq ($(findstring $(call qstrip,$(CONFIG_CPU_TYPE)),$(CPU_ASM_BLACKLIST)),)
CONFIGURE_ARGS+= --disable-asm
endif
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
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
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
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
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
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
--- /dev/null
+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,
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
--- /dev/null
+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
+
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
define Package/unixodbc/Default
SUBMENU:=database
TITLE:=unixODBC
- URL:=http://www.unixodbc.org/
+ URL:=http://www.unixodbc.org
endef
define Package/unixodbc
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
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
--- 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
--- 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
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
--- /dev/null
+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>
+
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
endef
CONFIGURE_ARGS += \
+ --libexecdir=/usr/libexec \
--without-pam \
- --with-moduledir=/usr/lib/dovecot/modules \
--with-notify=dnotify \
--without-lzma \
--without-lz4 \
$(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/
--- /dev/null
+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:
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)
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 ''
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'
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
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
[ -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)
-#
+#
# Copyright (C) 2014 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
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
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
-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.
-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; }
-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
-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
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.
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)
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
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
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
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
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/ \
CONFIG_POSTFIX_CDB \
CONFIG_POSTFIX_DB \
CONFIG_POSTFIX_SQLITE \
+ CONFIG_POSTFIX_MYSQL \
CONFIG_POSTFIX_PGSQL \
CONFIG_POSTFIX_PCRE \
CONFIG_POSTFIX_EAI \
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
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
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
#!/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
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/ \
$(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
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')
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/
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 \
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
$(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
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
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>
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
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> \
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
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> \
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
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> \
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 \
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> \
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 \
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> \
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 \
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> \
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
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
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
--- /dev/null
+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
+
+++ /dev/null
---- 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
-
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
--- /dev/null
+if PACKAGE_netopeer2-keystored
+
+config SSH_KEYS
+ bool "Generate default ssh keys"
+ default y
+
+endif
--- /dev/null
+#
+# 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))
--- /dev/null
+#!/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
--- /dev/null
+#!/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
--- /dev/null
+#!/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
--- /dev/null
+#!/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
+}
--- /dev/null
+<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>
--- /dev/null
+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
--- /dev/null
+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()
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
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
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
]]--
+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 " ..
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 " ..
option use_staging 1
option keylength 2048
option update_uhttpd 1
+ option update_nginx 1
option webroot ""
list domains example.org
STATE_DIR='/etc/acme'
ACCOUNT_EMAIL=
DEBUG=0
+NGINX_WEBSERVER=0
+UPDATE_NGINX=0
+UPDATE_UHTTPD=0
. /lib/functions.sh
[ "$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()
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
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
}
local enabled
local use_staging
local update_uhttpd
+ local update_nginx
local keylength
local domains
local main_domain
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"
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!"
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
}
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>
* => 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)
* 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
* 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
* 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 ≤ 0 (bool/default: '0', disabled)
/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):**
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'
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'
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'
-
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"
}
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"
# 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
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),"↵"} 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),"↵"} 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),"↵"} 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),"↵"} else {print " ",substr($0,1,max)}{$0=substr($0,max+1);NR=NR+1}}else print}')"
fi
# mail body
#
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}
#
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
#
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
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
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
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
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
$(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))
--- /dev/null
+#!/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
+
--- /dev/null
+location /ariang {
+ index index.html;
+ alias /www/ariang/;
+}
\ No newline at end of file
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
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
--- /dev/null
+--- 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"
+
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
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
--sysconfdir=/etc/clamav/ \
--prefix=/usr/ \
--exec-prefix=/usr/ \
+ --enable-milter \
--disable-xml \
--disable-bzip2 \
--with-user nobody \
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/
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)?
$(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) \
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
#
-# Copyright (C) 2007-2016 OpenWrt.org
-#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
PKG_NAME:=darkstat
PKG_VERSION:=3.0.719
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_MAINTAINER:=Jean-Michel Lacroix <lacroix@lepine-lacroix.info>
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
--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 \
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:=
. /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
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")
[ $__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
}
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
__RUNPROG="$NSLOOKUP $__HOST >$DATFILE 2>$ERRFILE"
fi
write_log 7 "#> $__RUNPROG"
- (
- set -o noglob
- eval $__RUNPROG
- )
+ eval $__RUNPROG
__ERR=$?
# command error
[ $__ERR -gt 0 ] && {
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'"
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'"
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"
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
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"
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)
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 ] \
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'"
#!/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\"?> \
</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
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>
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
#
-# 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.
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
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
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
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
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
define Package/git-http
$(call Package/git/Default)
- DEPENDS+= +git +libcurl +ca-certificates
+ DEPENDS+= +git +libcurl
TITLE:=Git HTTP commands
endef
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 \
--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
--- 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"
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)
$(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 )
$(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 )
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
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
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
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
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
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
$(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))
$(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))
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
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
--enable-shared \
--enable-static \
--without-axtls \
+ --without-brotli \
--without-libssh2 \
--without-libmetalink \
--without-winidn \
--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 \
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
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
#!/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
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
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?'
#!/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
}
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
--- /dev/null
+#
+# 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))
--- /dev/null
+--- 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 \
--- /dev/null
+--- 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()
+ #
+
# 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
SECTION:=net
CATEGORY:=Network
URL:=https://www.jool.mx
- MAINTAINER:=Dan Luedtke <mail@danrl.com>
endef
define Package/jool/Default/description
--- /dev/null
+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, ¤t_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
+
--- /dev/null
+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
+
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)
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
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
endef
CONFIGURE_ARGS+= \
+ --disable-libnl \
--enable-sha1 \
- --disable-lvs \
- --disable-lvs-syncd \
--disable-snmp \
--with-kernel-dir="$(LINUX_DIR)/$(LINUX_UAPI_DIR)"
--- /dev/null
+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
+
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
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
$(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/
$(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/{} \
-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
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
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
PKG_NAME:=krb5
PKG_VERSION:=1.16.1
-PKG_RELEASE:=3
+PKG_RELEASE:=4
PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org>
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 \
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
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)
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
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
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)
@$(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
#############################################################################
-
---- /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
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;
+++ /dev/null
---- 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;
--- 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
// 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
+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
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
$(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
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
--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
+++ /dev/null
-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])],
+++ /dev/null
-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
-
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
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'
--- /dev/null
+#!/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
mwan3_lock
mwan3_init
mwan3_set_connected_iptables
+mwan3_set_custom_ipset
mwan3_unlock
config_get enabled $INTERFACE enabled 0
--- /dev/null
+#!/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
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() {
}
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
}
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"
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
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
$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
$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()
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
$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
$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
$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
}
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
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
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
}
$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
$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
}
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
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
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
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
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
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
}
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
[ -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
$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
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"
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
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
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
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"
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
}
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
}
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
}
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
+}
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
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
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
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")"
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
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
}
{
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" ] || {
{
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
config_load mwan3
config_foreach mwan3_track_clean interface
+ config_foreach mwan3_online_metric_clean interface
for IP in "$IP4" "$IP6"; do
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() {
--- /dev/null
+#!/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 "$@"
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
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
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
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
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
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
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
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)
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
--- 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;
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"))
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 \
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@
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
--- 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'
--- 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
+++ /dev/null
-if PACKAGE_netopeer2-keystored
-
-config SSH_KEYS
- bool "Generate default ssh keys"
- default y
-
-endif
+++ /dev/null
-#
-# 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))
+++ /dev/null
-#!/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
+++ /dev/null
-#!/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
+++ /dev/null
-#!/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
+++ /dev/null
-#!/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}
-}
+++ /dev/null
-<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>
+++ /dev/null
-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
--- /dev/null
+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
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)
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
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
/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
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 \
-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
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="\#"
$(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))
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
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>
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
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
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
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
$(Prepare/nginx-headers-more)
$(Prepare/nginx-rtmp)
$(Prepare/nginx-ts)
+ $(Prepare/nginx-dav-ext-module)
endef
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))
USE_PROCD=1
NAME=nlbwmon
PROG=/usr/sbin/nlbwmon
+NICEPRIO=19
add_subnet() {
local network="$1"
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
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)
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
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
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
$(call Package/nut/Default)
TITLE+= (server)
DEPENDS:=nut +nut-common
+ USERID:=nut=113:nut=113
endef
define Package/nut-server/description
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
define Package/nut-upsmon/conffiles
/etc/config/nut_monitor
+/etc/nut/upsmon.conf
endef
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
$(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
$(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
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)
--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 \
--- /dev/null
+#!/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
--- /dev/null
+"")
+ [ -d /var/run/nut ] && [ ! -f /var/run/nut/disable-hotplug ] && \
+ /etc/init.d/nut-server enabled && perform_libhid_action
+ ;;
+esac
# 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"
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"
+}
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"
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() {
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
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
}
#
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() {
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"
}
# option port # optional port number
# option displayname "Display Name"
+config upsset
+ option enable 0
#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"
# option powervalue 1
# option username upsuser
# option password upspassword
-
# 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
--- /dev/null
+#!/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
+}
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
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
--disable-osc \
--disable-uart \
--disable-libusb \
- --disable-libftdi \
--disable-http \
--disable-examples \
--disable-unittests \
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 \
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
--- /dev/null
+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,
--- /dev/null
+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 |
+++ /dev/null
---- 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
-
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
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:=
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
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
$$(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
$(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))
/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
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
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
-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.
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)
{
-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
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;
-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
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],
-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.
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 () {
-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
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
--- /dev/null
+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
+++ /dev/null
-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
+++ /dev/null
-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
-
--- /dev/null
+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
--- /dev/null
+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
+
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
+++ /dev/null
---- 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;
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
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
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
--- /dev/null
+#
+# 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))
--- /dev/null
+# 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
--- /dev/null
+#
+# 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
--- /dev/null
+#
+# 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
--- /dev/null
+#
+# 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
--- /dev/null
+#
+# 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
--- /dev/null
+#!/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
--- /dev/null
+#
+# 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'
--- /dev/null
+#!/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
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
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
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
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
$(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
# 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 \
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=""
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
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,
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
$(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/
config samba
- option 'name' 'OpenWrt-SMB'
option 'workgroup' 'WORKGROUP'
option 'description' 'Samba on OpenWrt'
option 'charset' 'UTF-8'
#!/bin/sh /etc/rc.common
-START=99
+START=98
USE_PROCD=1
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" \
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
[ -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
}
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
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
## 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
## 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
--- /dev/null
+--- 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,
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
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
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
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
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
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
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
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
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
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
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
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
#
-# Copyright (C) 2006-2015 OpenWrt.org
-#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
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
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
--- /dev/null
+#
+# 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))
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)
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
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"
include $(TOPDIR)/rules.mk
PKG_NAME:=squid
-PKG_VERSION:=4.0.24
+PKG_VERSION:=4.3
PKG_RELEASE:=1
PKG_LICENSE:=GPL-2.0
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
$(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
endef
CONFIGURE_ARGS += \
+ BUILDCXX=$(HOSTCXX) \
+ BUILDCXXFLAGS=$(if $(HOST_CXXFLAGS),$(HOST_CXXFLAGS),-O2) \
--config-cache \
--datadir=/usr/share/squid \
--libexecdir=/usr/lib/squid \
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>
+#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 @@
+# 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
--- 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.])
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])
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)
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
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
PKG_NAME:=stubby
PKG_VERSION:=0.2.3
-PKG_RELEASE:=1
+PKG_RELEASE:=3
PKG_LICENSE:=BSD-3-Clause
PKG_LICENSE_FILES:=COPYING
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
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
$(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))
# 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.
--- /dev/null
+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='
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"
+}
-#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"
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>
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
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
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
-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 += \
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
$(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
$(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))
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 ")
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
{
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/*
}
--- /dev/null
+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 */
+++ /dev/null
-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: 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)
+++ /dev/null
-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: 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) {
- } 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));
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
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
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>
* 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
* 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')
~# /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
**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)
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"
}
#
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
#
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
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>
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
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
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
# 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 ;
}
}
##############################################################################
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 )
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
# 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
}
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=.
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"
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"
} >> $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"
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
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"
+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
+++ /dev/null
-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");
PKG_NAME:=wifidog
PKG_VERSION:=1.3.0
-PKG_RELEASE:=2
+PKG_RELEASE:=3
PKG_LICENSE:=GPL-2.0
--- /dev/null
+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;
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
procd_set_param file /var/etc/smb.conf
procd_close_instance
}
+
+service_triggers() {
+ PROCD_RELOAD_DELAY=3000
+ procd_add_reload_trigger "dhcp" "system" "samba4"
+}
---- 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)))) {
PKG_NAME:=zerotier
PKG_VERSION:=1.2.12
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_LICENSE:=GPL-3.0
$(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))
--- /dev/null
+
+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>'
--- /dev/null
+#!/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}
+}
+++ /dev/null
-
-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'
+++ /dev/null
-#!/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'
-}
#
-# Copyright (C) 2014 OpenWrt.org
-#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
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
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/
--- /dev/null
+--- 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)
+++ /dev/null
---- 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
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
--enable-mpd \
--enable-chromecast \
--enable-verification \
+ --enable-webinterface \
--disable-spotify \
--with-libplist \
--with-libwebsockets \
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
--disable-vorbis-encoder \
--enable-wave-encoder \
--disable-wavpack \
- --disable-webdav \
- --disable-wildmidi \
+ --enable-webdav \
--disable-zzip \
--with-zeroconf=no \
--disable-soxr \
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>
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
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
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
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)?
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
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)
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: 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 :
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
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
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
URL:=http://cmdpad.sourceforge.net/index.php
endef
+TARGET_CFLAGS += -std=gnu89
+
CONFIGURE_ARGS += \
--enable-static \
--enable-shared
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
select PACKAGE_collectd-mod-network
endef
-ifneq ($(CONFIG_avr32),)
- TARGET_CFLAGS += -fsigned-char
-endif
-
# common configure args
CONFIGURE_ARGS+= \
--disable-werror \
$(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 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).
/* 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);
#@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>
# 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
--- 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. */
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
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
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
--disable-numa \
--disable-rdma \
--disable-rados \
+ --disable-http \
--disable-rbd \
--disable-gfapi \
--disable-lex \
--- /dev/null
+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
+
--- /dev/null
+# 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))
--- /dev/null
+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 '@'
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
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
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
--- /dev/null
+#
+# 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))
--- /dev/null
+#!/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
--- /dev/null
+# Load the hplib driver
+hpaio
--- /dev/null
+--- 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
+
--- /dev/null
+--- 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;
+ }
--- /dev/null
+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);
+
--- /dev/null
+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;
--- /dev/null
+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
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
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
./Configure -n linux
endef
-define Build/Compile
+define Build/Compile
LSOF_HOST="none" \
LSOF_LOGNAME="none" \
LSOF_SYSINFO="none" \
$(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 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 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
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 := \
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
--- 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
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
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+
--disable-doxygen-doc \
--with-homedir=/etc/mc \
--with-screen=ncurses \
- --without-gpm-mouse \
--without-x \
CONFIGURE_VARS += \
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
--- /dev/null
+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
+
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
--- /dev/null
+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 */
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
--- /dev/null
+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
+
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
--- 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 = \
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
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)
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))
# 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
'host:host' \
'port:port' \
'ssl:bool:0' \
- 'ping:uinteger:5'
+ 'keepalive:uinteger:5'
[ $? -ne 0 ] && {
echo "validation failed" >&2
}
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"
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
PKG_NAME:=setserial
PKG_VERSION:=2.17
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@SF/setserial
--- /dev/null
+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
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
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
---- 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.])
+++ /dev/null
-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
--- 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);
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
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
--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 \
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
+ 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
--- 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)
--- /dev/null
+#!/bin/sh
+echo "Linux"
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
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
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"
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))
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
$(eval $(call BuildPackage,zoneinfo-pacific))
$(eval $(call BuildPackage,zoneinfo-europe))
$(eval $(call BuildPackage,zoneinfo-india))
+$(eval $(call BuildPackage,zoneinfo-all))
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
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