Hello community,

here is the log from the commit of package libnftnl for openSUSE:Factory 
checked in at 2020-10-30 11:46:06
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libnftnl (Old)
 and      /work/SRC/openSUSE:Factory/.libnftnl.new.3463 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libnftnl"

Fri Oct 30 11:46:06 2020 rev:19 rq:844319 version:1.1.8

Changes:
--------
--- /work/SRC/openSUSE:Factory/libnftnl/libnftnl.changes        2020-06-11 
09:59:36.850178140 +0200
+++ /work/SRC/openSUSE:Factory/.libnftnl.new.3463/libnftnl.changes      
2020-10-30 11:46:15.165632147 +0100
@@ -1,0 +2,11 @@
+Tue Oct 27 10:14:27 UTC 2020 - Jan Engelhardt <[email protected]>
+
+- Update to release 1.1.8
+  * libnftnl: export nftnl_set_elem_fprintf
+  * examples: add support for NF_PROTO_INET family
+  * table: add userdata support
+  * object: add userdata and comment support
+  * chain: add userdata and comment support
+  * src: add support for chain ID attribute
+
+-------------------------------------------------------------------

Old:
----
  libnftnl-1.1.7.tar.bz2
  libnftnl-1.1.7.tar.bz2.sig

New:
----
  libnftnl-1.1.8.tar.bz2
  libnftnl-1.1.8.tar.bz2.sig
  libnftnl.keyring

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libnftnl.spec ++++++
--- /var/tmp/diff_new_pack.1qrAVR/_old  2020-10-30 11:46:16.297633149 +0100
+++ /var/tmp/diff_new_pack.1qrAVR/_new  2020-10-30 11:46:16.301633152 +0100
@@ -18,7 +18,7 @@
 
 Name:           libnftnl
 %define lname  libnftnl11
-Version:        1.1.7
+Version:        1.1.8
 Release:        0
 Summary:        Userspace library to access the nftables Netlink interface
 License:        GPL-2.0-or-later
@@ -28,7 +28,7 @@
 #Git-Clone:    git://git.netfilter.org/libnftnl
 Source:         http://ftp.netfilter.org/pub/libnftnl/%name-%version.tar.bz2
 Source2:        
http://ftp.netfilter.org/pub/libnftnl/%name-%version.tar.bz2.sig
-BuildRequires:  pkg-config >= 0.21
+Source9:        %name.keyring
 BuildRequires:  xz
 BuildRequires:  pkgconfig(libmnl) >= 1.0.3
 
@@ -57,11 +57,12 @@
 applications that want to make use of libnftnl.
 
 %prep
-%setup -q
+%autosetup -p1
 
 %build
+# includedir intentional, cf. bugzilla.opensuse.org/795968
 %configure --with-xml-parsing --includedir="%_includedir/%name"
-make %{?_smp_mflags}
+%make_build
 
 %install
 %make_install
@@ -77,6 +78,6 @@
 %_includedir/%name/
 %_libdir/libnftnl.so
 %_libdir/pkgconfig/libnftnl.pc
-%doc COPYING
+%license COPYING
 
 %changelog

++++++ libnftnl-1.1.7.tar.bz2 -> libnftnl-1.1.8.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/Make_global.am 
new/libnftnl-1.1.8/Make_global.am
--- old/libnftnl-1.1.7/Make_global.am   2020-06-05 13:21:59.313748950 +0200
+++ new/libnftnl-1.1.8/Make_global.am   2020-10-27 10:38:31.761284274 +0100
@@ -18,7 +18,7 @@
 # set age to 0.
 # </snippet>
 #
-LIBVERSION=14:0:3
+LIBVERSION=15:0:4
 
 AM_CPPFLAGS = ${regular_CPPFLAGS} -I${top_srcdir}/include ${LIBMNL_CFLAGS} 
${LIBMXML_CFLAGS}
 AM_CFLAGS = ${regular_CFLAGS} ${GCC_FVISIBILITY_HIDDEN}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/Makefile.in 
new/libnftnl-1.1.8/Makefile.in
--- old/libnftnl-1.1.7/Makefile.in      2020-06-05 13:22:10.941745726 +0200
+++ new/libnftnl-1.1.8/Makefile.in      2020-10-27 10:38:44.801262201 +0100
@@ -387,7 +387,7 @@
 # set age to 0.
 # </snippet>
 #
-LIBVERSION = 14:0:3
+LIBVERSION = 15:0:4
 AM_CPPFLAGS = ${regular_CPPFLAGS} -I${top_srcdir}/include ${LIBMNL_CFLAGS} 
${LIBMXML_CFLAGS}
 AM_CFLAGS = ${regular_CFLAGS} ${GCC_FVISIBILITY_HIDDEN}
 ACLOCAL_AMFLAGS = -I m4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/configure new/libnftnl-1.1.8/configure
--- old/libnftnl-1.1.7/configure        2020-06-05 13:22:09.801746042 +0200
+++ new/libnftnl-1.1.8/configure        2020-10-27 10:38:42.161266665 +0100
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for libnftnl 1.1.7.
+# Generated by GNU Autoconf 2.69 for libnftnl 1.1.8.
 #
 #
 # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -587,8 +587,8 @@
 # Identity of this package.
 PACKAGE_NAME='libnftnl'
 PACKAGE_TARNAME='libnftnl'
