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)