-PACKAGE_VERSION='1.1.7'
-PACKAGE_STRING='libnftnl 1.1.7'
+PACKAGE_VERSION='1.1.8'
+PACKAGE_STRING='libnftnl 1.1.8'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
@@ -1333,7 +1333,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures libnftnl 1.1.7 to adapt to many kinds of systems.
+\`configure' configures libnftnl 1.1.8 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1404,7 +1404,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of libnftnl 1.1.7:";;
+     short | recursive ) echo "Configuration of libnftnl 1.1.8:";;
    esac
   cat <<\_ACEOF
 
@@ -1522,7 +1522,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-libnftnl configure 1.1.7
+libnftnl configure 1.1.8
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1800,7 +1800,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by libnftnl $as_me 1.1.7, which was
+It was created by libnftnl $as_me 1.1.8, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3821,7 +3821,7 @@
 
 # Define the identity of the package.
  PACKAGE='libnftnl'
- VERSION='1.1.7'
+ VERSION='1.1.8'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -13577,7 +13577,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by libnftnl $as_me 1.1.7, which was
+This file was extended by libnftnl $as_me 1.1.8, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -13643,7 +13643,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; 
s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-libnftnl config.status 1.1.7
+libnftnl config.status 1.1.8
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/configure.ac 
new/libnftnl-1.1.8/configure.ac
--- old/libnftnl-1.1.7/configure.ac     2020-06-05 13:21:59.313748950 +0200
+++ new/libnftnl-1.1.8/configure.ac     2020-10-27 10:38:31.761284274 +0100
@@ -1,6 +1,6 @@
 dnl Process this file with autoconf to create configure.
 
-AC_INIT([libnftnl], [1.1.7])
+AC_INIT([libnftnl], [1.1.8])
 AC_CONFIG_AUX_DIR([build-aux])
 AC_CANONICAL_HOST
 AC_CONFIG_MACRO_DIR([m4])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/examples/Makefile.in 
new/libnftnl-1.1.8/examples/Makefile.in
--- old/libnftnl-1.1.7/examples/Makefile.in     2020-06-05 13:22:11.013745706 
+0200
+++ new/libnftnl-1.1.8/examples/Makefile.in     2020-10-27 10:38:44.897262038 
+0100
@@ -538,7 +538,7 @@
 # set age to 0.
 # </snippet>
 #
-LIBVERSION = 14:0:3
+LIBVERSION = 15:0:4
 AM_CPPFLAGS = ${regular_CPPFLAGS} -I${top_srcdir}/include ${LIBMNL_CFLAGS} 
${LIBMXML_CFLAGS}
 AM_CFLAGS = ${regular_CFLAGS} ${GCC_FVISIBILITY_HIDDEN}
 nft_table_add_SOURCES = nft-table-add.c
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/examples/nft-chain-add.c 
new/libnftnl-1.1.8/examples/nft-chain-add.c
--- old/libnftnl-1.1.7/examples/nft-chain-add.c 2020-06-05 13:21:59.313748950 
+0200
+++ new/libnftnl-1.1.8/examples/nft-chain-add.c 2020-10-27 10:38:31.765284267 
+0100
@@ -79,12 +79,14 @@
                family = NFPROTO_IPV4;
        else if (strcmp(argv[1], "ip6") == 0)
                family = NFPROTO_IPV6;
+       else if (strcmp(argv[1], "inet") == 0)
+               family = NFPROTO_INET;
        else if (strcmp(argv[1], "bridge") == 0)
                family = NFPROTO_BRIDGE;
        else if (strcmp(argv[1], "arp") == 0)
                family = NFPROTO_ARP;
        else {
-               fprintf(stderr, "Unknown family: ip, ip6, bridge, arp\n");
+               fprintf(stderr, "Unknown family: ip, ip6, inet, bridge, arp\n");
                exit(EXIT_FAILURE);
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/examples/nft-chain-del.c 
new/libnftnl-1.1.8/examples/nft-chain-del.c
--- old/libnftnl-1.1.7/examples/nft-chain-del.c 2020-06-05 13:21:59.313748950 
+0200
+++ new/libnftnl-1.1.8/examples/nft-chain-del.c 2020-10-27 10:38:31.765284267 
+0100
@@ -56,12 +56,14 @@
                family = NFPROTO_IPV4;
        else if (strcmp(argv[1], "ip6") == 0)
                family = NFPROTO_IPV6;
+       else if (strcmp(argv[1], "inet") == 0)
+               family = NFPROTO_INET;
        else if (strcmp(argv[1], "bridge") == 0)
                family = NFPROTO_BRIDGE;
        else if (strcmp(argv[1], "arp") == 0)
                family = NFPROTO_ARP;
        else {
-               fprintf(stderr, "Unknown family: ip, ip6, bridge, arp\n");
+               fprintf(stderr, "Unknown family: ip, ip6, inet, bridge, arp\n");
                exit(EXIT_FAILURE);
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/examples/nft-chain-get.c 
new/libnftnl-1.1.8/examples/nft-chain-get.c
--- old/libnftnl-1.1.7/examples/nft-chain-get.c 2020-06-05 13:21:59.313748950 
+0200
+++ new/libnftnl-1.1.8/examples/nft-chain-get.c 2020-10-27 10:38:31.765284267 
+0100
@@ -67,6 +67,8 @@
                family = NFPROTO_IPV4;
        else if (strcmp(argv[1], "ip6") == 0)
                family = NFPROTO_IPV6;
+       else if (strcmp(argv[1], "inet") == 0)
+               family = NFPROTO_INET;
        else if (strcmp(argv[1], "bridge") == 0)
                family = NFPROTO_BRIDGE;
        else if (strcmp(argv[1], "arp") == 0)
@@ -74,7 +76,7 @@
        else if (strcmp(argv[1], "unspec") == 0)
                family = NFPROTO_UNSPEC;
        else {
-               fprintf(stderr, "Unknown family: ip, ip6, bridge, arp, 
unspec\n");
+               fprintf(stderr, "Unknown family: ip, ip6, inet, bridge, arp, 
unspec\n");
                exit(EXIT_FAILURE);
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/examples/nft-ct-timeout-add.c 
new/libnftnl-1.1.8/examples/nft-ct-timeout-add.c
--- old/libnftnl-1.1.7/examples/nft-ct-timeout-add.c    2020-06-05 
13:21:59.313748950 +0200
+++ new/libnftnl-1.1.8/examples/nft-ct-timeout-add.c    2020-10-27 
10:38:31.769284260 +0100
@@ -31,12 +31,14 @@
                family = NFPROTO_IPV4;
        else if (strcmp(argv[1], "ip6") == 0)
                family = NFPROTO_IPV6;
+       else if (strcmp(argv[1], "inet") == 0)
+               family = NFPROTO_INET;
        else if (strcmp(argv[1], "bridge") == 0)
                family = NFPROTO_BRIDGE;
        else if (strcmp(argv[1], "arp") == 0)
                family = NFPROTO_ARP;
        else {
-               fprintf(stderr, "Unknown family: ip, ip6, bridge, arp\n");
+               fprintf(stderr, "Unknown family: ip, ip6, inet, bridge, arp\n");
                return NULL;
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/examples/nft-flowtable-add.c 
new/libnftnl-1.1.8/examples/nft-flowtable-add.c
--- old/libnftnl-1.1.7/examples/nft-flowtable-add.c     2020-06-05 
13:21:59.313748950 +0200
+++ new/libnftnl-1.1.8/examples/nft-flowtable-add.c     2020-10-27 
10:38:31.769284260 +0100
@@ -59,12 +59,14 @@
                family = NFPROTO_IPV4;
        else if (strcmp(argv[1], "ip6") == 0)
                family = NFPROTO_IPV6;
+       else if (strcmp(argv[1], "inet") == 0)
+               family = NFPROTO_INET;
        else if (strcmp(argv[1], "bridge") == 0)
                family = NFPROTO_BRIDGE;
        else if (strcmp(argv[1], "arp") == 0)
                family = NFPROTO_ARP;
        else {
-               fprintf(stderr, "Unknown family: ip, ip6, bridge, arp\n");
+               fprintf(stderr, "Unknown family: ip, ip6, inet, bridge, arp\n");
                exit(EXIT_FAILURE);
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/examples/nft-flowtable-del.c 
new/libnftnl-1.1.8/examples/nft-flowtable-del.c
--- old/libnftnl-1.1.7/examples/nft-flowtable-del.c     2020-06-05 
13:21:59.313748950 +0200
+++ new/libnftnl-1.1.8/examples/nft-flowtable-del.c     2020-10-27 
10:38:31.769284260 +0100
@@ -45,12 +45,14 @@
                family = NFPROTO_IPV4;
        else if (strcmp(argv[1], "ip6") == 0)
                family = NFPROTO_IPV6;
+       else if (strcmp(argv[1], "inet") == 0)
+               family = NFPROTO_INET;
        else if (strcmp(argv[1], "bridge") == 0)
                family = NFPROTO_BRIDGE;
        else if (strcmp(argv[1], "arp") == 0)
                family = NFPROTO_ARP;
        else {
-               fprintf(stderr, "Unknown family: ip, ip6, bridge, arp\n");
+               fprintf(stderr, "Unknown family: ip, ip6, inet, bridge, arp\n");
                exit(EXIT_FAILURE);
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/examples/nft-flowtable-get.c 
new/libnftnl-1.1.8/examples/nft-flowtable-get.c
--- old/libnftnl-1.1.7/examples/nft-flowtable-get.c     2020-06-05 
13:21:59.313748950 +0200
+++ new/libnftnl-1.1.8/examples/nft-flowtable-get.c     2020-10-27 
10:38:31.769284260 +0100
@@ -56,6 +56,8 @@
                family = NFPROTO_IPV4;
        else if (strcmp(argv[1], "ip6") == 0)
                family = NFPROTO_IPV6;
+       else if (strcmp(argv[1], "inet") == 0)
+               family = NFPROTO_INET;
        else if (strcmp(argv[1], "bridge") == 0)
                family = NFPROTO_BRIDGE;
        else if (strcmp(argv[1], "arp") == 0)
@@ -63,7 +65,7 @@
        else if (strcmp(argv[1], "unspec") == 0)
                family = NFPROTO_UNSPEC;
        else {
-               fprintf(stderr, "Unknown family: ip, ip6, bridge, arp, 
unspec\n");
+               fprintf(stderr, "Unknown family: ip, ip6, inet, bridge, arp, 
unspec\n");
                exit(EXIT_FAILURE);
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/examples/nft-map-add.c 
new/libnftnl-1.1.8/examples/nft-map-add.c
--- old/libnftnl-1.1.7/examples/nft-map-add.c   2020-06-05 13:21:59.313748950 
+0200
+++ new/libnftnl-1.1.8/examples/nft-map-add.c   2020-10-27 10:38:31.769284260 
+0100
@@ -74,6 +74,8 @@
                family = NFPROTO_IPV4;
        else if (strcmp(argv[1], "ip6") == 0)
                family = NFPROTO_IPV6;
+       else if (strcmp(argv[1], "inet") == 0)
+               family = NFPROTO_INET;
        else if (strcmp(argv[1], "bridge") == 0)
                family = NFPROTO_BRIDGE;
        else if (strcmp(argv[1], "arp") == 0)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/examples/nft-obj-add.c 
new/libnftnl-1.1.8/examples/nft-obj-add.c
--- old/libnftnl-1.1.7/examples/nft-obj-add.c   2020-06-05 13:21:59.313748950 
+0200
+++ new/libnftnl-1.1.8/examples/nft-obj-add.c   2020-10-27 10:38:31.769284260 
+0100
@@ -27,12 +27,14 @@
                family = NFPROTO_IPV4;
        else if (strcmp(argv[1], "ip6") == 0)
                family = NFPROTO_IPV6;
+       else if (strcmp(argv[1], "inet") == 0)
+               family = NFPROTO_INET;
        else if (strcmp(argv[1], "bridge") == 0)
                family = NFPROTO_BRIDGE;
        else if (strcmp(argv[1], "arp") == 0)
                family = NFPROTO_ARP;
        else {
-               fprintf(stderr, "Unknown family: ip, ip6, bridge, arp\n");
+               fprintf(stderr, "Unknown family: ip, ip6, inet, bridge, arp\n");
                return NULL;
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/examples/nft-obj-del.c 
new/libnftnl-1.1.8/examples/nft-obj-del.c
--- old/libnftnl-1.1.7/examples/nft-obj-del.c   2020-06-05 13:21:59.313748950 
+0200
+++ new/libnftnl-1.1.8/examples/nft-obj-del.c   2020-10-27 10:38:31.769284260 
+0100
@@ -29,12 +29,14 @@
                family = NFPROTO_IPV4;
        else if (strcmp(argv[1], "ip6") == 0)
                family = NFPROTO_IPV6;
+       else if (strcmp(argv[1], "inet") == 0)
+               family = NFPROTO_INET;
        else if (strcmp(argv[1], "bridge") == 0)
                family = NFPROTO_BRIDGE;
        else if (strcmp(argv[1], "arp") == 0)
                family = NFPROTO_ARP;
        else {
-               fprintf(stderr, "Unknown family: ip, ip6, bridge, arp\n");
+               fprintf(stderr, "Unknown family: ip, ip6, inet, bridge, arp\n");
                return NULL;
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/examples/nft-obj-get.c 
new/libnftnl-1.1.8/examples/nft-obj-get.c
--- old/libnftnl-1.1.7/examples/nft-obj-get.c   2020-06-05 13:21:59.313748950 
+0200
+++ new/libnftnl-1.1.8/examples/nft-obj-get.c   2020-10-27 10:38:31.769284260 
+0100
@@ -65,6 +65,8 @@
                family = NFPROTO_IPV4;
        else if (strcmp(argv[1], "ip6") == 0)
                family = NFPROTO_IPV6;
+       else if (strcmp(argv[1], "inet") == 0)
+               family = NFPROTO_INET;
        else if (strcmp(argv[1], "bridge") == 0)
                family = NFPROTO_BRIDGE;
        else if (strcmp(argv[1], "arp") == 0)
@@ -72,7 +74,7 @@
        else if (strcmp(argv[1], "unspec") == 0)
                family = NFPROTO_UNSPEC;
        else {
-               fprintf(stderr, "Unknown family: ip, ip6, bridge, arp, 
unspec\n");
+               fprintf(stderr, "Unknown family: ip, ip6, inet, bridge, arp, 
unspec\n");
                exit(EXIT_FAILURE);
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/examples/nft-rule-add.c 
new/libnftnl-1.1.8/examples/nft-rule-add.c
--- old/libnftnl-1.1.7/examples/nft-rule-add.c  2020-06-05 13:21:59.313748950 
+0200
+++ new/libnftnl-1.1.8/examples/nft-rule-add.c  2020-10-27 10:38:31.769284260 
+0100
@@ -137,8 +137,10 @@
                family = NFPROTO_IPV4;
        else if (strcmp(argv[1], "ip6") == 0)
                family = NFPROTO_IPV6;
+       else if (strcmp(argv[1], "inet") == 0)
+               family = NFPROTO_INET;
        else {
-               fprintf(stderr, "Unknown family: ip, ip6\n");
+               fprintf(stderr, "Unknown family: ip, ip6, inet\n");
                exit(EXIT_FAILURE);
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/examples/nft-rule-ct-helper-add.c 
new/libnftnl-1.1.8/examples/nft-rule-ct-helper-add.c
--- old/libnftnl-1.1.7/examples/nft-rule-ct-helper-add.c        2020-06-05 
13:21:59.313748950 +0200
+++ new/libnftnl-1.1.8/examples/nft-rule-ct-helper-add.c        2020-10-27 
10:38:31.773284252 +0100
@@ -89,8 +89,10 @@
                family = NFPROTO_IPV4;
        else if (strcmp(argv[1], "ip6") == 0)
                family = NFPROTO_IPV6;
+       else if (strcmp(argv[1], "inet") == 0)
+               family = NFPROTO_INET;
        else {
-               fprintf(stderr, "Unknown family: ip, ip6\n");
+               fprintf(stderr, "Unknown family: ip, ip6, inet\n");
                exit(EXIT_FAILURE);
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/examples/nft-rule-ct-timeout-add.c 
new/libnftnl-1.1.8/examples/nft-rule-ct-timeout-add.c
--- old/libnftnl-1.1.7/examples/nft-rule-ct-timeout-add.c       2020-06-05 
13:21:59.313748950 +0200
+++ new/libnftnl-1.1.8/examples/nft-rule-ct-timeout-add.c       2020-10-27 
10:38:31.773284252 +0100
@@ -89,8 +89,10 @@
                family = NFPROTO_IPV4;
        else if (strcmp(argv[1], "ip6") == 0)
                family = NFPROTO_IPV6;
+       else if (strcmp(argv[1], "inet") == 0)
+               family = NFPROTO_INET;
        else {
-               fprintf(stderr, "Unknown family: ip, ip6\n");
+               fprintf(stderr, "Unknown family: ip, ip6, inet\n");
                exit(EXIT_FAILURE);
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/examples/nft-rule-del.c 
new/libnftnl-1.1.8/examples/nft-rule-del.c
--- old/libnftnl-1.1.7/examples/nft-rule-del.c  2020-06-05 13:21:59.313748950 
+0200
+++ new/libnftnl-1.1.8/examples/nft-rule-del.c  2020-10-27 10:38:31.773284252 
+0100
@@ -48,12 +48,14 @@
                family = NFPROTO_IPV4;
        else if (strcmp(argv[1], "ip6") == 0)
                family = NFPROTO_IPV6;
+       else if (strcmp(argv[1], "inet") == 0)
+               family = NFPROTO_INET;
        else if (strcmp(argv[1], "bridge") == 0)
                family = NFPROTO_BRIDGE;
        else if (strcmp(argv[1], "arp") == 0)
                family = NFPROTO_ARP;
        else {
-               fprintf(stderr, "Unknown family: ip, ip6, bridge, arp\n");
+               fprintf(stderr, "Unknown family: ip, ip6, inet, bridge, arp\n");
                exit(EXIT_FAILURE);
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/examples/nft-rule-get.c 
new/libnftnl-1.1.8/examples/nft-rule-get.c
--- old/libnftnl-1.1.7/examples/nft-rule-get.c  2020-06-05 13:21:59.313748950 
+0200
+++ new/libnftnl-1.1.8/examples/nft-rule-get.c  2020-10-27 10:38:31.773284252 
+0100
@@ -91,6 +91,8 @@
                family = NFPROTO_IPV4;
        else if (strcmp(argv[1], "ip6") == 0)
                family = NFPROTO_IPV6;
+       else if (strcmp(argv[1], "inet") == 0)
+               family = NFPROTO_INET;
        else if (strcmp(argv[1], "bridge") == 0)
                family = NFPROTO_BRIDGE;
        else if (strcmp(argv[1], "arp") == 0)
@@ -98,7 +100,7 @@
        else if (strcmp(argv[1], "unspec") == 0)
                family = NFPROTO_UNSPEC;
        else {
-               fprintf(stderr, "Unknown family: ip, ip6, bridge, arp, 
unspec\n");
+               fprintf(stderr, "Unknown family: ip, ip6, inet, bridge, arp, 
unspec\n");
                exit(EXIT_FAILURE);
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/examples/nft-set-add.c 
new/libnftnl-1.1.8/examples/nft-set-add.c
--- old/libnftnl-1.1.7/examples/nft-set-add.c   2020-06-05 13:21:59.317748948 
+0200
+++ new/libnftnl-1.1.8/examples/nft-set-add.c   2020-10-27 10:38:31.773284252 
+0100
@@ -70,12 +70,14 @@
                family = NFPROTO_IPV4;
        else if (strcmp(argv[1], "ip6") == 0)
                family = NFPROTO_IPV6;
+       else if (strcmp(argv[1], "inet") == 0)
+               family = NFPROTO_INET;
        else if (strcmp(argv[1], "bridge") == 0)
                family = NFPROTO_BRIDGE;
        else if (strcmp(argv[1], "arp") == 0)
                family = NFPROTO_ARP;
        else {
-               fprintf(stderr, "Unknown family: ip, ip6, bridge, arp\n");
+               fprintf(stderr, "Unknown family: ip, ip6, inet, bridge, arp\n");
                exit(EXIT_FAILURE);
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/examples/nft-set-del.c 
new/libnftnl-1.1.8/examples/nft-set-del.c
--- old/libnftnl-1.1.7/examples/nft-set-del.c   2020-06-05 13:21:59.317748948 
+0200
+++ new/libnftnl-1.1.8/examples/nft-set-del.c   2020-10-27 10:38:31.773284252 
+0100
@@ -46,12 +46,14 @@
                family = NFPROTO_IPV4;
        else if (strcmp(argv[1], "ip6") == 0)
                family = NFPROTO_IPV6;
+       else if (strcmp(argv[1], "inet") == 0)
+               family = NFPROTO_INET;
        else if (strcmp(argv[1], "bridge") == 0)
                family = NFPROTO_BRIDGE;
        else if (strcmp(argv[1], "arp") == 0)
                family = NFPROTO_ARP;
        else {
-               fprintf(stderr, "Unknown family: ip, ip6, bridge, arp\n");
+               fprintf(stderr, "Unknown family: ip, ip6, inet, bridge, arp\n");
                exit(EXIT_FAILURE);
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/examples/nft-set-elem-add.c 
new/libnftnl-1.1.8/examples/nft-set-elem-add.c
--- old/libnftnl-1.1.7/examples/nft-set-elem-add.c      2020-06-05 
13:21:59.317748948 +0200
+++ new/libnftnl-1.1.8/examples/nft-set-elem-add.c      2020-10-27 
10:38:31.777284246 +0100
@@ -48,12 +48,14 @@
                family = NFPROTO_IPV4;
        else if (strcmp(argv[1], "ip6") == 0)
                family = NFPROTO_IPV6;
+       else if (strcmp(argv[1], "inet") == 0)
+               family = NFPROTO_INET;
        else if (strcmp(argv[1], "bridge") == 0)
                family = NFPROTO_BRIDGE;
        else if (strcmp(argv[1], "arp") == 0)
                family = NFPROTO_ARP;
        else {
-               fprintf(stderr, "Unknown family: ip, ip6, bridge, arp\n");
+               fprintf(stderr, "Unknown family: ip, ip6, inet, bridge, arp\n");
                exit(EXIT_FAILURE);
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/examples/nft-set-elem-del.c 
new/libnftnl-1.1.8/examples/nft-set-elem-del.c
--- old/libnftnl-1.1.7/examples/nft-set-elem-del.c      2020-06-05 
13:21:59.317748948 +0200
+++ new/libnftnl-1.1.8/examples/nft-set-elem-del.c      2020-10-27 
10:38:31.777284246 +0100
@@ -22,12 +22,14 @@
 
 int main(int argc, char *argv[])
 {
-       struct mnl_socket *nl;
        char buf[MNL_SOCKET_BUFFER_SIZE];
+       struct mnl_nlmsg_batch *batch;
+       uint32_t portid, seq, family;
+       struct nftnl_set_elem *e;
+       struct mnl_socket *nl;
        struct nlmsghdr *nlh;
-       uint32_t portid, seq, family, data;
        struct nftnl_set *s;
-       struct nftnl_set_elem *e;
+       uint16_t data;
        int ret;
 
        if (argc != 4) {
@@ -46,12 +48,14 @@
                family = NFPROTO_IPV4;
        else if (strcmp(argv[1], "ip6") == 0)
                family = NFPROTO_IPV6;
+       else if (strcmp(argv[1], "inet") == 0)
+               family = NFPROTO_INET;
        else if (strcmp(argv[1], "bridge") == 0)
                family = NFPROTO_BRIDGE;
        else if (strcmp(argv[1], "arp") == 0)
                family = NFPROTO_ARP;
        else {
-               fprintf(stderr, "Unknown family: ip, ip6, bridge, arp\n");
+               fprintf(stderr, "Unknown family: ip, ip6, inet, bridge, arp\n");
                exit(EXIT_FAILURE);
        }
 
@@ -78,10 +82,20 @@
        nftnl_set_elem_set(e, NFTNL_SET_ELEM_KEY, &data, sizeof(data));
        nftnl_set_elem_add(s, e);
 
-       nlh = nftnl_set_nlmsg_build_hdr(buf, NFT_MSG_DELSETELEM, family,
-                                     NLM_F_ACK, seq);
+       batch = mnl_nlmsg_batch_start(buf, sizeof(buf));
+
+       nftnl_batch_begin(mnl_nlmsg_batch_current(batch), seq++);
+       mnl_nlmsg_batch_next(batch);
+
+       nlh = nftnl_set_nlmsg_build_hdr(mnl_nlmsg_batch_current(batch),
+                                       NFT_MSG_DELSETELEM, family,
+                                       NLM_F_ACK, seq);
        nftnl_set_elems_nlmsg_build_payload(nlh, s);
        nftnl_set_free(s);
+       mnl_nlmsg_batch_next(batch);
+
+       nftnl_batch_end(mnl_nlmsg_batch_current(batch), seq++);
+       mnl_nlmsg_batch_next(batch);
 
        nl = mnl_socket_open(NETLINK_NETFILTER);
        if (nl == NULL) {
@@ -95,14 +109,18 @@
        }
        portid = mnl_socket_get_portid(nl);
 
-       if (mnl_socket_sendto(nl, nlh, nlh->nlmsg_len) < 0) {
-               perror("mnl_socket_send");
+       ret = mnl_socket_sendto(nl, mnl_nlmsg_batch_head(batch),
+                               mnl_nlmsg_batch_size(batch));
+       if (ret == -1) {
+               perror("mnl_socket_sendto");
                exit(EXIT_FAILURE);
        }
 
+       mnl_nlmsg_batch_stop(batch);
+
        ret = mnl_socket_recvfrom(nl, buf, sizeof(buf));
        while (ret > 0) {
-               ret = mnl_cb_run(buf, ret, seq, portid, NULL, NULL);
+               ret = mnl_cb_run(buf, ret, 0, portid, NULL, NULL);
                if (ret <= 0)
                        break;
                ret = mnl_socket_recvfrom(nl, buf, sizeof(buf));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/examples/nft-set-elem-get.c 
new/libnftnl-1.1.8/examples/nft-set-elem-get.c
--- old/libnftnl-1.1.7/examples/nft-set-elem-get.c      2020-06-05 
13:21:59.317748948 +0200
+++ new/libnftnl-1.1.8/examples/nft-set-elem-get.c      2020-10-27 
10:38:31.777284246 +0100
@@ -70,12 +70,14 @@
                family = NFPROTO_IPV4;
        else if (strcmp(argv[1], "ip6") == 0)
                family = NFPROTO_IPV6;
+       else if (strcmp(argv[1], "inet") == 0)
+               family = NFPROTO_INET;
        else if (strcmp(argv[1], "bridge") == 0)
                family = NFPROTO_BRIDGE;
        else if (strcmp(argv[1], "arp") == 0)
                family = NFPROTO_ARP;
        else {
-               fprintf(stderr, "Unknown family: ip, ip6, bridge, arp\n");
+               fprintf(stderr, "Unknown family: ip, ip6, inet, bridge, arp\n");
                exit(EXIT_FAILURE);
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/examples/nft-set-get.c 
new/libnftnl-1.1.8/examples/nft-set-get.c
--- old/libnftnl-1.1.7/examples/nft-set-get.c   2020-06-05 13:21:59.317748948 
+0200
+++ new/libnftnl-1.1.8/examples/nft-set-get.c   2020-10-27 10:38:31.777284246 
+0100
@@ -70,6 +70,8 @@
                family = NFPROTO_IPV4;
        else if (strcmp(argv[1], "ip6") == 0)
                family = NFPROTO_IPV6;
+       else if (strcmp(argv[1], "inet") == 0)
+               family = NFPROTO_INET;
        else if (strcmp(argv[1], "bridge") == 0)
                family = NFPROTO_BRIDGE;
        else if (strcmp(argv[1], "arp") == 0)
@@ -77,7 +79,7 @@
        else if (strcmp(argv[1], "unspec") == 0)
                family = NFPROTO_UNSPEC;
        else {
-               fprintf(stderr, "Unknown family: ip, ip6, bridge, arp, 
unspec\n");
+               fprintf(stderr, "Unknown family: ip, ip6, inet, bridge, arp, 
unspec\n");
                exit(EXIT_FAILURE);
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/examples/nft-table-add.c 
new/libnftnl-1.1.8/examples/nft-table-add.c
--- old/libnftnl-1.1.7/examples/nft-table-add.c 2020-06-05 13:21:59.317748948 
+0200
+++ new/libnftnl-1.1.8/examples/nft-table-add.c 2020-10-27 10:38:31.777284246 
+0100
@@ -29,12 +29,14 @@
                family = NFPROTO_IPV4;
        else if (strcmp(argv[1], "ip6") == 0)
                family = NFPROTO_IPV6;
+       else if (strcmp(argv[1], "inet") == 0)
+               family = NFPROTO_INET;
        else if (strcmp(argv[1], "bridge") == 0)
                family = NFPROTO_BRIDGE;
        else if (strcmp(argv[1], "arp") == 0)
                family = NFPROTO_ARP;
        else {
-               fprintf(stderr, "Unknown family: ip, ip6, bridge, arp\n");
+               fprintf(stderr, "Unknown family: ip, ip6, inet, bridge, arp\n");
                return NULL;
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/examples/nft-table-del.c 
new/libnftnl-1.1.8/examples/nft-table-del.c
--- old/libnftnl-1.1.7/examples/nft-table-del.c 2020-06-05 13:21:59.317748948 
+0200
+++ new/libnftnl-1.1.8/examples/nft-table-del.c 2020-10-27 10:38:31.781284240 
+0100
@@ -29,12 +29,14 @@
                family = NFPROTO_IPV4;
        else if (strcmp(argv[1], "ip6") == 0)
                family = NFPROTO_IPV6;
+       else if (strcmp(argv[1], "inet") == 0)
+               family = NFPROTO_INET;
        else if (strcmp(argv[1], "bridge") == 0)
                family = NFPROTO_BRIDGE;
        else if (strcmp(argv[1], "arp") == 0)
                family = NFPROTO_ARP;
        else {
-               fprintf(stderr, "Unknown family: ip, ip6, bridge, arp\n");
+               fprintf(stderr, "Unknown family: ip, ip6, inet, bridge, arp\n");
                return NULL;
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/examples/nft-table-get.c 
new/libnftnl-1.1.8/examples/nft-table-get.c
--- old/libnftnl-1.1.7/examples/nft-table-get.c 2020-06-05 13:21:59.317748948 
+0200
+++ new/libnftnl-1.1.8/examples/nft-table-get.c 2020-10-27 10:38:31.781284240 
+0100
@@ -65,6 +65,8 @@
                family = NFPROTO_IPV4;
        else if (strcmp(argv[1], "ip6") == 0)
                family = NFPROTO_IPV6;
+       else if (strcmp(argv[1], "inet") == 0)
+               family = NFPROTO_INET;
        else if (strcmp(argv[1], "bridge") == 0)
                family = NFPROTO_BRIDGE;
        else if (strcmp(argv[1], "arp") == 0)
@@ -72,7 +74,7 @@
        else if (strcmp(argv[1], "unspec") == 0)
                family = NFPROTO_UNSPEC;
        else {
-               fprintf(stderr, "Unknown family: ip, ip6, bridge, arp, 
unspec\n");
+               fprintf(stderr, "Unknown family: ip, ip6, inet, bridge, arp, 
unspec\n");
                exit(EXIT_FAILURE);
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/examples/nft-table-upd.c 
new/libnftnl-1.1.8/examples/nft-table-upd.c
--- old/libnftnl-1.1.7/examples/nft-table-upd.c 2020-06-05 13:21:59.317748948 
+0200
+++ new/libnftnl-1.1.8/examples/nft-table-upd.c 2020-10-27 10:38:31.781284240 
+0100
@@ -51,6 +51,8 @@
                family = NFPROTO_IPV4;
        else if (strcmp(argv[1], "ip6") == 0)
                family = NFPROTO_IPV6;
+       else if (strcmp(argv[1], "inet") == 0)
+               family = NFPROTO_INET;
        else if (strcmp(argv[1], "bridge") == 0)
                family = NFPROTO_BRIDGE;
        else if (strcmp(argv[1], "arp") == 0)
@@ -59,7 +61,7 @@
                family = NFPROTO_NETDEV;
        else {
                fprintf(stderr,
-                       "Unknown family: ip, ip6, bridge, arp, netdev\n");
+                       "Unknown family: ip, ip6, inet, bridge, arp, netdev\n");
                exit(EXIT_FAILURE);
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/include/data_reg.h 
new/libnftnl-1.1.8/include/data_reg.h
--- old/libnftnl-1.1.7/include/data_reg.h       2020-06-05 13:21:59.317748948 
+0200
+++ new/libnftnl-1.1.8/include/data_reg.h       2020-10-27 10:38:31.785284233 
+0100
@@ -21,6 +21,7 @@
        struct {
                uint32_t        verdict;
                const char      *chain;
+               uint32_t        chain_id;
        };
 };
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/include/libnftnl/chain.h 
new/libnftnl-1.1.8/include/libnftnl/chain.h
--- old/libnftnl-1.1.7/include/libnftnl/chain.h 2020-06-05 13:21:59.317748948 
+0200
+++ new/libnftnl-1.1.8/include/libnftnl/chain.h 2020-10-27 10:38:31.789284226 
+0100
@@ -33,6 +33,8 @@
        NFTNL_CHAIN_DEV,
        NFTNL_CHAIN_DEVICES,
        NFTNL_CHAIN_FLAGS,
+       NFTNL_CHAIN_ID,
+       NFTNL_CHAIN_USERDATA,
        __NFTNL_CHAIN_MAX
 };
 #define NFTNL_CHAIN_MAX (__NFTNL_CHAIN_MAX - 1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/include/libnftnl/expr.h 
new/libnftnl-1.1.8/include/libnftnl/expr.h
--- old/libnftnl-1.1.7/include/libnftnl/expr.h  2020-06-05 13:21:59.317748948 
+0200
+++ new/libnftnl-1.1.8/include/libnftnl/expr.h  2020-10-27 10:38:31.789284226 
+0100
@@ -36,6 +36,8 @@
 uint64_t nftnl_expr_get_u64(const struct nftnl_expr *expr, uint16_t type);
 const char *nftnl_expr_get_str(const struct nftnl_expr *expr, uint16_t type);
 
+void nftnl_expr_build_payload(struct nlmsghdr *nlh, struct nftnl_expr *expr);
+
 int nftnl_expr_snprintf(char *buf, size_t buflen, const struct nftnl_expr 
*expr, uint32_t type, uint32_t flags);
 int nftnl_expr_fprintf(FILE *fp, const struct nftnl_expr *expr, uint32_t type, 
uint32_t flags);
 
@@ -98,6 +100,7 @@
        NFTNL_EXPR_IMM_DATA,
        NFTNL_EXPR_IMM_VERDICT,
        NFTNL_EXPR_IMM_CHAIN,
+       NFTNL_EXPR_IMM_CHAIN_ID,
 };
 
 enum {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/include/libnftnl/object.h 
new/libnftnl-1.1.8/include/libnftnl/object.h
--- old/libnftnl-1.1.7/include/libnftnl/object.h        2020-06-05 
13:21:59.317748948 +0200
+++ new/libnftnl-1.1.8/include/libnftnl/object.h        2020-10-27 
10:38:31.789284226 +0100
@@ -19,6 +19,7 @@
        NFTNL_OBJ_FAMILY,
        NFTNL_OBJ_USE,
        NFTNL_OBJ_HANDLE,
+       NFTNL_OBJ_USERDATA,
        NFTNL_OBJ_BASE          = 16,
        __NFTNL_OBJ_MAX
 };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/include/libnftnl/rule.h 
new/libnftnl-1.1.8/include/libnftnl/rule.h
--- old/libnftnl-1.1.7/include/libnftnl/rule.h  2020-06-05 13:21:59.317748948 
+0200
+++ new/libnftnl-1.1.8/include/libnftnl/rule.h  2020-10-27 10:38:31.789284226 
+0100
@@ -51,6 +51,7 @@
 uint64_t nftnl_rule_get_u64(const struct nftnl_rule *r, uint16_t attr);
 
 void nftnl_rule_add_expr(struct nftnl_rule *r, struct nftnl_expr *expr);
+void nftnl_rule_del_expr(struct nftnl_expr *expr);
 
 struct nlmsghdr;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/include/libnftnl/set.h 
new/libnftnl-1.1.8/include/libnftnl/set.h
--- old/libnftnl-1.1.7/include/libnftnl/set.h   2020-06-05 13:21:59.317748948 
+0200
+++ new/libnftnl-1.1.8/include/libnftnl/set.h   2020-10-27 10:38:31.793284218 
+0100
@@ -142,7 +142,7 @@
 int nftnl_set_elem_parse_file(struct nftnl_set_elem *e, enum nftnl_parse_type 
type,
                            FILE *fp, struct nftnl_parse_err *err);
 int nftnl_set_elem_snprintf(char *buf, size_t size, const struct 
nftnl_set_elem *s, uint32_t type, uint32_t flags);
-int nftnl_set_elem_fprintf(FILE *fp, struct nftnl_set_elem *se, uint32_t type, 
uint32_t flags);
+int nftnl_set_elem_fprintf(FILE *fp, const struct nftnl_set_elem *se, uint32_t 
type, uint32_t flags);
 
 int nftnl_set_elem_foreach(struct nftnl_set *s, int (*cb)(struct 
nftnl_set_elem *e, void *data), void *data);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/include/libnftnl/table.h 
new/libnftnl-1.1.8/include/libnftnl/table.h
--- old/libnftnl-1.1.7/include/libnftnl/table.h 2020-06-05 13:21:59.317748948 
+0200
+++ new/libnftnl-1.1.8/include/libnftnl/table.h 2020-10-27 10:38:31.793284218 
+0100
@@ -23,6 +23,7 @@
        NFTNL_TABLE_FLAGS,
        NFTNL_TABLE_USE,
        NFTNL_TABLE_HANDLE,
+       NFTNL_TABLE_USERDATA,
        __NFTNL_TABLE_MAX
 };
 #define NFTNL_TABLE_MAX (__NFTNL_TABLE_MAX - 1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/include/libnftnl/udata.h 
new/libnftnl-1.1.8/include/libnftnl/udata.h
--- old/libnftnl-1.1.7/include/libnftnl/udata.h 2020-06-05 13:21:59.317748948 
+0200
+++ new/libnftnl-1.1.8/include/libnftnl/udata.h 2020-10-27 10:38:31.793284218 
+0100
@@ -9,6 +9,18 @@
 extern "C" {
 #endif
 
+enum nftnl_udata_table_types {
+       NFTNL_UDATA_TABLE_COMMENT,
+       __NFTNL_UDATA_TABLE_MAX
+};
+#define NFTNL_UDATA_TABLE_MAX (__NFTNL_UDATA_TABLE_MAX - 1)
+
+enum nftnl_udata_chain_types {
+       NFTNL_UDATA_CHAIN_COMMENT,
+       __NFTNL_UDATA_CHAIN_MAX
+};
+#define NFTNL_UDATA_CHAIN_MAX (__NFTNL_UDATA_CHAIN_MAX - 1)
+
 enum nftnl_udata_rule_types {
        NFTNL_UDATA_RULE_COMMENT,
        NFTNL_UDATA_RULE_EBTABLES_POLICY,
@@ -16,6 +28,12 @@
 };
 #define NFTNL_UDATA_RULE_MAX (__NFTNL_UDATA_RULE_MAX - 1)
 
+enum nftnl_udata_obj_types {
+       NFTNL_UDATA_OBJ_COMMENT,
+       __NFTNL_UDATA_OBJ_MAX
+};
+#define NFTNL_UDATA_OBJ_MAX (__NFTNL_UDATA_OBJ_MAX - 1)
+
 #define NFTNL_UDATA_COMMENT_MAXLEN     128
 
 enum nftnl_udata_set_types {
@@ -26,6 +44,7 @@
        NFTNL_UDATA_SET_DATA_TYPEOF,
        NFTNL_UDATA_SET_EXPR,
        NFTNL_UDATA_SET_DATA_INTERVAL,
+       NFTNL_UDATA_SET_COMMENT,
        __NFTNL_UDATA_SET_MAX
 };
 #define NFTNL_UDATA_SET_MAX (__NFTNL_UDATA_SET_MAX - 1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/include/linux/netfilter/nf_tables.h 
new/libnftnl-1.1.8/include/linux/netfilter/nf_tables.h
--- old/libnftnl-1.1.7/include/linux/netfilter/nf_tables.h      2020-06-05 
13:21:59.321748947 +0200
+++ new/libnftnl-1.1.8/include/linux/netfilter/nf_tables.h      2020-10-27 
10:38:31.797284212 +0100
@@ -180,6 +180,7 @@
        NFTA_TABLE_USE,
        NFTA_TABLE_HANDLE,
        NFTA_TABLE_PAD,
+       NFTA_TABLE_USERDATA,
        __NFTA_TABLE_MAX
 };
 #define NFTA_TABLE_MAX         (__NFTA_TABLE_MAX - 1)
@@ -196,6 +197,7 @@
  * @NFTA_CHAIN_TYPE: type name of the string (NLA_NUL_STRING)
  * @NFTA_CHAIN_COUNTERS: counter specification of the chain (NLA_NESTED: 
nft_counter_attributes)
  * @NFTA_CHAIN_FLAGS: chain flags
+ * @NFTA_CHAIN_USERDATA: user data (NLA_BINARY)
  */
 enum nft_chain_attributes {
        NFTA_CHAIN_UNSPEC,
@@ -209,6 +211,8 @@
        NFTA_CHAIN_COUNTERS,
        NFTA_CHAIN_PAD,
        NFTA_CHAIN_FLAGS,
+       NFTA_CHAIN_ID,
+       NFTA_CHAIN_USERDATA,
        __NFTA_CHAIN_MAX
 };
 #define NFTA_CHAIN_MAX         (__NFTA_CHAIN_MAX - 1)
@@ -471,6 +475,7 @@
        NFTA_VERDICT_UNSPEC,
        NFTA_VERDICT_CODE,
        NFTA_VERDICT_CHAIN,
+       NFTA_VERDICT_CHAIN_ID,
        __NFTA_VERDICT_MAX
 };
 #define NFTA_VERDICT_MAX       (__NFTA_VERDICT_MAX - 1)
@@ -992,10 +997,12 @@
  *
  * @NFT_SOCKET_TRANSPARENT: Value of the IP(V6)_TRANSPARENT socket option
  * @NFT_SOCKET_MARK: Value of the socket mark
+ * @NFT_SOCKET_WILDCARD: Whether the socket is zero-bound (e.g. 0.0.0.0 or ::0)
  */
 enum nft_socket_keys {
        NFT_SOCKET_TRANSPARENT,
        NFT_SOCKET_MARK,
+       NFT_SOCKET_WILDCARD,
        __NFT_SOCKET_MAX
 };
 #define NFT_SOCKET_MAX (__NFT_SOCKET_MAX - 1)
@@ -1539,6 +1546,7 @@
  * @NFTA_OBJ_DATA: stateful object data (NLA_NESTED)
  * @NFTA_OBJ_USE: number of references to this expression (NLA_U32)
  * @NFTA_OBJ_HANDLE: object handle (NLA_U64)
+ * @NFTA_OBJ_USERDATA: user data (NLA_BINARY)
  */
 enum nft_object_attributes {
        NFTA_OBJ_UNSPEC,
@@ -1549,6 +1557,7 @@
        NFTA_OBJ_USE,
        NFTA_OBJ_HANDLE,
        NFTA_OBJ_PAD,
+       NFTA_OBJ_USERDATA,
        __NFTA_OBJ_MAX
 };
 #define NFTA_OBJ_MAX           (__NFTA_OBJ_MAX - 1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/include/obj.h 
new/libnftnl-1.1.8/include/obj.h
--- old/libnftnl-1.1.7/include/obj.h    2020-06-05 13:21:59.321748947 +0200
+++ new/libnftnl-1.1.8/include/obj.h    2020-10-27 10:38:31.797284212 +0100
@@ -22,6 +22,11 @@
        uint32_t                flags;
        uint64_t                handle;
 
+       struct {
+               void            *data;
+               uint32_t        len;
+       } user;
+
        union {
                struct nftnl_obj_counter {
                        uint64_t        pkts;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/src/Makefile.in 
new/libnftnl-1.1.8/src/Makefile.in
--- old/libnftnl-1.1.7/src/Makefile.in  2020-06-05 13:22:11.137745672 +0200
+++ new/libnftnl-1.1.8/src/Makefile.in  2020-10-27 10:38:45.065261754 +0100
@@ -396,7 +396,7 @@
 # set age to 0.
 # </snippet>
 #
-LIBVERSION = 14:0:3
+LIBVERSION = 15:0:4
 AM_CPPFLAGS = ${regular_CPPFLAGS} -I${top_srcdir}/include ${LIBMNL_CFLAGS} 
${LIBMXML_CFLAGS}
 AM_CFLAGS = ${regular_CFLAGS} ${GCC_FVISIBILITY_HIDDEN}
 lib_LTLIBRARIES = libnftnl.la
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/src/chain.c 
new/libnftnl-1.1.8/src/chain.c
--- old/libnftnl-1.1.7/src/chain.c      2020-06-05 13:21:59.321748947 +0200
+++ new/libnftnl-1.1.8/src/chain.c      2020-10-27 10:38:31.805284199 +0100
@@ -49,6 +49,12 @@
        uint64_t        bytes;
        uint64_t        handle;
        uint32_t        flags;
+       uint32_t        chain_id;
+
+       struct {
+               void            *data;
+               uint32_t        len;
+       } user;
 
        struct list_head rule_list;
 };
@@ -124,6 +130,8 @@
                xfree(c->type);
        if (c->flags & (1 << NFTNL_CHAIN_DEV))
                xfree(c->dev);
+       if (c->flags & (1 << NFTNL_CHAIN_USERDATA))
+               xfree(c->user.data);
        if (c->flags & (1 << NFTNL_CHAIN_DEVICES)) {
                for (i = 0; i < c->dev_array_len; i++)
                        xfree(c->dev_array[i]);
@@ -167,6 +175,7 @@
        case NFTNL_CHAIN_HANDLE:
        case NFTNL_CHAIN_FAMILY:
        case NFTNL_CHAIN_FLAGS:
+       case NFTNL_CHAIN_ID:
                break;
        case NFTNL_CHAIN_DEV:
                xfree(c->dev);
@@ -192,6 +201,7 @@
        [NFTNL_CHAIN_HANDLE]            = sizeof(uint64_t),
        [NFTNL_CHAIN_FAMILY]            = sizeof(uint32_t),
        [NFTNL_CHAIN_FLAGS]             = sizeof(uint32_t),
+       [NFTNL_CHAIN_ID]                = sizeof(uint32_t),
 };
 
 EXPORT_SYMBOL(nftnl_chain_set_data);
@@ -284,6 +294,19 @@
        case NFTNL_CHAIN_FLAGS:
                memcpy(&c->chain_flags, data, sizeof(c->chain_flags));
                break;
+       case NFTNL_CHAIN_ID:
+               memcpy(&c->chain_id, data, sizeof(c->chain_id));
+               break;
+       case NFTNL_CHAIN_USERDATA:
+               if (c->flags & (1 << NFTNL_CHAIN_USERDATA))
+                       xfree(c->user.data);
+
+               c->user.data = malloc(data_len);
+               if (!c->user.data)
+                       return -1;
+               memcpy(c->user.data, data, data_len);
+               c->user.len = data_len;
+               break;
        }
        c->flags |= (1 << attr);
        return 0;
@@ -382,6 +405,12 @@
        case NFTNL_CHAIN_FLAGS:
                *data_len = sizeof(uint32_t);
                return &c->chain_flags;
+       case NFTNL_CHAIN_ID:
+               *data_len = sizeof(uint32_t);
+               return &c->chain_id;
+       case NFTNL_CHAIN_USERDATA:
+               *data_len = c->user.len;
+               return c->user.data;
        }
        return NULL;
 }
@@ -502,6 +531,10 @@
                mnl_attr_put_strz(nlh, NFTA_CHAIN_TYPE, c->type);
        if (c->flags & (1 << NFTNL_CHAIN_FLAGS))
                mnl_attr_put_u32(nlh, NFTA_CHAIN_FLAGS, htonl(c->chain_flags));
+       if (c->flags & (1 << NFTNL_CHAIN_ID))
+               mnl_attr_put_u32(nlh, NFTA_CHAIN_ID, htonl(c->chain_id));
+       if (c->flags & (1 << NFTNL_CHAIN_USERDATA))
+               mnl_attr_put(nlh, NFTA_CHAIN_USERDATA, c->user.len, 
c->user.data);
 }
 
 EXPORT_SYMBOL(nftnl_chain_rule_add);
@@ -557,6 +590,7 @@
        case NFTA_CHAIN_POLICY:
        case NFTA_CHAIN_USE:
        case NFTA_CHAIN_FLAGS:
+       case NFTA_CHAIN_ID:
                if (mnl_attr_validate(attr, MNL_TYPE_U32) < 0)
                        abi_breakage();
                break;
@@ -564,6 +598,10 @@
                if (mnl_attr_validate(attr, MNL_TYPE_U64) < 0)
                        abi_breakage();
                break;
+       case NFTA_CHAIN_USERDATA:
+               if (mnl_attr_validate(attr, MNL_TYPE_BINARY) < 0)
+                       abi_breakage();
+               break;
        }
 
        tb[type] = attr;
@@ -761,6 +799,15 @@
                c->chain_flags = ntohl(mnl_attr_get_u32(tb[NFTA_CHAIN_FLAGS]));
                c->flags |= (1 << NFTNL_CHAIN_FLAGS);
        }
+       if (tb[NFTA_CHAIN_ID]) {
+               c->chain_id = ntohl(mnl_attr_get_u32(tb[NFTA_CHAIN_ID]));
+               c->flags |= (1 << NFTNL_CHAIN_ID);
+       }
+       if (tb[NFTA_CHAIN_USERDATA]) {
+               nftnl_chain_set_data(c, NFTNL_CHAIN_USERDATA,
+                                    
mnl_attr_get_payload(tb[NFTA_CHAIN_USERDATA]),
+                                    
mnl_attr_get_payload_len(tb[NFTA_CHAIN_USERDATA]));
+       }
 
        c->family = nfg->nfgen_family;
        c->flags |= (1 << NFTNL_CHAIN_FAMILY);
@@ -827,6 +874,11 @@
                                       c->chain_flags);
                        SNPRINTF_BUFFER_SIZE(ret, remain, offset);
                }
+               if (c->flags & (1 << NFTNL_CHAIN_ID)) {
+                       ret = snprintf(buf + offset, remain, " id %x",
+                                      c->chain_id);
+                       SNPRINTF_BUFFER_SIZE(ret, remain, offset);
+               }
        }
 
        return offset;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/src/expr/data_reg.c 
new/libnftnl-1.1.8/src/expr/data_reg.c
--- old/libnftnl-1.1.7/src/expr/data_reg.c      2020-06-05 13:21:59.321748947 
+0200
+++ new/libnftnl-1.1.8/src/expr/data_reg.c      2020-10-27 10:38:31.809284191 
+0100
@@ -125,6 +125,7 @@
 
        switch(type) {
        case NFTA_VERDICT_CODE:
+       case NFTA_VERDICT_CHAIN_ID:
                if (mnl_attr_validate(attr, MNL_TYPE_U32) < 0)
                        abi_breakage();
                break;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/src/expr/immediate.c 
new/libnftnl-1.1.8/src/expr/immediate.c
--- old/libnftnl-1.1.7/src/expr/immediate.c     2020-06-05 13:21:59.325748946 
+0200
+++ new/libnftnl-1.1.8/src/expr/immediate.c     2020-10-27 10:38:31.813284185 
+0100
@@ -50,6 +50,9 @@
                if (!imm->data.chain)
                        return -1;
                break;
+       case NFTNL_EXPR_IMM_CHAIN_ID:
+               memcpy(&imm->data.chain_id, data, sizeof(uint32_t));
+               break;
        default:
                return -1;
        }
@@ -75,6 +78,9 @@
        case NFTNL_EXPR_IMM_CHAIN:
                *data_len = strlen(imm->data.chain)+1;
                return imm->data.chain;
+       case NFTNL_EXPR_IMM_CHAIN_ID:
+               *data_len = sizeof(imm->data.chain_id);
+               return &imm->data.chain_id;
        }
        return NULL;
 }
@@ -126,6 +132,10 @@
                mnl_attr_put_u32(nlh, NFTA_VERDICT_CODE, 
htonl(imm->data.verdict));
                if (e->flags & (1 << NFTNL_EXPR_IMM_CHAIN))
                        mnl_attr_put_strz(nlh, NFTA_VERDICT_CHAIN, 
imm->data.chain);
+               if (e->flags & (1 << NFTNL_EXPR_IMM_CHAIN_ID)) {
+                       mnl_attr_put_u32(nlh, NFTA_VERDICT_CHAIN_ID,
+                                        htonl(imm->data.chain_id));
+               }
 
                mnl_attr_nest_end(nlh, nest1);
                mnl_attr_nest_end(nlh, nest2);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/src/expr/socket.c 
new/libnftnl-1.1.8/src/expr/socket.c
--- old/libnftnl-1.1.7/src/expr/socket.c        2020-06-05 13:21:59.325748946 
+0200
+++ new/libnftnl-1.1.8/src/expr/socket.c        2020-10-27 10:38:31.821284172 
+0100
@@ -115,6 +115,7 @@
 static const char *socket_key2str_array[NFT_SOCKET_MAX + 1] = {
        [NFT_SOCKET_TRANSPARENT] = "transparent",
        [NFT_SOCKET_MARK] = "mark",
+       [NFT_SOCKET_WILDCARD] = "wildcard",
 };
 
 static const char *socket_key2str(uint8_t key)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/src/expr.c 
new/libnftnl-1.1.8/src/expr.c
--- old/libnftnl-1.1.7/src/expr.c       2020-06-05 13:21:59.321748947 +0200
+++ new/libnftnl-1.1.8/src/expr.c       2020-10-27 10:38:31.805284199 +0100
@@ -203,6 +203,7 @@
        return (const char *)nftnl_expr_get(expr, type, &data_len);
 }
 
+EXPORT_SYMBOL(nftnl_expr_build_payload);
 void nftnl_expr_build_payload(struct nlmsghdr *nlh, struct nftnl_expr *expr)
 {
        struct nlattr *nest;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/src/libnftnl.map 
new/libnftnl-1.1.8/src/libnftnl.map
--- old/libnftnl-1.1.7/src/libnftnl.map 2020-06-05 13:21:59.325748946 +0200
+++ new/libnftnl-1.1.8/src/libnftnl.map 2020-10-27 10:38:31.825284165 +0100
@@ -169,7 +169,7 @@
   nftnl_set_elem_parse;
   nftnl_set_elem_parse_file;
   nftnl_set_elem_snprintf;
-  nftnl_set_elem_fprinf;
+  nftnl_set_elem_fprintf;
 
   nftnl_set_elems_nlmsg_build_payload;
   nftnl_set_elems_nlmsg_parse;
@@ -368,3 +368,9 @@
   nftnl_flowtable_set_array;
   nftnl_flowtable_get_array;
 } LIBNFTNL_13;
+
+LIBNFTNL_15 {
+  nftnl_obj_get_data;
+  nftnl_expr_build_payload;
+  nftnl_rule_del_expr;
+} LIBNFTNL_14;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/src/object.c 
new/libnftnl-1.1.8/src/object.c
--- old/libnftnl-1.1.7/src/object.c     2020-06-05 13:21:59.329748945 +0200
+++ new/libnftnl-1.1.8/src/object.c     2020-10-27 10:38:31.829284157 +0100
@@ -57,6 +57,8 @@
                xfree(obj->table);
        if (obj->flags & (1 << NFTNL_OBJ_NAME))
                xfree(obj->name);
+       if (obj->flags & (1 << NFTNL_OBJ_USERDATA))
+               xfree(obj->user.data);
 
        xfree(obj);
 }
@@ -103,6 +105,16 @@
        case NFTNL_OBJ_HANDLE:
                memcpy(&obj->handle, data, sizeof(obj->handle));
                break;
+       case NFTNL_OBJ_USERDATA:
+               if (obj->flags & (1 << NFTNL_OBJ_USERDATA))
+                       xfree(obj->user.data);
+
+               obj->user.data = malloc(data_len);
+               if (!obj->user.data)
+                       return;
+               memcpy(obj->user.data, data, data_len);
+               obj->user.len = data_len;
+               break;
        default:
                if (obj->ops)
                        obj->ops->set(obj, attr, data, data_len);
@@ -174,6 +186,9 @@
        case NFTNL_OBJ_HANDLE:
                *data_len = sizeof(uint64_t);
                return &obj->handle;
+       case NFTNL_OBJ_USERDATA:
+               *data_len = obj->user.len;
+               return obj->user.data;
        default:
                if (obj->ops)
                        return obj->ops->get(obj, attr, data_len);
@@ -235,6 +250,8 @@
                mnl_attr_put_u32(nlh, NFTA_OBJ_TYPE, htonl(obj->ops->type));
        if (obj->flags & (1 << NFTNL_OBJ_HANDLE))
                mnl_attr_put_u64(nlh, NFTA_OBJ_HANDLE, htobe64(obj->handle));
+       if (obj->flags & (1 << NFTNL_OBJ_USERDATA))
+               mnl_attr_put(nlh, NFTA_OBJ_USERDATA, obj->user.len, 
obj->user.data);
        if (obj->ops) {
                struct nlattr *nest = mnl_attr_nest_start(nlh, NFTA_OBJ_DATA);
 
@@ -269,6 +286,10 @@
                if (mnl_attr_validate(attr, MNL_TYPE_U32) < 0)
                        abi_breakage();
                break;
+       case NFTA_OBJ_USERDATA:
+               if (mnl_attr_validate(attr, MNL_TYPE_BINARY) < 0)
+                       abi_breakage();
+               break;
        }
 
        tb[type] = attr;
@@ -315,6 +336,11 @@
                obj->handle = be64toh(mnl_attr_get_u64(tb[NFTA_OBJ_HANDLE]));
                obj->flags |= (1 << NFTNL_OBJ_HANDLE);
        }
+       if (tb[NFTA_OBJ_USERDATA]) {
+               nftnl_obj_set_data(obj, NFTNL_OBJ_USERDATA,
+                                  mnl_attr_get_payload(tb[NFTA_OBJ_USERDATA]),
+                                  
mnl_attr_get_payload_len(tb[NFTA_OBJ_USERDATA]));
+       }
 
        obj->family = nfg->nfgen_family;
        obj->flags |= (1 << NFTNL_OBJ_FAMILY);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/src/rule.c 
new/libnftnl-1.1.8/src/rule.c
--- old/libnftnl-1.1.7/src/rule.c       2020-06-05 13:21:59.329748945 +0200
+++ new/libnftnl-1.1.8/src/rule.c       2020-10-27 10:38:31.829284157 +0100
@@ -330,6 +330,12 @@
        list_add_tail(&expr->head, &r->expr_list);
 }
 
+EXPORT_SYMBOL(nftnl_rule_del_expr);
+void nftnl_rule_del_expr(struct nftnl_expr *expr)
+{
+       list_del(&expr->head);
+}
+
 static int nftnl_rule_parse_attr_cb(const struct nlattr *attr, void *data)
 {
        const struct nlattr **tb = data;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/src/set_elem.c 
new/libnftnl-1.1.8/src/set_elem.c
--- old/libnftnl-1.1.7/src/set_elem.c   2020-06-05 13:21:59.329748945 +0200
+++ new/libnftnl-1.1.8/src/set_elem.c   2020-10-27 10:38:31.833284151 +0100
@@ -706,7 +706,7 @@
 }
 
 EXPORT_SYMBOL(nftnl_set_elem_fprintf);
-int nftnl_set_elem_fprintf(FILE *fp, struct nftnl_set_elem *se, uint32_t type,
+int nftnl_set_elem_fprintf(FILE *fp, const struct nftnl_set_elem *se, uint32_t 
type,
                         uint32_t flags)
 {
        return nftnl_fprintf(fp, se, NFTNL_CMD_UNSPEC, type, flags,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/src/table.c 
new/libnftnl-1.1.8/src/table.c
--- old/libnftnl-1.1.7/src/table.c      2020-06-05 13:21:59.329748945 +0200
+++ new/libnftnl-1.1.8/src/table.c      2020-10-27 10:38:31.833284151 +0100
@@ -34,6 +34,10 @@
        uint64_t        handle;
        uint32_t        use;
        uint32_t        flags;
+       struct {
+               void            *data;
+               uint32_t        len;
+       } user;
 };
 
 EXPORT_SYMBOL(nftnl_table_alloc);
@@ -47,6 +51,8 @@
 {
        if (t->flags & (1 << NFTNL_TABLE_NAME))
                xfree(t->name);
+       if (t->flags & (1 << NFTNL_TABLE_USERDATA))
+               xfree(t->user.data);
 
        xfree(t);
 }
@@ -111,6 +117,16 @@
        case NFTNL_TABLE_USE:
                memcpy(&t->use, data, sizeof(t->use));
                break;
+       case NFTNL_TABLE_USERDATA:
+               if (t->flags & (1 << NFTNL_TABLE_USERDATA))
+                       xfree(t->user.data);
+
+               t->user.data = malloc(data_len);
+               if (!t->user.data)
+                       return -1;
+               memcpy(t->user.data, data, data_len);
+               t->user.len = data_len;
+               break;
        }
        t->flags |= (1 << attr);
        return 0;
@@ -169,6 +185,9 @@
        case NFTNL_TABLE_USE:
                *data_len = sizeof(uint32_t);
                return &t->use;
+       case NFTNL_TABLE_USERDATA:
+               *data_len = t->user.len;
+               return t->user.data;
        }
        return NULL;
 }
@@ -216,6 +235,8 @@
                mnl_attr_put_u64(nlh, NFTA_TABLE_HANDLE, htobe64(t->handle));
        if (t->flags & (1 << NFTNL_TABLE_FLAGS))
                mnl_attr_put_u32(nlh, NFTA_TABLE_FLAGS, htonl(t->table_flags));
+       if (t->flags & (1 << NFTNL_TABLE_USERDATA))
+               mnl_attr_put(nlh, NFTA_TABLE_USERDATA, t->user.len, 
t->user.data);
 }
 
 static int nftnl_table_parse_attr_cb(const struct nlattr *attr, void *data)
@@ -240,6 +261,10 @@
                if (mnl_attr_validate(attr, MNL_TYPE_U32) < 0)
                        abi_breakage();
                break;
+       case NFTA_TABLE_USERDATA:
+               if (mnl_attr_validate(attr, MNL_TYPE_BINARY) < 0)
+                       abi_breakage();
+               break;
        }
 
        tb[type] = attr;
@@ -251,6 +276,7 @@
 {
        struct nlattr *tb[NFTA_TABLE_MAX+1] = {};
        struct nfgenmsg *nfg = mnl_nlmsg_get_payload(nlh);
+       int ret;
 
        if (mnl_attr_parse(nlh, sizeof(*nfg), nftnl_table_parse_attr_cb, tb) < 
0)
                return -1;
@@ -275,6 +301,13 @@
                t->handle = be64toh(mnl_attr_get_u64(tb[NFTA_TABLE_HANDLE]));
                t->flags |= (1 << NFTNL_TABLE_HANDLE);
        }
+       if (tb[NFTA_TABLE_USERDATA]) {
+               ret = nftnl_table_set_data(t, NFTNL_TABLE_USERDATA,
+                       mnl_attr_get_payload(tb[NFTA_TABLE_USERDATA]),
+                       mnl_attr_get_payload_len(tb[NFTA_TABLE_USERDATA]));
+               if (ret < 0)
+                       return ret;
+       }
 
        t->family = nfg->nfgen_family;
        t->flags |= (1 << NFTNL_TABLE_FAMILY);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libnftnl-1.1.7/tests/Makefile.in 
new/libnftnl-1.1.8/tests/Makefile.in
--- old/libnftnl-1.1.7/tests/Makefile.in        2020-06-05 13:22:11.233745645 
+0200
+++ new/libnftnl-1.1.8/tests/Makefile.in        2020-10-27 10:38:45.217261497 
+0100
@@ -730,7 +730,7 @@
 # set age to 0.
 # </snippet>
 #
-LIBVERSION = 14:0:3
+LIBVERSION = 15:0:4
 AM_CPPFLAGS = ${regular_CPPFLAGS} -I${top_srcdir}/include ${LIBMNL_CFLAGS} 
${LIBMXML_CFLAGS}
 AM_CFLAGS = ${regular_CFLAGS} ${GCC_FVISIBILITY_HIDDEN}
 TESTS = $(check_PROGRAMS)


Reply via email to