Commit dd6b25de authored by Arturo Borrero Gonzalez's avatar Arturo Borrero Gonzalez
Browse files

Merge tag 'upstream/1.6.0+snapshot20161117'

Upstream version 1.6.0+snapshot20161117
parents 8fceaf37 7b095084
/ip6tables
/ip6tables-save
/ip6tables-restore
/ip6tables-static
/iptables
/iptables.8
/iptables-extensions.8
/iptables-extensions.8.tmpl
/iptables-save
/iptables-save.8
/iptables-restore
/iptables-restore.8
/iptables-static
/iptables-xml
/iptables-xml.1
/xtables-multi
/xtables-config-parser.c
/xtables-config-parser.h
/xtables-config-syntax.c
/xtables.pc
...@@ -4,6 +4,8 @@ AM_CFLAGS = ${regular_CFLAGS} ...@@ -4,6 +4,8 @@ AM_CFLAGS = ${regular_CFLAGS}
AM_CPPFLAGS = ${regular_CPPFLAGS} -I${top_builddir}/include -I${top_srcdir}/include ${kinclude_CPPFLAGS} ${libmnl_CFLAGS} ${libnftnl_CFLAGS} ${libnetfilter_conntrack_CFLAGS} AM_CPPFLAGS = ${regular_CPPFLAGS} -I${top_builddir}/include -I${top_srcdir}/include ${kinclude_CPPFLAGS} ${libmnl_CFLAGS} ${libnftnl_CFLAGS} ${libnetfilter_conntrack_CFLAGS}
AM_YFLAGS = -d AM_YFLAGS = -d
BUILT_SOURCES =
xtables_multi_SOURCES = xtables-multi.c iptables-xml.c xtables_multi_SOURCES = xtables-multi.c iptables-xml.c
xtables_multi_CFLAGS = ${AM_CFLAGS} xtables_multi_CFLAGS = ${AM_CFLAGS}
xtables_multi_LDADD = ../extensions/libext.a xtables_multi_LDADD = ../extensions/libext.a
...@@ -27,6 +29,7 @@ xtables_multi_LDADD += ../libxtables/libxtables.la -lm ...@@ -27,6 +29,7 @@ xtables_multi_LDADD += ../libxtables/libxtables.la -lm
# nftables compatibility layer # nftables compatibility layer
if ENABLE_NFTABLES if ENABLE_NFTABLES
BUILT_SOURCES += xtables-config-parser.h
xtables_compat_multi_SOURCES = xtables-compat-multi.c iptables-xml.c xtables_compat_multi_SOURCES = xtables-compat-multi.c iptables-xml.c
xtables_compat_multi_CFLAGS = ${AM_CFLAGS} xtables_compat_multi_CFLAGS = ${AM_CFLAGS}
xtables_compat_multi_LDADD = ../extensions/libext.a ../extensions/libext_ebt.a xtables_compat_multi_LDADD = ../extensions/libext.a ../extensions/libext_ebt.a
...@@ -40,7 +43,8 @@ xtables_compat_multi_SOURCES += xtables-save.c xtables-restore.c \ ...@@ -40,7 +43,8 @@ xtables_compat_multi_SOURCES += xtables-save.c xtables-restore.c \
nft-shared.c nft-ipv4.c nft-ipv6.c nft-arp.c \ nft-shared.c nft-ipv4.c nft-ipv6.c nft-arp.c \
xtables-arp-standalone.c xtables-arp.c \ xtables-arp-standalone.c xtables-arp.c \
getethertype.c nft-bridge.c \ getethertype.c nft-bridge.c \
xtables-eb-standalone.c xtables-eb.c xtables-eb-standalone.c xtables-eb.c \
xtables-translate.c
xtables_compat_multi_LDADD += ${libmnl_LIBS} ${libnftnl_LIBS} ${libnetfilter_conntrack_LIBS} ../extensions/libext4.a ../extensions/libext6.a ../extensions/libext_ebt.a ../extensions/libext_arpt.a xtables_compat_multi_LDADD += ${libmnl_LIBS} ${libnftnl_LIBS} ${libnetfilter_conntrack_LIBS} ../extensions/libext4.a ../extensions/libext6.a ../extensions/libext_ebt.a ../extensions/libext_arpt.a
# yacc and lex generate dirty code # yacc and lex generate dirty code
xtables_compat_multi-xtables-config-parser.o xtables_compat_multi-xtables-config-syntax.o: AM_CFLAGS += -Wno-missing-prototypes -Wno-missing-declarations -Wno-implicit-function-declaration -Wno-nested-externs -Wno-undef -Wno-redundant-decls xtables_compat_multi-xtables-config-parser.o xtables_compat_multi-xtables-config-syntax.o: AM_CFLAGS += -Wno-missing-prototypes -Wno-missing-declarations -Wno-implicit-function-declaration -Wno-nested-externs -Wno-undef -Wno-redundant-decls
...@@ -68,6 +72,8 @@ endif ...@@ -68,6 +72,8 @@ endif
if ENABLE_NFTABLES if ENABLE_NFTABLES
x_sbin_links = iptables-compat iptables-compat-restore iptables-compat-save \ x_sbin_links = iptables-compat iptables-compat-restore iptables-compat-save \
ip6tables-compat ip6tables-compat-restore ip6tables-compat-save \ ip6tables-compat ip6tables-compat-restore ip6tables-compat-save \
iptables-translate ip6tables-translate \
iptables-restore-translate ip6tables-restore-translate \
arptables-compat ebtables-compat arptables-compat ebtables-compat
endif endif
......
# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
# -*- Makefile -*-
VPATH = @srcdir@
am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
bs=\\; \
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
fi; \
skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
@ENABLE_STATIC_TRUE@am__append_1 = -DALL_INCLUSIVE
@ENABLE_IPV4_TRUE@am__append_2 = iptables-save.c iptables-restore.c \
@ENABLE_IPV4_TRUE@ iptables-standalone.c iptables.c
@ENABLE_IPV4_TRUE@am__append_3 = -DENABLE_IPV4
@ENABLE_IPV4_TRUE@am__append_4 = ../libiptc/libip4tc.la ../extensions/libext4.a
@ENABLE_IPV6_TRUE@am__append_5 = ip6tables-save.c ip6tables-restore.c \
@ENABLE_IPV6_TRUE@ ip6tables-standalone.c ip6tables.c
@ENABLE_IPV6_TRUE@am__append_6 = -DENABLE_IPV6
@ENABLE_IPV6_TRUE@am__append_7 = ../libiptc/libip6tc.la ../extensions/libext6.a
@ENABLE_NFTABLES_TRUE@@ENABLE_STATIC_TRUE@am__append_8 = -DALL_INCLUSIVE
sbin_PROGRAMS = xtables-multi$(EXEEXT) $(am__EXEEXT_1)
@ENABLE_NFTABLES_TRUE@am__append_9 = xtables-compat-multi
subdir = iptables
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(srcdir)/xtables.pc.in $(srcdir)/iptables.8.in \
$(srcdir)/iptables-extensions.8.tmpl.in \
$(srcdir)/iptables-save.8.in $(srcdir)/iptables-restore.8.in \
$(srcdir)/iptables-apply.8.in $(srcdir)/iptables-xml.1.in \
xtables-config-parser.h xtables-config-parser.c \
xtables-config-syntax.c $(top_srcdir)/build-aux/depcomp \
$(top_srcdir)/build-aux/ylwrap
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_linker_flags.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES = xtables.pc iptables.8 iptables-extensions.8.tmpl \
iptables-save.8 iptables-restore.8 iptables-apply.8 \
iptables-xml.1
CONFIG_CLEAN_VPATH_FILES =
@ENABLE_NFTABLES_TRUE@am__EXEEXT_1 = xtables-compat-multi$(EXEEXT)
am__installdirs = "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man1dir)" \
"$(DESTDIR)$(man8dir)" "$(DESTDIR)$(pkgconfigdir)"
PROGRAMS = $(sbin_PROGRAMS)
am__xtables_compat_multi_SOURCES_DIST = xtables-compat-multi.c \
iptables-xml.c xtables-config-parser.y xtables-config-syntax.l \
xtables-save.c xtables-restore.c xtables-standalone.c \
xtables.c nft.c nft-shared.c nft-ipv4.c nft-ipv6.c nft-arp.c \
xtables-arp-standalone.c xtables-arp.c getethertype.c \
nft-bridge.c xtables-eb-standalone.c xtables-eb.c xshared.c
@ENABLE_NFTABLES_TRUE@am_xtables_compat_multi_OBJECTS = xtables_compat_multi-xtables-compat-multi.$(OBJEXT) \
@ENABLE_NFTABLES_TRUE@ xtables_compat_multi-iptables-xml.$(OBJEXT) \
@ENABLE_NFTABLES_TRUE@ xtables_compat_multi-xtables-config-parser.$(OBJEXT) \
@ENABLE_NFTABLES_TRUE@ xtables_compat_multi-xtables-config-syntax.$(OBJEXT) \
@ENABLE_NFTABLES_TRUE@ xtables_compat_multi-xtables-save.$(OBJEXT) \
@ENABLE_NFTABLES_TRUE@ xtables_compat_multi-xtables-restore.$(OBJEXT) \
@ENABLE_NFTABLES_TRUE@ xtables_compat_multi-xtables-standalone.$(OBJEXT) \
@ENABLE_NFTABLES_TRUE@ xtables_compat_multi-xtables.$(OBJEXT) \
@ENABLE_NFTABLES_TRUE@ xtables_compat_multi-nft.$(OBJEXT) \
@ENABLE_NFTABLES_TRUE@ xtables_compat_multi-nft-shared.$(OBJEXT) \
@ENABLE_NFTABLES_TRUE@ xtables_compat_multi-nft-ipv4.$(OBJEXT) \
@ENABLE_NFTABLES_TRUE@ xtables_compat_multi-nft-ipv6.$(OBJEXT) \
@ENABLE_NFTABLES_TRUE@ xtables_compat_multi-nft-arp.$(OBJEXT) \
@ENABLE_NFTABLES_TRUE@ xtables_compat_multi-xtables-arp-standalone.$(OBJEXT) \
@ENABLE_NFTABLES_TRUE@ xtables_compat_multi-xtables-arp.$(OBJEXT) \
@ENABLE_NFTABLES_TRUE@ xtables_compat_multi-getethertype.$(OBJEXT) \
@ENABLE_NFTABLES_TRUE@ xtables_compat_multi-nft-bridge.$(OBJEXT) \
@ENABLE_NFTABLES_TRUE@ xtables_compat_multi-xtables-eb-standalone.$(OBJEXT) \
@ENABLE_NFTABLES_TRUE@ xtables_compat_multi-xtables-eb.$(OBJEXT) \
@ENABLE_NFTABLES_TRUE@ xtables_compat_multi-xshared.$(OBJEXT)
xtables_compat_multi_OBJECTS = $(am_xtables_compat_multi_OBJECTS)
am__DEPENDENCIES_1 =
@ENABLE_NFTABLES_TRUE@xtables_compat_multi_DEPENDENCIES = \
@ENABLE_NFTABLES_TRUE@ ../extensions/libext.a \
@ENABLE_NFTABLES_TRUE@ ../extensions/libext_ebt.a \
@ENABLE_NFTABLES_TRUE@ $(am__DEPENDENCIES_1) \
@ENABLE_NFTABLES_TRUE@ $(am__DEPENDENCIES_1) \
@ENABLE_NFTABLES_TRUE@ $(am__DEPENDENCIES_1) \
@ENABLE_NFTABLES_TRUE@ ../extensions/libext4.a \
@ENABLE_NFTABLES_TRUE@ ../extensions/libext6.a \
@ENABLE_NFTABLES_TRUE@ ../extensions/libext_ebt.a \
@ENABLE_NFTABLES_TRUE@ ../extensions/libext_arpt.a \
@ENABLE_NFTABLES_TRUE@ ../libxtables/libxtables.la
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
xtables_compat_multi_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(xtables_compat_multi_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
$(LDFLAGS) -o $@
am__xtables_multi_SOURCES_DIST = xtables-multi.c iptables-xml.c \
iptables-save.c iptables-restore.c iptables-standalone.c \
iptables.c ip6tables-save.c ip6tables-restore.c \
ip6tables-standalone.c ip6tables.c xshared.c
@ENABLE_IPV4_TRUE@am__objects_1 = \
@ENABLE_IPV4_TRUE@ xtables_multi-iptables-save.$(OBJEXT) \
@ENABLE_IPV4_TRUE@ xtables_multi-iptables-restore.$(OBJEXT) \
@ENABLE_IPV4_TRUE@ xtables_multi-iptables-standalone.$(OBJEXT) \
@ENABLE_IPV4_TRUE@ xtables_multi-iptables.$(OBJEXT)
@ENABLE_IPV6_TRUE@am__objects_2 = \
@ENABLE_IPV6_TRUE@ xtables_multi-ip6tables-save.$(OBJEXT) \
@ENABLE_IPV6_TRUE@ xtables_multi-ip6tables-restore.$(OBJEXT) \
@ENABLE_IPV6_TRUE@ xtables_multi-ip6tables-standalone.$(OBJEXT) \
@ENABLE_IPV6_TRUE@ xtables_multi-ip6tables.$(OBJEXT)
am_xtables_multi_OBJECTS = xtables_multi-xtables-multi.$(OBJEXT) \
xtables_multi-iptables-xml.$(OBJEXT) $(am__objects_1) \
$(am__objects_2) xtables_multi-xshared.$(OBJEXT)
xtables_multi_OBJECTS = $(am_xtables_multi_OBJECTS)
xtables_multi_DEPENDENCIES = ../extensions/libext.a $(am__append_4) \
$(am__append_7) ../libxtables/libxtables.la
xtables_multi_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(xtables_multi_CFLAGS) \
$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
AM_V_CC = $(am__v_CC_@AM_V@)
am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
am__v_CC_1 =
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
LEXCOMPILE = $(LEX) $(AM_LFLAGS) $(LFLAGS)
LTLEXCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(LEX) $(AM_LFLAGS) $(LFLAGS)
AM_V_LEX = $(am__v_LEX_@AM_V@)
am__v_LEX_ = $(am__v_LEX_@AM_DEFAULT_V@)
am__v_LEX_0 = @echo " LEX " $@;
am__v_LEX_1 =
YLWRAP = $(top_srcdir)/build-aux/ylwrap
am__yacc_c2h = sed -e s/cc$$/hh/ -e s/cpp$$/hpp/ -e s/cxx$$/hxx/ \
-e s/c++$$/h++/ -e s/c$$/h/
YACCCOMPILE = $(YACC) $(AM_YFLAGS) $(YFLAGS)
LTYACCCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(YACC) $(AM_YFLAGS) $(YFLAGS)
AM_V_YACC = $(am__v_YACC_@AM_V@)
am__v_YACC_ = $(am__v_YACC_@AM_DEFAULT_V@)
am__v_YACC_0 = @echo " YACC " $@;
am__v_YACC_1 =
SOURCES = $(xtables_compat_multi_SOURCES) $(xtables_multi_SOURCES)
DIST_SOURCES = $(am__xtables_compat_multi_SOURCES_DIST) \
$(am__xtables_multi_SOURCES_DIST)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
am__install_max = 40
am__nobase_strip_setup = \
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
for p in $$list; do echo "$$p $$p"; done | \
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
if (++n[$$2] == $(am__install_max)) \
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
END { for (dir in files) print dir, files[dir] }'
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__uninstall_files_from_dir = { \
test -z "$$files" \
|| { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
$(am__cd) "$$dir" && rm -f $$files; }; \
}
man1dir = $(mandir)/man1
man8dir = $(mandir)/man8
NROFF = nroff
MANS = $(man_MANS)
DATA = $(pkgconfig_DATA)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
# *not* preserved.
am__uniquify_input = $(AWK) '\
BEGIN { nonempty = 0; } \
{ items[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in items) print i; }; } \
'
# Make sure the list of sources is unique. This is necessary because,
# e.g., the same source file might be shared among _SOURCES variables
# for different programs/libraries.
am__define_uniq_tagged_files = \
list='$(am__tagged_files)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
pkgdatadir = @pkgdatadir@
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
YACC = @YACC@
YFLAGS = @YFLAGS@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
blacklist_4_modules = @blacklist_4_modules@
blacklist_6_modules = @blacklist_6_modules@
blacklist_a_modules = @blacklist_a_modules@
blacklist_b_modules = @blacklist_b_modules@
blacklist_modules = @blacklist_modules@
blacklist_x_modules = @blacklist_x_modules@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
kbuilddir = @kbuilddir@
kinclude_CPPFLAGS = @kinclude_CPPFLAGS@
ksourcedir = @ksourcedir@
libdir = @libdir@
libexecdir = @libexecdir@
libiptc_LDFLAGS2 = @libiptc_LDFLAGS2@
libmnl_CFLAGS = @libmnl_CFLAGS@
libmnl_LIBS = @libmnl_LIBS@
libnetfilter_conntrack_CFLAGS = @libnetfilter_conntrack_CFLAGS@
libnetfilter_conntrack_LIBS = @libnetfilter_conntrack_LIBS@
libnfnetlink_CFLAGS = @libnfnetlink_CFLAGS@
libnfnetlink_LIBS = @libnfnetlink_LIBS@
libnftnl_CFLAGS = @libnftnl_CFLAGS@
libnftnl_LIBS = @libnftnl_LIBS@
libxtables_vage = @libxtables_vage@
libxtables_vcurrent = @libxtables_vcurrent@
libxtables_vmajor = @libxtables_vmajor@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
noundef_LDFLAGS = @noundef_LDFLAGS@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
pkgconfigdir = @pkgconfigdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
regular_CFLAGS = @regular_CFLAGS@
regular_CPPFLAGS = @regular_CPPFLAGS@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
xtlibdir = @xtlibdir@
AM_CFLAGS = ${regular_CFLAGS}
AM_CPPFLAGS = ${regular_CPPFLAGS} -I${top_builddir}/include -I${top_srcdir}/include ${kinclude_CPPFLAGS} ${libmnl_CFLAGS} ${libnftnl_CFLAGS} ${libnetfilter_conntrack_CFLAGS}
AM_YFLAGS = -d
xtables_multi_SOURCES = xtables-multi.c iptables-xml.c $(am__append_2) \
$(am__append_5) xshared.c
xtables_multi_CFLAGS = ${AM_CFLAGS} $(am__append_1) $(am__append_3) \
$(am__append_6)
xtables_multi_LDADD = ../extensions/libext.a $(am__append_4) \
$(am__append_7) ../libxtables/libxtables.la -lm
# nftables compatibility layer
@ENABLE_NFTABLES_TRUE@xtables_compat_multi_SOURCES = \
@ENABLE_NFTABLES_TRUE@ xtables-compat-multi.c iptables-xml.c \
@ENABLE_NFTABLES_TRUE@ xtables-config-parser.y \
@ENABLE_NFTABLES_TRUE@ xtables-config-syntax.l xtables-save.c \
@ENABLE_NFTABLES_TRUE@ xtables-restore.c xtables-standalone.c \
@ENABLE_NFTABLES_TRUE@ xtables.c nft.c nft-shared.c nft-ipv4.c \
@ENABLE_NFTABLES_TRUE@ nft-ipv6.c nft-arp.c \
@ENABLE_NFTABLES_TRUE@ xtables-arp-standalone.c xtables-arp.c \
@ENABLE_NFTABLES_TRUE@ getethertype.c nft-bridge.c \
@ENABLE_NFTABLES_TRUE@ xtables-eb-standalone.c xtables-eb.c \
@ENABLE_NFTABLES_TRUE@ xshared.c
@ENABLE_NFTABLES_TRUE@xtables_compat_multi_CFLAGS = ${AM_CFLAGS} \
@ENABLE_NFTABLES_TRUE@ $(am__append_8) -DENABLE_NFTABLES \
@ENABLE_NFTABLES_TRUE@ -DENABLE_IPV4 -DENABLE_IPV6
@ENABLE_NFTABLES_TRUE@xtables_compat_multi_LDADD = \
@ENABLE_NFTABLES_TRUE@ ../extensions/libext.a \
@ENABLE_NFTABLES_TRUE@ ../extensions/libext_ebt.a \
@ENABLE_NFTABLES_TRUE@ ${libmnl_LIBS} ${libnftnl_LIBS} \
@ENABLE_NFTABLES_TRUE@ ${libnetfilter_conntrack_LIBS} \
@ENABLE_NFTABLES_TRUE@ ../extensions/libext4.a \
@ENABLE_NFTABLES_TRUE@ ../extensions/libext6.a \
@ENABLE_NFTABLES_TRUE@ ../extensions/libext_ebt.a \
@ENABLE_NFTABLES_TRUE@ ../extensions/libext_arpt.a \
@ENABLE_NFTABLES_TRUE@ ../libxtables/libxtables.la -lm
man_MANS = iptables.8 iptables-restore.8 iptables-save.8 \
iptables-xml.1 ip6tables.8 ip6tables-restore.8 \
ip6tables-save.8 iptables-extensions.8
CLEANFILES = iptables.8 \
xtables-config-parser.c xtables-config-syntax.c
vx_bin_links = iptables-xml
@ENABLE_IPV4_TRUE@v4_sbin_links = iptables iptables-restore iptables-save
@ENABLE_IPV6_TRUE@v6_sbin_links = ip6tables ip6tables-restore ip6tables-save
@ENABLE_NFTABLES_TRUE@x_sbin_links = iptables-compat iptables-compat-restore iptables-compat-save \
@ENABLE_NFTABLES_TRUE@ ip6tables-compat ip6tables-compat-restore ip6tables-compat-save \
@ENABLE_NFTABLES_TRUE@ arptables-compat ebtables-compat
pkgconfig_DATA = xtables.pc
all: all-am
.SUFFIXES:
.SUFFIXES: .c .l .lo .o .obj .y
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu iptables/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu iptables/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
xtables.pc: $(top_builddir)/config.status $(srcdir)/xtables.pc.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
iptables.8: $(top_builddir)/config.status $(srcdir)/iptables.8.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
iptables-extensions.8.tmpl: $(top_builddir)/config.status $(srcdir)/iptables-extensions.8.tmpl.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
iptables-save.8: $(top_builddir)/config.status $(srcdir)/iptables-save.8.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
iptables-restore.8: $(top_builddir)/config.status $(srcdir)/iptables-restore.8.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
iptables-apply.8: $(top_builddir)/config.status $(srcdir)/iptables-apply.8.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
iptables-xml.1: $(top_builddir)/config.status $(srcdir)/iptables-xml.1.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
install-sbinPROGRAMS: $(sbin_PROGRAMS)
@$(NORMAL_INSTALL)
@list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \
$(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \
fi; \
for p in $$list; do echo "$$p $$p"; done | \
sed 's/$(EXEEXT)$$//' | \
while read p p1; do if test -f $$p \
|| test -f $$p1 \
; then echo "$$p"; echo "$$p"; else :; fi; \
done | \
sed -e 'p;s,.*/,,;n;h' \
-e 's|.*|.|' \
-e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
sed 'N;N;N;s,\n, ,g' | \
$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
{ d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
if ($$2 == $$4) files[d] = files[d] " " $$1; \
else { print "f", $$3 "/" $$4, $$1; } } \
END { for (d in files) print "f", d, files[d] }' | \
while read type dir files; do \
if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
test -z "$$files" || { \
echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \
$(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \
} \
; done
uninstall-sbinPROGRAMS:
@$(NORMAL_UNINSTALL)
@list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
files=`for p in $$list; do echo "$$p"; done | \
sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
-e 's/$$/$(EXEEXT)/' \
`; \
test -n "$$list" || exit 0; \
echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(sbindir)" && rm -f $$files
clean-sbinPROGRAMS:
@list='$(sbin_PROGRAMS)'; test -n "$$list" || exit 0; \
echo " rm -f" $$list; \
rm -f $$list || exit $$?; \
test -n "$(EXEEXT)" || exit 0; \
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
xtables-config-parser.h: xtables-config-parser.c
@if test ! -f $@; then rm -f xtables-config-parser.c; else :; fi
@if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) xtables-config-parser.c; else :; fi
xtables-compat-multi$(EXEEXT): $(xtables_compat_multi_OBJECTS) $(xtables_compat_multi_DEPENDENCIES) $(EXTRA_xtables_compat_multi_DEPENDENCIES)
@rm -f xtables-compat-multi$(EXEEXT)
$(AM_V_CCLD)$(xtables_compat_multi_LINK) $(xtables_compat_multi_OBJECTS) $(xtables_compat_multi_LDADD) $(LIBS)
xtables-multi$(EXEEXT): $(xtables_multi_OBJECTS) $(xtables_multi_DEPENDENCIES) $(EXTRA_xtables_multi_DEPENDENCIES)
@rm -f xtables-multi$(EXEEXT)
$(AM_V_CCLD)$(xtables_multi_LINK) $(xtables_multi_OBJECTS) $(xtables_multi_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtables_compat_multi-getethertype.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtables_compat_multi-iptables-xml.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtables_compat_multi-nft-arp.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtables_compat_multi-nft-bridge.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtables_compat_multi-nft-ipv4.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtables_compat_multi-nft-ipv6.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtables_compat_multi-nft-shared.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtables_compat_multi-nft.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtables_compat_multi-xshared.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtables_compat_multi-xtables-arp-standalone.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtables_compat_multi-xtables-arp.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtables_compat_multi-xtables-compat-multi.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtables_compat_multi-xtables-config-parser.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtables_compat_multi-xtables-config-syntax.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtables_compat_multi-xtables-eb-standalone.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtables_compat_multi-xtables-eb.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtables_compat_multi-xtables-restore.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtables_compat_multi-xtables-save.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtables_compat_multi-xtables-standalone.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtables_compat_multi-xtables.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtables_multi-ip6tables-restore.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtables_multi-ip6tables-save.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtables_multi-ip6tables-standalone.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtables_multi-ip6tables.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtables_multi-iptables-restore.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtables_multi-iptables-save.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtables_multi-iptables-standalone.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtables_multi-iptables-xml.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtables_multi-iptables.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtables_multi-xshared.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtables_multi-xtables-multi.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
xtables_compat_multi-xtables-compat-multi.o: xtables-compat-multi.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-xtables-compat-multi.o -MD -MP -MF $(DEPDIR)/xtables_compat_multi-xtables-compat-multi.Tpo -c -o xtables_compat_multi-xtables-compat-multi.o `test -f 'xtables-compat-multi.c' || echo '$(srcdir)/'`xtables-compat-multi.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-xtables-compat-multi.Tpo $(DEPDIR)/xtables_compat_multi-xtables-compat-multi.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xtables-compat-multi.c' object='xtables_compat_multi-xtables-compat-multi.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-xtables-compat-multi.o `test -f 'xtables-compat-multi.c' || echo '$(srcdir)/'`xtables-compat-multi.c
xtables_compat_multi-xtables-compat-multi.obj: xtables-compat-multi.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-xtables-compat-multi.obj -MD -MP -MF $(DEPDIR)/xtables_compat_multi-xtables-compat-multi.Tpo -c -o xtables_compat_multi-xtables-compat-multi.obj `if test -f 'xtables-compat-multi.c'; then $(CYGPATH_W) 'xtables-compat-multi.c'; else $(CYGPATH_W) '$(srcdir)/xtables-compat-multi.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-xtables-compat-multi.Tpo $(DEPDIR)/xtables_compat_multi-xtables-compat-multi.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xtables-compat-multi.c' object='xtables_compat_multi-xtables-compat-multi.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-xtables-compat-multi.obj `if test -f 'xtables-compat-multi.c'; then $(CYGPATH_W) 'xtables-compat-multi.c'; else $(CYGPATH_W) '$(srcdir)/xtables-compat-multi.c'; fi`
xtables_compat_multi-iptables-xml.o: iptables-xml.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-iptables-xml.o -MD -MP -MF $(DEPDIR)/xtables_compat_multi-iptables-xml.Tpo -c -o xtables_compat_multi-iptables-xml.o `test -f 'iptables-xml.c' || echo '$(srcdir)/'`iptables-xml.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-iptables-xml.Tpo $(DEPDIR)/xtables_compat_multi-iptables-xml.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iptables-xml.c' object='xtables_compat_multi-iptables-xml.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-iptables-xml.o `test -f 'iptables-xml.c' || echo '$(srcdir)/'`iptables-xml.c
xtables_compat_multi-iptables-xml.obj: iptables-xml.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-iptables-xml.obj -MD -MP -MF $(DEPDIR)/xtables_compat_multi-iptables-xml.Tpo -c -o xtables_compat_multi-iptables-xml.obj `if test -f 'iptables-xml.c'; then $(CYGPATH_W) 'iptables-xml.c'; else $(CYGPATH_W) '$(srcdir)/iptables-xml.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-iptables-xml.Tpo $(DEPDIR)/xtables_compat_multi-iptables-xml.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iptables-xml.c' object='xtables_compat_multi-iptables-xml.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-iptables-xml.obj `if test -f 'iptables-xml.c'; then $(CYGPATH_W) 'iptables-xml.c'; else $(CYGPATH_W) '$(srcdir)/iptables-xml.c'; fi`
xtables_compat_multi-xtables-config-parser.o: xtables-config-parser.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-xtables-config-parser.o -MD -MP -MF $(DEPDIR)/xtables_compat_multi-xtables-config-parser.Tpo -c -o xtables_compat_multi-xtables-config-parser.o `test -f 'xtables-config-parser.c' || echo '$(srcdir)/'`xtables-config-parser.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-xtables-config-parser.Tpo $(DEPDIR)/xtables_compat_multi-xtables-config-parser.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xtables-config-parser.c' object='xtables_compat_multi-xtables-config-parser.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-xtables-config-parser.o `test -f 'xtables-config-parser.c' || echo '$(srcdir)/'`xtables-config-parser.c
xtables_compat_multi-xtables-config-parser.obj: xtables-config-parser.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-xtables-config-parser.obj -MD -MP -MF $(DEPDIR)/xtables_compat_multi-xtables-config-parser.Tpo -c -o xtables_compat_multi-xtables-config-parser.obj `if test -f 'xtables-config-parser.c'; then $(CYGPATH_W) 'xtables-config-parser.c'; else $(CYGPATH_W) '$(srcdir)/xtables-config-parser.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-xtables-config-parser.Tpo $(DEPDIR)/xtables_compat_multi-xtables-config-parser.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xtables-config-parser.c' object='xtables_compat_multi-xtables-config-parser.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-xtables-config-parser.obj `if test -f 'xtables-config-parser.c'; then $(CYGPATH_W) 'xtables-config-parser.c'; else $(CYGPATH_W) '$(srcdir)/xtables-config-parser.c'; fi`
xtables_compat_multi-xtables-config-syntax.o: xtables-config-syntax.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-xtables-config-syntax.o -MD -MP -MF $(DEPDIR)/xtables_compat_multi-xtables-config-syntax.Tpo -c -o xtables_compat_multi-xtables-config-syntax.o `test -f 'xtables-config-syntax.c' || echo '$(srcdir)/'`xtables-config-syntax.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-xtables-config-syntax.Tpo $(DEPDIR)/xtables_compat_multi-xtables-config-syntax.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xtables-config-syntax.c' object='xtables_compat_multi-xtables-config-syntax.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-xtables-config-syntax.o `test -f 'xtables-config-syntax.c' || echo '$(srcdir)/'`xtables-config-syntax.c
xtables_compat_multi-xtables-config-syntax.obj: xtables-config-syntax.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-xtables-config-syntax.obj -MD -MP -MF $(DEPDIR)/xtables_compat_multi-xtables-config-syntax.Tpo -c -o xtables_compat_multi-xtables-config-syntax.obj `if test -f 'xtables-config-syntax.c'; then $(CYGPATH_W) 'xtables-config-syntax.c'; else $(CYGPATH_W) '$(srcdir)/xtables-config-syntax.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-xtables-config-syntax.Tpo $(DEPDIR)/xtables_compat_multi-xtables-config-syntax.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xtables-config-syntax.c' object='xtables_compat_multi-xtables-config-syntax.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-xtables-config-syntax.obj `if test -f 'xtables-config-syntax.c'; then $(CYGPATH_W) 'xtables-config-syntax.c'; else $(CYGPATH_W) '$(srcdir)/xtables-config-syntax.c'; fi`
xtables_compat_multi-xtables-save.o: xtables-save.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-xtables-save.o -MD -MP -MF $(DEPDIR)/xtables_compat_multi-xtables-save.Tpo -c -o xtables_compat_multi-xtables-save.o `test -f 'xtables-save.c' || echo '$(srcdir)/'`xtables-save.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-xtables-save.Tpo $(DEPDIR)/xtables_compat_multi-xtables-save.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xtables-save.c' object='xtables_compat_multi-xtables-save.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-xtables-save.o `test -f 'xtables-save.c' || echo '$(srcdir)/'`xtables-save.c
xtables_compat_multi-xtables-save.obj: xtables-save.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-xtables-save.obj -MD -MP -MF $(DEPDIR)/xtables_compat_multi-xtables-save.Tpo -c -o xtables_compat_multi-xtables-save.obj `if test -f 'xtables-save.c'; then $(CYGPATH_W) 'xtables-save.c'; else $(CYGPATH_W) '$(srcdir)/xtables-save.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-xtables-save.Tpo $(DEPDIR)/xtables_compat_multi-xtables-save.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xtables-save.c' object='xtables_compat_multi-xtables-save.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-xtables-save.obj `if test -f 'xtables-save.c'; then $(CYGPATH_W) 'xtables-save.c'; else $(CYGPATH_W) '$(srcdir)/xtables-save.c'; fi`
xtables_compat_multi-xtables-restore.o: xtables-restore.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-xtables-restore.o -MD -MP -MF $(DEPDIR)/xtables_compat_multi-xtables-restore.Tpo -c -o xtables_compat_multi-xtables-restore.o `test -f 'xtables-restore.c' || echo '$(srcdir)/'`xtables-restore.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-xtables-restore.Tpo $(DEPDIR)/xtables_compat_multi-xtables-restore.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xtables-restore.c' object='xtables_compat_multi-xtables-restore.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-xtables-restore.o `test -f 'xtables-restore.c' || echo '$(srcdir)/'`xtables-restore.c
xtables_compat_multi-xtables-restore.obj: xtables-restore.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-xtables-restore.obj -MD -MP -MF $(DEPDIR)/xtables_compat_multi-xtables-restore.Tpo -c -o xtables_compat_multi-xtables-restore.obj `if test -f 'xtables-restore.c'; then $(CYGPATH_W) 'xtables-restore.c'; else $(CYGPATH_W) '$(srcdir)/xtables-restore.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-xtables-restore.Tpo $(DEPDIR)/xtables_compat_multi-xtables-restore.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xtables-restore.c' object='xtables_compat_multi-xtables-restore.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-xtables-restore.obj `if test -f 'xtables-restore.c'; then $(CYGPATH_W) 'xtables-restore.c'; else $(CYGPATH_W) '$(srcdir)/xtables-restore.c'; fi`
xtables_compat_multi-xtables-standalone.o: xtables-standalone.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-xtables-standalone.o -MD -MP -MF $(DEPDIR)/xtables_compat_multi-xtables-standalone.Tpo -c -o xtables_compat_multi-xtables-standalone.o `test -f 'xtables-standalone.c' || echo '$(srcdir)/'`xtables-standalone.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-xtables-standalone.Tpo $(DEPDIR)/xtables_compat_multi-xtables-standalone.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xtables-standalone.c' object='xtables_compat_multi-xtables-standalone.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-xtables-standalone.o `test -f 'xtables-standalone.c' || echo '$(srcdir)/'`xtables-standalone.c
xtables_compat_multi-xtables-standalone.obj: xtables-standalone.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-xtables-standalone.obj -MD -MP -MF $(DEPDIR)/xtables_compat_multi-xtables-standalone.Tpo -c -o xtables_compat_multi-xtables-standalone.obj `if test -f 'xtables-standalone.c'; then $(CYGPATH_W) 'xtables-standalone.c'; else $(CYGPATH_W) '$(srcdir)/xtables-standalone.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-xtables-standalone.Tpo $(DEPDIR)/xtables_compat_multi-xtables-standalone.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xtables-standalone.c' object='xtables_compat_multi-xtables-standalone.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-xtables-standalone.obj `if test -f 'xtables-standalone.c'; then $(CYGPATH_W) 'xtables-standalone.c'; else $(CYGPATH_W) '$(srcdir)/xtables-standalone.c'; fi`
xtables_compat_multi-xtables.o: xtables.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-xtables.o -MD -MP -MF $(DEPDIR)/xtables_compat_multi-xtables.Tpo -c -o xtables_compat_multi-xtables.o `test -f 'xtables.c' || echo '$(srcdir)/'`xtables.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-xtables.Tpo $(DEPDIR)/xtables_compat_multi-xtables.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xtables.c' object='xtables_compat_multi-xtables.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-xtables.o `test -f 'xtables.c' || echo '$(srcdir)/'`xtables.c
xtables_compat_multi-xtables.obj: xtables.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-xtables.obj -MD -MP -MF $(DEPDIR)/xtables_compat_multi-xtables.Tpo -c -o xtables_compat_multi-xtables.obj `if test -f 'xtables.c'; then $(CYGPATH_W) 'xtables.c'; else $(CYGPATH_W) '$(srcdir)/xtables.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-xtables.Tpo $(DEPDIR)/xtables_compat_multi-xtables.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xtables.c' object='xtables_compat_multi-xtables.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-xtables.obj `if test -f 'xtables.c'; then $(CYGPATH_W) 'xtables.c'; else $(CYGPATH_W) '$(srcdir)/xtables.c'; fi`
xtables_compat_multi-nft.o: nft.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-nft.o -MD -MP -MF $(DEPDIR)/xtables_compat_multi-nft.Tpo -c -o xtables_compat_multi-nft.o `test -f 'nft.c' || echo '$(srcdir)/'`nft.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-nft.Tpo $(DEPDIR)/xtables_compat_multi-nft.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nft.c' object='xtables_compat_multi-nft.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-nft.o `test -f 'nft.c' || echo '$(srcdir)/'`nft.c
xtables_compat_multi-nft.obj: nft.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-nft.obj -MD -MP -MF $(DEPDIR)/xtables_compat_multi-nft.Tpo -c -o xtables_compat_multi-nft.obj `if test -f 'nft.c'; then $(CYGPATH_W) 'nft.c'; else $(CYGPATH_W) '$(srcdir)/nft.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-nft.Tpo $(DEPDIR)/xtables_compat_multi-nft.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nft.c' object='xtables_compat_multi-nft.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-nft.obj `if test -f 'nft.c'; then $(CYGPATH_W) 'nft.c'; else $(CYGPATH_W) '$(srcdir)/nft.c'; fi`
xtables_compat_multi-nft-shared.o: nft-shared.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-nft-shared.o -MD -MP -MF $(DEPDIR)/xtables_compat_multi-nft-shared.Tpo -c -o xtables_compat_multi-nft-shared.o `test -f 'nft-shared.c' || echo '$(srcdir)/'`nft-shared.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-nft-shared.Tpo $(DEPDIR)/xtables_compat_multi-nft-shared.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nft-shared.c' object='xtables_compat_multi-nft-shared.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-nft-shared.o `test -f 'nft-shared.c' || echo '$(srcdir)/'`nft-shared.c
xtables_compat_multi-nft-shared.obj: nft-shared.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-nft-shared.obj -MD -MP -MF $(DEPDIR)/xtables_compat_multi-nft-shared.Tpo -c -o xtables_compat_multi-nft-shared.obj `if test -f 'nft-shared.c'; then $(CYGPATH_W) 'nft-shared.c'; else $(CYGPATH_W) '$(srcdir)/nft-shared.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-nft-shared.Tpo $(DEPDIR)/xtables_compat_multi-nft-shared.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nft-shared.c' object='xtables_compat_multi-nft-shared.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-nft-shared.obj `if test -f 'nft-shared.c'; then $(CYGPATH_W) 'nft-shared.c'; else $(CYGPATH_W) '$(srcdir)/nft-shared.c'; fi`
xtables_compat_multi-nft-ipv4.o: nft-ipv4.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-nft-ipv4.o -MD -MP -MF $(DEPDIR)/xtables_compat_multi-nft-ipv4.Tpo -c -o xtables_compat_multi-nft-ipv4.o `test -f 'nft-ipv4.c' || echo '$(srcdir)/'`nft-ipv4.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-nft-ipv4.Tpo $(DEPDIR)/xtables_compat_multi-nft-ipv4.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nft-ipv4.c' object='xtables_compat_multi-nft-ipv4.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-nft-ipv4.o `test -f 'nft-ipv4.c' || echo '$(srcdir)/'`nft-ipv4.c
xtables_compat_multi-nft-ipv4.obj: nft-ipv4.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-nft-ipv4.obj -MD -MP -MF $(DEPDIR)/xtables_compat_multi-nft-ipv4.Tpo -c -o xtables_compat_multi-nft-ipv4.obj `if test -f 'nft-ipv4.c'; then $(CYGPATH_W) 'nft-ipv4.c'; else $(CYGPATH_W) '$(srcdir)/nft-ipv4.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-nft-ipv4.Tpo $(DEPDIR)/xtables_compat_multi-nft-ipv4.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nft-ipv4.c' object='xtables_compat_multi-nft-ipv4.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-nft-ipv4.obj `if test -f 'nft-ipv4.c'; then $(CYGPATH_W) 'nft-ipv4.c'; else $(CYGPATH_W) '$(srcdir)/nft-ipv4.c'; fi`
xtables_compat_multi-nft-ipv6.o: nft-ipv6.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-nft-ipv6.o -MD -MP -MF $(DEPDIR)/xtables_compat_multi-nft-ipv6.Tpo -c -o xtables_compat_multi-nft-ipv6.o `test -f 'nft-ipv6.c' || echo '$(srcdir)/'`nft-ipv6.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-nft-ipv6.Tpo $(DEPDIR)/xtables_compat_multi-nft-ipv6.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nft-ipv6.c' object='xtables_compat_multi-nft-ipv6.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-nft-ipv6.o `test -f 'nft-ipv6.c' || echo '$(srcdir)/'`nft-ipv6.c
xtables_compat_multi-nft-ipv6.obj: nft-ipv6.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-nft-ipv6.obj -MD -MP -MF $(DEPDIR)/xtables_compat_multi-nft-ipv6.Tpo -c -o xtables_compat_multi-nft-ipv6.obj `if test -f 'nft-ipv6.c'; then $(CYGPATH_W) 'nft-ipv6.c'; else $(CYGPATH_W) '$(srcdir)/nft-ipv6.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-nft-ipv6.Tpo $(DEPDIR)/xtables_compat_multi-nft-ipv6.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nft-ipv6.c' object='xtables_compat_multi-nft-ipv6.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-nft-ipv6.obj `if test -f 'nft-ipv6.c'; then $(CYGPATH_W) 'nft-ipv6.c'; else $(CYGPATH_W) '$(srcdir)/nft-ipv6.c'; fi`
xtables_compat_multi-nft-arp.o: nft-arp.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-nft-arp.o -MD -MP -MF $(DEPDIR)/xtables_compat_multi-nft-arp.Tpo -c -o xtables_compat_multi-nft-arp.o `test -f 'nft-arp.c' || echo '$(srcdir)/'`nft-arp.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-nft-arp.Tpo $(DEPDIR)/xtables_compat_multi-nft-arp.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nft-arp.c' object='xtables_compat_multi-nft-arp.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-nft-arp.o `test -f 'nft-arp.c' || echo '$(srcdir)/'`nft-arp.c
xtables_compat_multi-nft-arp.obj: nft-arp.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-nft-arp.obj -MD -MP -MF $(DEPDIR)/xtables_compat_multi-nft-arp.Tpo -c -o xtables_compat_multi-nft-arp.obj `if test -f 'nft-arp.c'; then $(CYGPATH_W) 'nft-arp.c'; else $(CYGPATH_W) '$(srcdir)/nft-arp.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-nft-arp.Tpo $(DEPDIR)/xtables_compat_multi-nft-arp.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nft-arp.c' object='xtables_compat_multi-nft-arp.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-nft-arp.obj `if test -f 'nft-arp.c'; then $(CYGPATH_W) 'nft-arp.c'; else $(CYGPATH_W) '$(srcdir)/nft-arp.c'; fi`
xtables_compat_multi-xtables-arp-standalone.o: xtables-arp-standalone.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-xtables-arp-standalone.o -MD -MP -MF $(DEPDIR)/xtables_compat_multi-xtables-arp-standalone.Tpo -c -o xtables_compat_multi-xtables-arp-standalone.o `test -f 'xtables-arp-standalone.c' || echo '$(srcdir)/'`xtables-arp-standalone.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-xtables-arp-standalone.Tpo $(DEPDIR)/xtables_compat_multi-xtables-arp-standalone.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xtables-arp-standalone.c' object='xtables_compat_multi-xtables-arp-standalone.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-xtables-arp-standalone.o `test -f 'xtables-arp-standalone.c' || echo '$(srcdir)/'`xtables-arp-standalone.c
xtables_compat_multi-xtables-arp-standalone.obj: xtables-arp-standalone.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-xtables-arp-standalone.obj -MD -MP -MF $(DEPDIR)/xtables_compat_multi-xtables-arp-standalone.Tpo -c -o xtables_compat_multi-xtables-arp-standalone.obj `if test -f 'xtables-arp-standalone.c'; then $(CYGPATH_W) 'xtables-arp-standalone.c'; else $(CYGPATH_W) '$(srcdir)/xtables-arp-standalone.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-xtables-arp-standalone.Tpo $(DEPDIR)/xtables_compat_multi-xtables-arp-standalone.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xtables-arp-standalone.c' object='xtables_compat_multi-xtables-arp-standalone.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-xtables-arp-standalone.obj `if test -f 'xtables-arp-standalone.c'; then $(CYGPATH_W) 'xtables-arp-standalone.c'; else $(CYGPATH_W) '$(srcdir)/xtables-arp-standalone.c'; fi`
xtables_compat_multi-xtables-arp.o: xtables-arp.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-xtables-arp.o -MD -MP -MF $(DEPDIR)/xtables_compat_multi-xtables-arp.Tpo -c -o xtables_compat_multi-xtables-arp.o `test -f 'xtables-arp.c' || echo '$(srcdir)/'`xtables-arp.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-xtables-arp.Tpo $(DEPDIR)/xtables_compat_multi-xtables-arp.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xtables-arp.c' object='xtables_compat_multi-xtables-arp.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-xtables-arp.o `test -f 'xtables-arp.c' || echo '$(srcdir)/'`xtables-arp.c
xtables_compat_multi-xtables-arp.obj: xtables-arp.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-xtables-arp.obj -MD -MP -MF $(DEPDIR)/xtables_compat_multi-xtables-arp.Tpo -c -o xtables_compat_multi-xtables-arp.obj `if test -f 'xtables-arp.c'; then $(CYGPATH_W) 'xtables-arp.c'; else $(CYGPATH_W) '$(srcdir)/xtables-arp.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-xtables-arp.Tpo $(DEPDIR)/xtables_compat_multi-xtables-arp.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xtables-arp.c' object='xtables_compat_multi-xtables-arp.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-xtables-arp.obj `if test -f 'xtables-arp.c'; then $(CYGPATH_W) 'xtables-arp.c'; else $(CYGPATH_W) '$(srcdir)/xtables-arp.c'; fi`
xtables_compat_multi-getethertype.o: getethertype.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-getethertype.o -MD -MP -MF $(DEPDIR)/xtables_compat_multi-getethertype.Tpo -c -o xtables_compat_multi-getethertype.o `test -f 'getethertype.c' || echo '$(srcdir)/'`getethertype.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-getethertype.Tpo $(DEPDIR)/xtables_compat_multi-getethertype.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getethertype.c' object='xtables_compat_multi-getethertype.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-getethertype.o `test -f 'getethertype.c' || echo '$(srcdir)/'`getethertype.c
xtables_compat_multi-getethertype.obj: getethertype.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-getethertype.obj -MD -MP -MF $(DEPDIR)/xtables_compat_multi-getethertype.Tpo -c -o xtables_compat_multi-getethertype.obj `if test -f 'getethertype.c'; then $(CYGPATH_W) 'getethertype.c'; else $(CYGPATH_W) '$(srcdir)/getethertype.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-getethertype.Tpo $(DEPDIR)/xtables_compat_multi-getethertype.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getethertype.c' object='xtables_compat_multi-getethertype.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-getethertype.obj `if test -f 'getethertype.c'; then $(CYGPATH_W) 'getethertype.c'; else $(CYGPATH_W) '$(srcdir)/getethertype.c'; fi`
xtables_compat_multi-nft-bridge.o: nft-bridge.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-nft-bridge.o -MD -MP -MF $(DEPDIR)/xtables_compat_multi-nft-bridge.Tpo -c -o xtables_compat_multi-nft-bridge.o `test -f 'nft-bridge.c' || echo '$(srcdir)/'`nft-bridge.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-nft-bridge.Tpo $(DEPDIR)/xtables_compat_multi-nft-bridge.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nft-bridge.c' object='xtables_compat_multi-nft-bridge.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-nft-bridge.o `test -f 'nft-bridge.c' || echo '$(srcdir)/'`nft-bridge.c
xtables_compat_multi-nft-bridge.obj: nft-bridge.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-nft-bridge.obj -MD -MP -MF $(DEPDIR)/xtables_compat_multi-nft-bridge.Tpo -c -o xtables_compat_multi-nft-bridge.obj `if test -f 'nft-bridge.c'; then $(CYGPATH_W) 'nft-bridge.c'; else $(CYGPATH_W) '$(srcdir)/nft-bridge.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-nft-bridge.Tpo $(DEPDIR)/xtables_compat_multi-nft-bridge.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nft-bridge.c' object='xtables_compat_multi-nft-bridge.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-nft-bridge.obj `if test -f 'nft-bridge.c'; then $(CYGPATH_W) 'nft-bridge.c'; else $(CYGPATH_W) '$(srcdir)/nft-bridge.c'; fi`
xtables_compat_multi-xtables-eb-standalone.o: xtables-eb-standalone.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-xtables-eb-standalone.o -MD -MP -MF $(DEPDIR)/xtables_compat_multi-xtables-eb-standalone.Tpo -c -o xtables_compat_multi-xtables-eb-standalone.o `test -f 'xtables-eb-standalone.c' || echo '$(srcdir)/'`xtables-eb-standalone.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-xtables-eb-standalone.Tpo $(DEPDIR)/xtables_compat_multi-xtables-eb-standalone.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xtables-eb-standalone.c' object='xtables_compat_multi-xtables-eb-standalone.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-xtables-eb-standalone.o `test -f 'xtables-eb-standalone.c' || echo '$(srcdir)/'`xtables-eb-standalone.c
xtables_compat_multi-xtables-eb-standalone.obj: xtables-eb-standalone.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-xtables-eb-standalone.obj -MD -MP -MF $(DEPDIR)/xtables_compat_multi-xtables-eb-standalone.Tpo -c -o xtables_compat_multi-xtables-eb-standalone.obj `if test -f 'xtables-eb-standalone.c'; then $(CYGPATH_W) 'xtables-eb-standalone.c'; else $(CYGPATH_W) '$(srcdir)/xtables-eb-standalone.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-xtables-eb-standalone.Tpo $(DEPDIR)/xtables_compat_multi-xtables-eb-standalone.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xtables-eb-standalone.c' object='xtables_compat_multi-xtables-eb-standalone.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-xtables-eb-standalone.obj `if test -f 'xtables-eb-standalone.c'; then $(CYGPATH_W) 'xtables-eb-standalone.c'; else $(CYGPATH_W) '$(srcdir)/xtables-eb-standalone.c'; fi`
xtables_compat_multi-xtables-eb.o: xtables-eb.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-xtables-eb.o -MD -MP -MF $(DEPDIR)/xtables_compat_multi-xtables-eb.Tpo -c -o xtables_compat_multi-xtables-eb.o `test -f 'xtables-eb.c' || echo '$(srcdir)/'`xtables-eb.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-xtables-eb.Tpo $(DEPDIR)/xtables_compat_multi-xtables-eb.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xtables-eb.c' object='xtables_compat_multi-xtables-eb.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-xtables-eb.o `test -f 'xtables-eb.c' || echo '$(srcdir)/'`xtables-eb.c
xtables_compat_multi-xtables-eb.obj: xtables-eb.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-xtables-eb.obj -MD -MP -MF $(DEPDIR)/xtables_compat_multi-xtables-eb.Tpo -c -o xtables_compat_multi-xtables-eb.obj `if test -f 'xtables-eb.c'; then $(CYGPATH_W) 'xtables-eb.c'; else $(CYGPATH_W) '$(srcdir)/xtables-eb.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-xtables-eb.Tpo $(DEPDIR)/xtables_compat_multi-xtables-eb.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xtables-eb.c' object='xtables_compat_multi-xtables-eb.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-xtables-eb.obj `if test -f 'xtables-eb.c'; then $(CYGPATH_W) 'xtables-eb.c'; else $(CYGPATH_W) '$(srcdir)/xtables-eb.c'; fi`
xtables_compat_multi-xshared.o: xshared.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-xshared.o -MD -MP -MF $(DEPDIR)/xtables_compat_multi-xshared.Tpo -c -o xtables_compat_multi-xshared.o `test -f 'xshared.c' || echo '$(srcdir)/'`xshared.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-xshared.Tpo $(DEPDIR)/xtables_compat_multi-xshared.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xshared.c' object='xtables_compat_multi-xshared.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-xshared.o `test -f 'xshared.c' || echo '$(srcdir)/'`xshared.c
xtables_compat_multi-xshared.obj: xshared.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -MT xtables_compat_multi-xshared.obj -MD -MP -MF $(DEPDIR)/xtables_compat_multi-xshared.Tpo -c -o xtables_compat_multi-xshared.obj `if test -f 'xshared.c'; then $(CYGPATH_W) 'xshared.c'; else $(CYGPATH_W) '$(srcdir)/xshared.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_compat_multi-xshared.Tpo $(DEPDIR)/xtables_compat_multi-xshared.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xshared.c' object='xtables_compat_multi-xshared.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_compat_multi_CFLAGS) $(CFLAGS) -c -o xtables_compat_multi-xshared.obj `if test -f 'xshared.c'; then $(CYGPATH_W) 'xshared.c'; else $(CYGPATH_W) '$(srcdir)/xshared.c'; fi`
xtables_multi-xtables-multi.o: xtables-multi.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -MT xtables_multi-xtables-multi.o -MD -MP -MF $(DEPDIR)/xtables_multi-xtables-multi.Tpo -c -o xtables_multi-xtables-multi.o `test -f 'xtables-multi.c' || echo '$(srcdir)/'`xtables-multi.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_multi-xtables-multi.Tpo $(DEPDIR)/xtables_multi-xtables-multi.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xtables-multi.c' object='xtables_multi-xtables-multi.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -c -o xtables_multi-xtables-multi.o `test -f 'xtables-multi.c' || echo '$(srcdir)/'`xtables-multi.c
xtables_multi-xtables-multi.obj: xtables-multi.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -MT xtables_multi-xtables-multi.obj -MD -MP -MF $(DEPDIR)/xtables_multi-xtables-multi.Tpo -c -o xtables_multi-xtables-multi.obj `if test -f 'xtables-multi.c'; then $(CYGPATH_W) 'xtables-multi.c'; else $(CYGPATH_W) '$(srcdir)/xtables-multi.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_multi-xtables-multi.Tpo $(DEPDIR)/xtables_multi-xtables-multi.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xtables-multi.c' object='xtables_multi-xtables-multi.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -c -o xtables_multi-xtables-multi.obj `if test -f 'xtables-multi.c'; then $(CYGPATH_W) 'xtables-multi.c'; else $(CYGPATH_W) '$(srcdir)/xtables-multi.c'; fi`
xtables_multi-iptables-xml.o: iptables-xml.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -MT xtables_multi-iptables-xml.o -MD -MP -MF $(DEPDIR)/xtables_multi-iptables-xml.Tpo -c -o xtables_multi-iptables-xml.o `test -f 'iptables-xml.c' || echo '$(srcdir)/'`iptables-xml.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_multi-iptables-xml.Tpo $(DEPDIR)/xtables_multi-iptables-xml.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iptables-xml.c' object='xtables_multi-iptables-xml.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -c -o xtables_multi-iptables-xml.o `test -f 'iptables-xml.c' || echo '$(srcdir)/'`iptables-xml.c
xtables_multi-iptables-xml.obj: iptables-xml.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -MT xtables_multi-iptables-xml.obj -MD -MP -MF $(DEPDIR)/xtables_multi-iptables-xml.Tpo -c -o xtables_multi-iptables-xml.obj `if test -f 'iptables-xml.c'; then $(CYGPATH_W) 'iptables-xml.c'; else $(CYGPATH_W) '$(srcdir)/iptables-xml.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_multi-iptables-xml.Tpo $(DEPDIR)/xtables_multi-iptables-xml.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iptables-xml.c' object='xtables_multi-iptables-xml.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -c -o xtables_multi-iptables-xml.obj `if test -f 'iptables-xml.c'; then $(CYGPATH_W) 'iptables-xml.c'; else $(CYGPATH_W) '$(srcdir)/iptables-xml.c'; fi`
xtables_multi-iptables-save.o: iptables-save.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -MT xtables_multi-iptables-save.o -MD -MP -MF $(DEPDIR)/xtables_multi-iptables-save.Tpo -c -o xtables_multi-iptables-save.o `test -f 'iptables-save.c' || echo '$(srcdir)/'`iptables-save.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_multi-iptables-save.Tpo $(DEPDIR)/xtables_multi-iptables-save.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iptables-save.c' object='xtables_multi-iptables-save.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -c -o xtables_multi-iptables-save.o `test -f 'iptables-save.c' || echo '$(srcdir)/'`iptables-save.c
xtables_multi-iptables-save.obj: iptables-save.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -MT xtables_multi-iptables-save.obj -MD -MP -MF $(DEPDIR)/xtables_multi-iptables-save.Tpo -c -o xtables_multi-iptables-save.obj `if test -f 'iptables-save.c'; then $(CYGPATH_W) 'iptables-save.c'; else $(CYGPATH_W) '$(srcdir)/iptables-save.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_multi-iptables-save.Tpo $(DEPDIR)/xtables_multi-iptables-save.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iptables-save.c' object='xtables_multi-iptables-save.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -c -o xtables_multi-iptables-save.obj `if test -f 'iptables-save.c'; then $(CYGPATH_W) 'iptables-save.c'; else $(CYGPATH_W) '$(srcdir)/iptables-save.c'; fi`
xtables_multi-iptables-restore.o: iptables-restore.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -MT xtables_multi-iptables-restore.o -MD -MP -MF $(DEPDIR)/xtables_multi-iptables-restore.Tpo -c -o xtables_multi-iptables-restore.o `test -f 'iptables-restore.c' || echo '$(srcdir)/'`iptables-restore.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_multi-iptables-restore.Tpo $(DEPDIR)/xtables_multi-iptables-restore.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iptables-restore.c' object='xtables_multi-iptables-restore.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -c -o xtables_multi-iptables-restore.o `test -f 'iptables-restore.c' || echo '$(srcdir)/'`iptables-restore.c
xtables_multi-iptables-restore.obj: iptables-restore.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -MT xtables_multi-iptables-restore.obj -MD -MP -MF $(DEPDIR)/xtables_multi-iptables-restore.Tpo -c -o xtables_multi-iptables-restore.obj `if test -f 'iptables-restore.c'; then $(CYGPATH_W) 'iptables-restore.c'; else $(CYGPATH_W) '$(srcdir)/iptables-restore.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_multi-iptables-restore.Tpo $(DEPDIR)/xtables_multi-iptables-restore.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iptables-restore.c' object='xtables_multi-iptables-restore.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -c -o xtables_multi-iptables-restore.obj `if test -f 'iptables-restore.c'; then $(CYGPATH_W) 'iptables-restore.c'; else $(CYGPATH_W) '$(srcdir)/iptables-restore.c'; fi`
xtables_multi-iptables-standalone.o: iptables-standalone.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -MT xtables_multi-iptables-standalone.o -MD -MP -MF $(DEPDIR)/xtables_multi-iptables-standalone.Tpo -c -o xtables_multi-iptables-standalone.o `test -f 'iptables-standalone.c' || echo '$(srcdir)/'`iptables-standalone.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_multi-iptables-standalone.Tpo $(DEPDIR)/xtables_multi-iptables-standalone.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iptables-standalone.c' object='xtables_multi-iptables-standalone.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -c -o xtables_multi-iptables-standalone.o `test -f 'iptables-standalone.c' || echo '$(srcdir)/'`iptables-standalone.c
xtables_multi-iptables-standalone.obj: iptables-standalone.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -MT xtables_multi-iptables-standalone.obj -MD -MP -MF $(DEPDIR)/xtables_multi-iptables-standalone.Tpo -c -o xtables_multi-iptables-standalone.obj `if test -f 'iptables-standalone.c'; then $(CYGPATH_W) 'iptables-standalone.c'; else $(CYGPATH_W) '$(srcdir)/iptables-standalone.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_multi-iptables-standalone.Tpo $(DEPDIR)/xtables_multi-iptables-standalone.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iptables-standalone.c' object='xtables_multi-iptables-standalone.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -c -o xtables_multi-iptables-standalone.obj `if test -f 'iptables-standalone.c'; then $(CYGPATH_W) 'iptables-standalone.c'; else $(CYGPATH_W) '$(srcdir)/iptables-standalone.c'; fi`
xtables_multi-iptables.o: iptables.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -MT xtables_multi-iptables.o -MD -MP -MF $(DEPDIR)/xtables_multi-iptables.Tpo -c -o xtables_multi-iptables.o `test -f 'iptables.c' || echo '$(srcdir)/'`iptables.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_multi-iptables.Tpo $(DEPDIR)/xtables_multi-iptables.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iptables.c' object='xtables_multi-iptables.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -c -o xtables_multi-iptables.o `test -f 'iptables.c' || echo '$(srcdir)/'`iptables.c
xtables_multi-iptables.obj: iptables.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -MT xtables_multi-iptables.obj -MD -MP -MF $(DEPDIR)/xtables_multi-iptables.Tpo -c -o xtables_multi-iptables.obj `if test -f 'iptables.c'; then $(CYGPATH_W) 'iptables.c'; else $(CYGPATH_W) '$(srcdir)/iptables.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_multi-iptables.Tpo $(DEPDIR)/xtables_multi-iptables.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iptables.c' object='xtables_multi-iptables.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -c -o xtables_multi-iptables.obj `if test -f 'iptables.c'; then $(CYGPATH_W) 'iptables.c'; else $(CYGPATH_W) '$(srcdir)/iptables.c'; fi`
xtables_multi-ip6tables-save.o: ip6tables-save.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -MT xtables_multi-ip6tables-save.o -MD -MP -MF $(DEPDIR)/xtables_multi-ip6tables-save.Tpo -c -o xtables_multi-ip6tables-save.o `test -f 'ip6tables-save.c' || echo '$(srcdir)/'`ip6tables-save.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_multi-ip6tables-save.Tpo $(DEPDIR)/xtables_multi-ip6tables-save.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ip6tables-save.c' object='xtables_multi-ip6tables-save.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -c -o xtables_multi-ip6tables-save.o `test -f 'ip6tables-save.c' || echo '$(srcdir)/'`ip6tables-save.c
xtables_multi-ip6tables-save.obj: ip6tables-save.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -MT xtables_multi-ip6tables-save.obj -MD -MP -MF $(DEPDIR)/xtables_multi-ip6tables-save.Tpo -c -o xtables_multi-ip6tables-save.obj `if test -f 'ip6tables-save.c'; then $(CYGPATH_W) 'ip6tables-save.c'; else $(CYGPATH_W) '$(srcdir)/ip6tables-save.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_multi-ip6tables-save.Tpo $(DEPDIR)/xtables_multi-ip6tables-save.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ip6tables-save.c' object='xtables_multi-ip6tables-save.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -c -o xtables_multi-ip6tables-save.obj `if test -f 'ip6tables-save.c'; then $(CYGPATH_W) 'ip6tables-save.c'; else $(CYGPATH_W) '$(srcdir)/ip6tables-save.c'; fi`
xtables_multi-ip6tables-restore.o: ip6tables-restore.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -MT xtables_multi-ip6tables-restore.o -MD -MP -MF $(DEPDIR)/xtables_multi-ip6tables-restore.Tpo -c -o xtables_multi-ip6tables-restore.o `test -f 'ip6tables-restore.c' || echo '$(srcdir)/'`ip6tables-restore.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_multi-ip6tables-restore.Tpo $(DEPDIR)/xtables_multi-ip6tables-restore.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ip6tables-restore.c' object='xtables_multi-ip6tables-restore.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -c -o xtables_multi-ip6tables-restore.o `test -f 'ip6tables-restore.c' || echo '$(srcdir)/'`ip6tables-restore.c
xtables_multi-ip6tables-restore.obj: ip6tables-restore.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -MT xtables_multi-ip6tables-restore.obj -MD -MP -MF $(DEPDIR)/xtables_multi-ip6tables-restore.Tpo -c -o xtables_multi-ip6tables-restore.obj `if test -f 'ip6tables-restore.c'; then $(CYGPATH_W) 'ip6tables-restore.c'; else $(CYGPATH_W) '$(srcdir)/ip6tables-restore.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_multi-ip6tables-restore.Tpo $(DEPDIR)/xtables_multi-ip6tables-restore.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ip6tables-restore.c' object='xtables_multi-ip6tables-restore.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -c -o xtables_multi-ip6tables-restore.obj `if test -f 'ip6tables-restore.c'; then $(CYGPATH_W) 'ip6tables-restore.c'; else $(CYGPATH_W) '$(srcdir)/ip6tables-restore.c'; fi`
xtables_multi-ip6tables-standalone.o: ip6tables-standalone.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -MT xtables_multi-ip6tables-standalone.o -MD -MP -MF $(DEPDIR)/xtables_multi-ip6tables-standalone.Tpo -c -o xtables_multi-ip6tables-standalone.o `test -f 'ip6tables-standalone.c' || echo '$(srcdir)/'`ip6tables-standalone.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_multi-ip6tables-standalone.Tpo $(DEPDIR)/xtables_multi-ip6tables-standalone.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ip6tables-standalone.c' object='xtables_multi-ip6tables-standalone.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -c -o xtables_multi-ip6tables-standalone.o `test -f 'ip6tables-standalone.c' || echo '$(srcdir)/'`ip6tables-standalone.c
xtables_multi-ip6tables-standalone.obj: ip6tables-standalone.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -MT xtables_multi-ip6tables-standalone.obj -MD -MP -MF $(DEPDIR)/xtables_multi-ip6tables-standalone.Tpo -c -o xtables_multi-ip6tables-standalone.obj `if test -f 'ip6tables-standalone.c'; then $(CYGPATH_W) 'ip6tables-standalone.c'; else $(CYGPATH_W) '$(srcdir)/ip6tables-standalone.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_multi-ip6tables-standalone.Tpo $(DEPDIR)/xtables_multi-ip6tables-standalone.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ip6tables-standalone.c' object='xtables_multi-ip6tables-standalone.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -c -o xtables_multi-ip6tables-standalone.obj `if test -f 'ip6tables-standalone.c'; then $(CYGPATH_W) 'ip6tables-standalone.c'; else $(CYGPATH_W) '$(srcdir)/ip6tables-standalone.c'; fi`
xtables_multi-ip6tables.o: ip6tables.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -MT xtables_multi-ip6tables.o -MD -MP -MF $(DEPDIR)/xtables_multi-ip6tables.Tpo -c -o xtables_multi-ip6tables.o `test -f 'ip6tables.c' || echo '$(srcdir)/'`ip6tables.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_multi-ip6tables.Tpo $(DEPDIR)/xtables_multi-ip6tables.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ip6tables.c' object='xtables_multi-ip6tables.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -c -o xtables_multi-ip6tables.o `test -f 'ip6tables.c' || echo '$(srcdir)/'`ip6tables.c
xtables_multi-ip6tables.obj: ip6tables.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -MT xtables_multi-ip6tables.obj -MD -MP -MF $(DEPDIR)/xtables_multi-ip6tables.Tpo -c -o xtables_multi-ip6tables.obj `if test -f 'ip6tables.c'; then $(CYGPATH_W) 'ip6tables.c'; else $(CYGPATH_W) '$(srcdir)/ip6tables.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_multi-ip6tables.Tpo $(DEPDIR)/xtables_multi-ip6tables.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ip6tables.c' object='xtables_multi-ip6tables.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -c -o xtables_multi-ip6tables.obj `if test -f 'ip6tables.c'; then $(CYGPATH_W) 'ip6tables.c'; else $(CYGPATH_W) '$(srcdir)/ip6tables.c'; fi`
xtables_multi-xshared.o: xshared.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -MT xtables_multi-xshared.o -MD -MP -MF $(DEPDIR)/xtables_multi-xshared.Tpo -c -o xtables_multi-xshared.o `test -f 'xshared.c' || echo '$(srcdir)/'`xshared.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_multi-xshared.Tpo $(DEPDIR)/xtables_multi-xshared.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xshared.c' object='xtables_multi-xshared.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -c -o xtables_multi-xshared.o `test -f 'xshared.c' || echo '$(srcdir)/'`xshared.c
xtables_multi-xshared.obj: xshared.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -MT xtables_multi-xshared.obj -MD -MP -MF $(DEPDIR)/xtables_multi-xshared.Tpo -c -o xtables_multi-xshared.obj `if test -f 'xshared.c'; then $(CYGPATH_W) 'xshared.c'; else $(CYGPATH_W) '$(srcdir)/xshared.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtables_multi-xshared.Tpo $(DEPDIR)/xtables_multi-xshared.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xshared.c' object='xtables_multi-xshared.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtables_multi_CFLAGS) $(CFLAGS) -c -o xtables_multi-xshared.obj `if test -f 'xshared.c'; then $(CYGPATH_W) 'xshared.c'; else $(CYGPATH_W) '$(srcdir)/xshared.c'; fi`
.l.c:
$(AM_V_LEX)$(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE)
.y.c:
$(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h `echo $@ | $(am__yacc_c2h)` y.output $*.output -- $(YACCCOMPILE)
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
install-man1: $(man_MANS)
@$(NORMAL_INSTALL)
@list1=''; \
list2='$(man_MANS)'; \
test -n "$(man1dir)" \
&& test -n "`echo $$list1$$list2`" \
|| exit 0; \
echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
$(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
{ for i in $$list1; do echo "$$i"; done; \
if test -n "$$list2"; then \
for i in $$list2; do echo "$$i"; done \
| sed -n '/\.1[a-z]*$$/p'; \
fi; \
} | while read p; do \
if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; echo "$$p"; \
done | \
sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
sed 'N;N;s,\n, ,g' | { \
list=; while read file base inst; do \
if test "$$base" = "$$inst"; then list="$$list $$file"; else \
echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
$(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
fi; \
done; \
for i in $$list; do echo "$$i"; done | $(am__base_list) | \
while read files; do \
test -z "$$files" || { \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
done; }
uninstall-man1:
@$(NORMAL_UNINSTALL)
@list=''; test -n "$(man1dir)" || exit 0; \
files=`{ for i in $$list; do echo "$$i"; done; \
l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
sed -n '/\.1[a-z]*$$/p'; \
} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
install-man8: $(man_MANS)
@$(NORMAL_INSTALL)
@list1=''; \
list2='$(man_MANS)'; \
test -n "$(man8dir)" \
&& test -n "`echo $$list1$$list2`" \
|| exit 0; \
echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \
$(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \
{ for i in $$list1; do echo "$$i"; done; \
if test -n "$$list2"; then \
for i in $$list2; do echo "$$i"; done \
| sed -n '/\.8[a-z]*$$/p'; \
fi; \
} | while read p; do \
if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; echo "$$p"; \
done | \
sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
sed 'N;N;s,\n, ,g' | { \
list=; while read file base inst; do \
if test "$$base" = "$$inst"; then list="$$list $$file"; else \
echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
$(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \
fi; \
done; \
for i in $$list; do echo "$$i"; done | $(am__base_list) | \
while read files; do \
test -z "$$files" || { \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \
done; }
uninstall-man8:
@$(NORMAL_UNINSTALL)
@list=''; test -n "$(man8dir)" || exit 0; \
files=`{ for i in $$list; do echo "$$i"; done; \
l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
sed -n '/\.8[a-z]*$$/p'; \
} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir)
install-pkgconfigDATA: $(pkgconfig_DATA)
@$(NORMAL_INSTALL)
@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \
$(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \
fi; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
while read files; do \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
done
uninstall-pkgconfigDATA:
@$(NORMAL_UNINSTALL)
@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir)
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
tags: tags-am
TAGS: tags
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
set x; \
here=`pwd`; \
$(am__define_uniq_tagged_files); \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: ctags-am
CTAGS: ctags
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
$(am__define_uniq_tagged_files); \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscopelist: cscopelist-am
cscopelist-am: $(am__tagged_files)
list='$(am__tagged_files)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(PROGRAMS) $(MANS) $(DATA)
installdirs:
for dir in "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(pkgconfigdir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
-rm -f xtables-config-parser.c
-rm -f xtables-config-parser.h
-rm -f xtables-config-syntax.c
clean: clean-am
clean-am: clean-generic clean-libtool clean-sbinPROGRAMS \
mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am: install-man install-pkgconfigDATA
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am: install-sbinPROGRAMS
@$(NORMAL_INSTALL)
$(MAKE) $(AM_MAKEFLAGS) install-exec-hook
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man: install-man1 install-man8
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-man uninstall-pkgconfigDATA \
uninstall-sbinPROGRAMS
uninstall-man: uninstall-man1 uninstall-man8
.MAKE: install-am install-exec-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
clean-libtool clean-sbinPROGRAMS cscopelist-am ctags ctags-am \
distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-dvi install-dvi-am install-exec \
install-exec-am install-exec-hook install-html install-html-am \
install-info install-info-am install-man install-man1 \
install-man8 install-pdf install-pdf-am install-pkgconfigDATA \
install-ps install-ps-am install-sbinPROGRAMS install-strip \
installcheck installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags tags-am uninstall uninstall-am uninstall-man \
uninstall-man1 uninstall-man8 uninstall-pkgconfigDATA \
uninstall-sbinPROGRAMS
# yacc and lex generate dirty code
@ENABLE_NFTABLES_TRUE@xtables_compat_multi-xtables-config-parser.o xtables_compat_multi-xtables-config-syntax.o: AM_CFLAGS += -Wno-missing-prototypes -Wno-missing-declarations -Wno-implicit-function-declaration -Wno-nested-externs -Wno-undef -Wno-redundant-decls
iptables-extensions.8: iptables-extensions.8.tmpl ../extensions/matches.man ../extensions/targets.man
${AM_VERBOSE_GEN} sed \
-e '/@MATCH@/ r ../extensions/matches.man' \
-e '/@TARGET@/ r ../extensions/targets.man' $< >$@;
# Using if..fi avoids an ugly "error (ignored)" message :)
install-exec-hook:
-if test -z "${DESTDIR}"; then /sbin/ldconfig; fi;
${INSTALL} -dm0755 "${DESTDIR}${bindir}";
for i in ${vx_bin_links}; do ${LN_S} -f "${sbindir}/xtables-multi" "${DESTDIR}${bindir}/$$i"; done;
for i in ${v4_sbin_links}; do ${LN_S} -f xtables-multi "${DESTDIR}${sbindir}/$$i"; done;
for i in ${v6_sbin_links}; do ${LN_S} -f xtables-multi "${DESTDIR}${sbindir}/$$i"; done;
for i in ${x_sbin_links}; do ${LN_S} -f xtables-compat-multi "${DESTDIR}${sbindir}/$$i"; done;
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
...@@ -43,13 +43,14 @@ static void print_usage(const char *name, const char *version) __attribute__((no ...@@ -43,13 +43,14 @@ static void print_usage(const char *name, const char *version) __attribute__((no
static void print_usage(const char *name, const char *version) static void print_usage(const char *name, const char *version)
{ {
fprintf(stderr, "Usage: %s [-c] [-v] [-t] [-h]\n" fprintf(stderr, "Usage: %s [-c] [-v] [-t] [-h] [-n] [-T table] [-M command]\n"
" [ --counters ]\n" " [ --counters ]\n"
" [ --verbose ]\n" " [ --verbose ]\n"
" [ --test ]\n" " [ --test ]\n"
" [ --help ]\n" " [ --help ]\n"
" [ --noflush ]\n" " [ --noflush ]\n"
" [ --modprobe=<command>]\n", name); " [ --table=<TABLE> ]\n"
" [ --modprobe=<command> ]\n", name);
exit(1); exit(1);
} }
......
...@@ -103,6 +103,7 @@ static struct option original_opts[] = { ...@@ -103,6 +103,7 @@ static struct option original_opts[] = {
{.name = "out-interface", .has_arg = 1, .val = 'o'}, {.name = "out-interface", .has_arg = 1, .val = 'o'},
{.name = "verbose", .has_arg = 0, .val = 'v'}, {.name = "verbose", .has_arg = 0, .val = 'v'},
{.name = "wait", .has_arg = 2, .val = 'w'}, {.name = "wait", .has_arg = 2, .val = 'w'},
{.name = "wait-interval", .has_arg = 2, .val = 'W'},
{.name = "exact", .has_arg = 0, .val = 'x'}, {.name = "exact", .has_arg = 0, .val = 'x'},
{.name = "version", .has_arg = 0, .val = 'V'}, {.name = "version", .has_arg = 0, .val = 'V'},
{.name = "help", .has_arg = 2, .val = 'h'}, {.name = "help", .has_arg = 2, .val = 'h'},
...@@ -259,7 +260,10 @@ exit_printhelp(const struct xtables_rule_match *matches) ...@@ -259,7 +260,10 @@ exit_printhelp(const struct xtables_rule_match *matches)
" network interface name ([+] for wildcard)\n" " network interface name ([+] for wildcard)\n"
" --table -t table table to manipulate (default: `filter')\n" " --table -t table table to manipulate (default: `filter')\n"
" --verbose -v verbose mode\n" " --verbose -v verbose mode\n"
" --wait -w [seconds] wait for the xtables lock\n" " --wait -w [seconds] maximum wait to acquire xtables lock before give up\n"
" --wait-interval -W [usecs] wait time to try to acquire xtables lock\n"
" interval to wait for xtables lock\n"
" default is 1 second\n"
" --line-numbers print line numbers when listing\n" " --line-numbers print line numbers when listing\n"
" --exact -x expand numbers (display exact values)\n" " --exact -x expand numbers (display exact values)\n"
/*"[!] --fragment -f match second or further fragments only\n"*/ /*"[!] --fragment -f match second or further fragments only\n"*/
...@@ -1325,6 +1329,10 @@ int do_command6(int argc, char *argv[], char **table, ...@@ -1325,6 +1329,10 @@ int do_command6(int argc, char *argv[], char **table,
int verbose = 0; int verbose = 0;
int wait = 0; int wait = 0;
struct timeval wait_interval = {
.tv_sec = 1,
};
bool wait_interval_set = false;
const char *chain = NULL; const char *chain = NULL;
const char *shostnetworkmask = NULL, *dhostnetworkmask = NULL; const char *shostnetworkmask = NULL, *dhostnetworkmask = NULL;
const char *policy = NULL, *newname = NULL; const char *policy = NULL, *newname = NULL;
...@@ -1360,7 +1368,7 @@ int do_command6(int argc, char *argv[], char **table, ...@@ -1360,7 +1368,7 @@ int do_command6(int argc, char *argv[], char **table,
opts = xt_params->orig_opts; opts = xt_params->orig_opts;
while ((cs.c = getopt_long(argc, argv, while ((cs.c = getopt_long(argc, argv,
"-:A:C:D:R:I:L::S::M:F::Z::N:X::E:P:Vh::o:p:s:d:j:i:bvw::nt:m:xc:g:46", "-:A:C:D:R:I:L::S::M:F::Z::N:X::E:P:Vh::o:p:s:d:j:i:bvw::W::nt:m:xc:g:46",
opts, NULL)) != -1) { opts, NULL)) != -1) {
switch (cs.c) { switch (cs.c) {
/* /*
...@@ -1616,6 +1624,23 @@ int do_command6(int argc, char *argv[], char **table, ...@@ -1616,6 +1624,23 @@ int do_command6(int argc, char *argv[], char **table,
"wait seconds not numeric"); "wait seconds not numeric");
break; break;
case 'W':
if (restore) {
xtables_error(PARAMETER_PROBLEM,
"You cannot use `-W' from "
"ip6tables-restore");
}
if (optarg)
parse_wait_interval(optarg, &wait_interval);
else if (optind < argc &&
argv[optind][0] != '-' &&
argv[optind][0] != '!')
parse_wait_interval(argv[optind++],
&wait_interval);
wait_interval_set = true;
break;
case 'm': case 'm':
command_match(&cs); command_match(&cs);
break; break;
...@@ -1720,6 +1745,17 @@ int do_command6(int argc, char *argv[], char **table, ...@@ -1720,6 +1745,17 @@ int do_command6(int argc, char *argv[], char **table,
cs.invert = FALSE; cs.invert = FALSE;
} }
if (!wait && wait_interval_set)
xtables_error(PARAMETER_PROBLEM,
"--wait-interval only makes sense with --wait\n");
if (strcmp(*table, "nat") == 0 &&
((policy != NULL && strcmp(policy, "DROP") == 0) ||
(cs.jumpto != NULL && strcmp(cs.jumpto, "DROP") == 0)))
xtables_error(PARAMETER_PROBLEM,
"\nThe \"nat\" table is not intended for filtering, "
"the use of DROP is therefore inhibited.\n\n");
for (matchp = cs.matches; matchp; matchp = matchp->next) for (matchp = cs.matches; matchp; matchp = matchp->next)
xtables_option_mfcall(matchp->match); xtables_option_mfcall(matchp->match);
if (cs.target != NULL) if (cs.target != NULL)
...@@ -1763,7 +1799,7 @@ int do_command6(int argc, char *argv[], char **table, ...@@ -1763,7 +1799,7 @@ int do_command6(int argc, char *argv[], char **table,
generic_opt_check(command, cs.options); generic_opt_check(command, cs.options);
/* Attempt to acquire the xtables lock */ /* Attempt to acquire the xtables lock */
if (!restore && !xtables_lock(wait)) { if (!restore && !xtables_lock(wait, &wait_interval)) {
fprintf(stderr, "Another app is currently holding the xtables lock. "); fprintf(stderr, "Another app is currently holding the xtables lock. ");
if (wait == 0) if (wait == 0)
fprintf(stderr, "Perhaps you want to use the -w option?\n"); fprintf(stderr, "Perhaps you want to use the -w option?\n");
......
...@@ -42,14 +42,14 @@ static void print_usage(const char *name, const char *version) __attribute__((no ...@@ -42,14 +42,14 @@ static void print_usage(const char *name, const char *version) __attribute__((no
static void print_usage(const char *name, const char *version) static void print_usage(const char *name, const char *version)
{ {
fprintf(stderr, "Usage: %s [-c] [-v] [-t] [-h]\n" fprintf(stderr, "Usage: %s [-c] [-v] [-t] [-h] [-n] [-T table] [-M command]\n"
" [ --counters ]\n" " [ --counters ]\n"
" [ --verbose ]\n" " [ --verbose ]\n"
" [ --test ]\n" " [ --test ]\n"
" [ --help ]\n" " [ --help ]\n"
" [ --noflush ]\n" " [ --noflush ]\n"
" [ --table=<TABLE> ]\n" " [ --table=<TABLE> ]\n"
" [ --modprobe=<command>]\n", name); " [ --modprobe=<command> ]\n", name);
exit(1); exit(1);
} }
......
...@@ -103,8 +103,9 @@ the built-in chains \fBINPUT\fP (for packets destined to local sockets), ...@@ -103,8 +103,9 @@ the built-in chains \fBINPUT\fP (for packets destined to local sockets),
.TP .TP
\fBnat\fP: \fBnat\fP:
This table is consulted when a packet that creates a new This table is consulted when a packet that creates a new
connection is encountered. It consists of three built-ins: \fBPREROUTING\fP connection is encountered. It consists of four built-ins: \fBPREROUTING\fP
(for altering packets as soon as they come in), \fBOUTPUT\fP (for altering packets as soon as they come in), \fBINPUT\fP (for altering
packets destined for local sockets), \fBOUTPUT\fP
(for altering locally-generated packets before routing), and \fBPOSTROUTING\fP (for altering locally-generated packets before routing), and \fBPOSTROUTING\fP
(for altering packets as they are about to go out). (for altering packets as they are about to go out).
IPv6 NAT support is available since kernel 3.7. IPv6 NAT support is available since kernel 3.7.
...@@ -194,6 +195,8 @@ arguments given. The exact rules are suppressed until you use ...@@ -194,6 +195,8 @@ arguments given. The exact rules are suppressed until you use
.nf .nf
iptables \-L \-v iptables \-L \-v
.fi .fi
or
\fBiptables\-save\fP(8).
.TP .TP
\fB\-S\fP, \fB\-\-list\-rules\fP [\fIchain\fP] \fB\-S\fP, \fB\-\-list\-rules\fP [\fIchain\fP]
Print all rules in the selected chain. If no chain is selected, all Print all rules in the selected chain. If no chain is selected, all
...@@ -367,6 +370,13 @@ the program will exit if the lock cannot be obtained. This option will ...@@ -367,6 +370,13 @@ the program will exit if the lock cannot be obtained. This option will
make the program wait (indefinitely or for optional \fIseconds\fP) until make the program wait (indefinitely or for optional \fIseconds\fP) until
the exclusive lock can be obtained. the exclusive lock can be obtained.
.TP .TP
\fB\-W\fP, \fB\-\-wait-interval\fP \fImicroseconds\fP
Interval to wait per each iteration.
When running latency sensitive applications, waiting for the xtables lock
for extended durations may not be acceptable. This option will make each
iteration take the amount of time specified. The default interval is
1 second. This option only works with \fB\-w\fP.
.TP
\fB\-n\fP, \fB\-\-numeric\fP \fB\-n\fP, \fB\-\-numeric\fP
Numeric output. Numeric output.
IP addresses and port numbers will be printed in numeric format. IP addresses and port numbers will be printed in numeric format.
......
...@@ -100,6 +100,7 @@ static struct option original_opts[] = { ...@@ -100,6 +100,7 @@ static struct option original_opts[] = {
{.name = "out-interface", .has_arg = 1, .val = 'o'}, {.name = "out-interface", .has_arg = 1, .val = 'o'},
{.name = "verbose", .has_arg = 0, .val = 'v'}, {.name = "verbose", .has_arg = 0, .val = 'v'},
{.name = "wait", .has_arg = 2, .val = 'w'}, {.name = "wait", .has_arg = 2, .val = 'w'},
{.name = "wait-interval", .has_arg = 2, .val = 'W'},
{.name = "exact", .has_arg = 0, .val = 'x'}, {.name = "exact", .has_arg = 0, .val = 'x'},
{.name = "fragments", .has_arg = 0, .val = 'f'}, {.name = "fragments", .has_arg = 0, .val = 'f'},
{.name = "version", .has_arg = 0, .val = 'V'}, {.name = "version", .has_arg = 0, .val = 'V'},
...@@ -253,7 +254,9 @@ exit_printhelp(const struct xtables_rule_match *matches) ...@@ -253,7 +254,9 @@ exit_printhelp(const struct xtables_rule_match *matches)
" network interface name ([+] for wildcard)\n" " network interface name ([+] for wildcard)\n"
" --table -t table table to manipulate (default: `filter')\n" " --table -t table table to manipulate (default: `filter')\n"
" --verbose -v verbose mode\n" " --verbose -v verbose mode\n"
" --wait -w [seconds] wait for the xtables lock\n" " --wait -w [seconds] maximum wait to acquire xtables lock before give up\n"
" --wait-interval -W [usecs] wait time to try to acquire xtables lock\n"
" default is 1 second\n"
" --line-numbers print line numbers when listing\n" " --line-numbers print line numbers when listing\n"
" --exact -x expand numbers (display exact values)\n" " --exact -x expand numbers (display exact values)\n"
"[!] --fragment -f match second or further fragments only\n" "[!] --fragment -f match second or further fragments only\n"
...@@ -1318,7 +1321,10 @@ int do_command4(int argc, char *argv[], char **table, ...@@ -1318,7 +1321,10 @@ int do_command4(int argc, char *argv[], char **table,
unsigned int nsaddrs = 0, ndaddrs = 0; unsigned int nsaddrs = 0, ndaddrs = 0;
struct in_addr *saddrs = NULL, *smasks = NULL; struct in_addr *saddrs = NULL, *smasks = NULL;
struct in_addr *daddrs = NULL, *dmasks = NULL; struct in_addr *daddrs = NULL, *dmasks = NULL;
struct timeval wait_interval = {
.tv_sec = 1,
};
bool wait_interval_set = false;
int verbose = 0; int verbose = 0;
int wait = 0; int wait = 0;
const char *chain = NULL; const char *chain = NULL;
...@@ -1355,7 +1361,7 @@ int do_command4(int argc, char *argv[], char **table, ...@@ -1355,7 +1361,7 @@ int do_command4(int argc, char *argv[], char **table,
opterr = 0; opterr = 0;
opts = xt_params->orig_opts; opts = xt_params->orig_opts;
while ((cs.c = getopt_long(argc, argv, while ((cs.c = getopt_long(argc, argv,
"-:A:C:D:R:I:L::S::M:F::Z::N:X::E:P:Vh::o:p:s:d:j:i:fbvw::nt:m:xc:g:46", "-:A:C:D:R:I:L::S::M:F::Z::N:X::E:P:Vh::o:p:s:d:j:i:fbvw::W::nt:m:xc:g:46",
opts, NULL)) != -1) { opts, NULL)) != -1) {
switch (cs.c) { switch (cs.c) {
/* /*
...@@ -1609,6 +1615,23 @@ int do_command4(int argc, char *argv[], char **table, ...@@ -1609,6 +1615,23 @@ int do_command4(int argc, char *argv[], char **table,
"wait seconds not numeric"); "wait seconds not numeric");
break; break;
case 'W':
if (restore) {
xtables_error(PARAMETER_PROBLEM,
"You cannot use `-W' from "
"iptables-restore");
}
if (optarg)
parse_wait_interval(optarg, &wait_interval);
else if (optind < argc &&
argv[optind][0] != '-' &&
argv[optind][0] != '!')
parse_wait_interval(argv[optind++],
&wait_interval);
wait_interval_set = true;
break;
case 'm': case 'm':
command_match(&cs); command_match(&cs);
break; break;
...@@ -1709,6 +1732,10 @@ int do_command4(int argc, char *argv[], char **table, ...@@ -1709,6 +1732,10 @@ int do_command4(int argc, char *argv[], char **table,
cs.invert = FALSE; cs.invert = FALSE;
} }
if (!wait && wait_interval_set)
xtables_error(PARAMETER_PROBLEM,
"--wait-interval only makes sense with --wait\n");
if (strcmp(*table, "nat") == 0 && if (strcmp(*table, "nat") == 0 &&
((policy != NULL && strcmp(policy, "DROP") == 0) || ((policy != NULL && strcmp(policy, "DROP") == 0) ||
(cs.jumpto != NULL && strcmp(cs.jumpto, "DROP") == 0))) (cs.jumpto != NULL && strcmp(cs.jumpto, "DROP") == 0)))
...@@ -1759,7 +1786,7 @@ int do_command4(int argc, char *argv[], char **table, ...@@ -1759,7 +1786,7 @@ int do_command4(int argc, char *argv[], char **table,
generic_opt_check(command, cs.options); generic_opt_check(command, cs.options);
/* Attempt to acquire the xtables lock */ /* Attempt to acquire the xtables lock */
if (!restore && !xtables_lock(wait)) { if (!restore && !xtables_lock(wait, &wait_interval)) {
fprintf(stderr, "Another app is currently holding the xtables lock. "); fprintf(stderr, "Another app is currently holding the xtables lock. ");
if (wait == 0) if (wait == 0)
fprintf(stderr, "Perhaps you want to use the -w option?\n"); fprintf(stderr, "Perhaps you want to use the -w option?\n");
......
/* /*
* (C) 2012-2013 by Pablo Neira Ayuso <pablo@netfilter.org> * (C) 2012-2014 by Pablo Neira Ayuso <pablo@netfilter.org>
* (C) 2013 by Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com> * (C) 2013 by Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include <netinet/in.h> #include <netinet/in.h>
#include <arpa/inet.h> #include <arpa/inet.h>
#include <netinet/ip.h> #include <netinet/ip.h>
#include <netdb.h>
#include <xtables.h> #include <xtables.h>
...@@ -30,6 +31,7 @@ static int nft_ipv4_add(struct nftnl_rule *r, void *data) ...@@ -30,6 +31,7 @@ static int nft_ipv4_add(struct nftnl_rule *r, void *data)
struct iptables_command_state *cs = data; struct iptables_command_state *cs = data;
struct xtables_rule_match *matchp; struct xtables_rule_match *matchp;
uint32_t op; uint32_t op;
int ret;
if (cs->fw.ip.iniface[0] != '\0') { if (cs->fw.ip.iniface[0] != '\0') {
op = nft_invflags2cmp(cs->fw.ip.invflags, IPT_INV_VIA_IN); op = nft_invflags2cmp(cs->fw.ip.invflags, IPT_INV_VIA_IN);
...@@ -73,8 +75,16 @@ static int nft_ipv4_add(struct nftnl_rule *r, void *data) ...@@ -73,8 +75,16 @@ static int nft_ipv4_add(struct nftnl_rule *r, void *data)
add_compat(r, cs->fw.ip.proto, cs->fw.ip.invflags); add_compat(r, cs->fw.ip.proto, cs->fw.ip.invflags);
for (matchp = cs->matches; matchp; matchp = matchp->next) { for (matchp = cs->matches; matchp; matchp = matchp->next) {
if (add_match(r, matchp->match->m) < 0) /* Use nft built-in comments support instead of comment match */
break; if (strcmp(matchp->match->name, "comment") == 0) {
ret = add_comment(r, (char *)matchp->match->m->data);
if (ret < 0)
return ret;
} else {
ret = add_match(r, matchp->match->m);
if (ret < 0)
return ret;
}
} }
/* Counters need to me added before the target, otherwise they are /* Counters need to me added before the target, otherwise they are
...@@ -428,6 +438,65 @@ static void nft_ipv4_save_counters(const void *data) ...@@ -428,6 +438,65 @@ static void nft_ipv4_save_counters(const void *data)
save_counters(cs->counters.pcnt, cs->counters.bcnt); save_counters(cs->counters.pcnt, cs->counters.bcnt);
} }
static int nft_ipv4_xlate(const void *data, struct xt_xlate *xl)
{
const struct iptables_command_state *cs = data;
const char *comment;
int ret;
xlate_ifname(xl, "iifname", cs->fw.ip.iniface,
cs->fw.ip.invflags & IPT_INV_VIA_IN);
xlate_ifname(xl, "oifname", cs->fw.ip.outiface,
cs->fw.ip.invflags & IPT_INV_VIA_OUT);
if (cs->fw.ip.flags & IPT_F_FRAG) {
xt_xlate_add(xl, "ip frag-off %s%x ",
cs->fw.ip.invflags & IPT_INV_FRAG? "" : "!= ", 0);
}
if (cs->fw.ip.proto != 0) {
const struct protoent *pent =
getprotobynumber(cs->fw.ip.proto);
char protonum[strlen("255") + 1];
if (!xlate_find_match(cs, pent->p_name)) {
snprintf(protonum, sizeof(protonum), "%u",
cs->fw.ip.proto);
protonum[sizeof(protonum) - 1] = '\0';
xt_xlate_add(xl, "ip protocol %s%s ",
cs->fw.ip.invflags & IPT_INV_PROTO ?
"!= " : "",
pent ? pent->p_name : protonum);
}
}
if (cs->fw.ip.src.s_addr != 0) {
xt_xlate_add(xl, "ip saddr %s%s ",
cs->fw.ip.invflags & IPT_INV_SRCIP ? "!= " : "",
inet_ntoa(cs->fw.ip.src));
}
if (cs->fw.ip.dst.s_addr != 0) {
xt_xlate_add(xl, "ip daddr %s%s ",
cs->fw.ip.invflags & IPT_INV_DSTIP ? "!= " : "",
inet_ntoa(cs->fw.ip.dst));
}
ret = xlate_matches(cs, xl);
if (!ret)
return ret;
/* Always add counters per rule, as in iptables */
xt_xlate_add(xl, "counter ");
comment = xt_xlate_get_comment(xl);
if (comment)
xt_xlate_add(xl, "comment %s", comment);
ret = xlate_action(cs, !!(cs->fw.ip.flags & IPT_F_GOTO), xl);
return ret;
}
struct nft_family_ops nft_family_ops_ipv4 = { struct nft_family_ops nft_family_ops_ipv4 = {
.add = nft_ipv4_add, .add = nft_ipv4_add,
.is_same = nft_ipv4_is_same, .is_same = nft_ipv4_is_same,
...@@ -442,4 +511,5 @@ struct nft_family_ops nft_family_ops_ipv4 = { ...@@ -442,4 +511,5 @@ struct nft_family_ops nft_family_ops_ipv4 = {
.post_parse = nft_ipv4_post_parse, .post_parse = nft_ipv4_post_parse,
.parse_target = nft_ipv4_parse_target, .parse_target = nft_ipv4_parse_target,
.rule_find = nft_ipv4_rule_find, .rule_find = nft_ipv4_rule_find,
.xlate = nft_ipv4_xlate,
}; };
/* /*
* (C) 2012-2013 by Pablo Neira Ayuso <pablo@netfilter.org> * (C) 2012-2014 by Pablo Neira Ayuso <pablo@netfilter.org>
* (C) 2013 by Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com> * (C) 2013 by Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include <sys/socket.h> #include <sys/socket.h>
#include <arpa/inet.h> #include <arpa/inet.h>
#include <netinet/ip6.h> #include <netinet/ip6.h>
#include <netdb.h>
#include <xtables.h> #include <xtables.h>
...@@ -29,6 +30,7 @@ static int nft_ipv6_add(struct nftnl_rule *r, void *data) ...@@ -29,6 +30,7 @@ static int nft_ipv6_add(struct nftnl_rule *r, void *data)
struct iptables_command_state *cs = data; struct iptables_command_state *cs = data;
struct xtables_rule_match *matchp; struct xtables_rule_match *matchp;
uint32_t op; uint32_t op;
int ret;
if (cs->fw6.ipv6.iniface[0] != '\0') { if (cs->fw6.ipv6.iniface[0] != '\0') {
op = nft_invflags2cmp(cs->fw6.ipv6.invflags, IPT_INV_VIA_IN); op = nft_invflags2cmp(cs->fw6.ipv6.invflags, IPT_INV_VIA_IN);
...@@ -61,8 +63,16 @@ static int nft_ipv6_add(struct nftnl_rule *r, void *data) ...@@ -61,8 +63,16 @@ static int nft_ipv6_add(struct nftnl_rule *r, void *data)
add_compat(r, cs->fw6.ipv6.proto, cs->fw6.ipv6.invflags); add_compat(r, cs->fw6.ipv6.proto, cs->fw6.ipv6.invflags);
for (matchp = cs->matches; matchp; matchp = matchp->next) { for (matchp = cs->matches; matchp; matchp = matchp->next) {
if (add_match(r, matchp->match->m) < 0) /* Use nft built-in comments support instead of comment match */
break; if (strcmp(matchp->match->name, "comment") == 0) {
ret = add_comment(r, (char *)matchp->match->m->data);
if (ret < 0)
return ret;
} else {
ret = add_match(r, matchp->match->m);
if (ret < 0)
return ret;
}
} }
/* Counters need to me added before the target, otherwise they are /* Counters need to me added before the target, otherwise they are
...@@ -134,7 +144,7 @@ static void nft_ipv6_parse_payload(struct nft_xt_ctx *ctx, ...@@ -134,7 +144,7 @@ static void nft_ipv6_parse_payload(struct nft_xt_ctx *ctx,
} }
if (inv) if (inv)
cs->fw6.ipv6.invflags |= IPT_INV_SRCIP; cs->fw6.ipv6.invflags |= IP6T_INV_SRCIP;
break; break;
case offsetof(struct ip6_hdr, ip6_dst): case offsetof(struct ip6_hdr, ip6_dst):
get_cmp_data(e, &addr, sizeof(addr), &inv); get_cmp_data(e, &addr, sizeof(addr), &inv);
...@@ -147,14 +157,14 @@ static void nft_ipv6_parse_payload(struct nft_xt_ctx *ctx, ...@@ -147,14 +157,14 @@ static void nft_ipv6_parse_payload(struct nft_xt_ctx *ctx,
} }
if (inv) if (inv)
cs->fw6.ipv6.invflags |= IPT_INV_DSTIP; cs->fw6.ipv6.invflags |= IP6T_INV_DSTIP;
break; break;
case offsetof(struct ip6_hdr, ip6_nxt): case offsetof(struct ip6_hdr, ip6_nxt):
get_cmp_data(e, &proto, sizeof(proto), &inv); get_cmp_data(e, &proto, sizeof(proto), &inv);
cs->fw6.ipv6.flags |= IP6T_F_PROTO; cs->fw6.ipv6.flags |= IP6T_F_PROTO;
cs->fw6.ipv6.proto = proto; cs->fw6.ipv6.proto = proto;
if (inv) if (inv)
cs->fw6.ipv6.invflags |= IPT_INV_PROTO; cs->fw6.ipv6.invflags |= IP6T_INV_PROTO;
default: default:
DEBUGP("unknown payload offset %d\n", ctx->payload.offset); DEBUGP("unknown payload offset %d\n", ctx->payload.offset);
break; break;
...@@ -185,7 +195,7 @@ static void print_ipv6_addr(const struct iptables_command_state *cs, ...@@ -185,7 +195,7 @@ static void print_ipv6_addr(const struct iptables_command_state *cs,
{ {
char buf[BUFSIZ]; char buf[BUFSIZ];
fputc(cs->fw6.ipv6.invflags & IPT_INV_SRCIP ? '!' : ' ', stdout); fputc(cs->fw6.ipv6.invflags & IP6T_INV_SRCIP ? '!' : ' ', stdout);
if (IN6_IS_ADDR_UNSPECIFIED(&cs->fw6.ipv6.src) if (IN6_IS_ADDR_UNSPECIFIED(&cs->fw6.ipv6.src)
&& !(format & FMT_NUMERIC)) && !(format & FMT_NUMERIC))
printf(FMT("%-19s ","%s "), "anywhere"); printf(FMT("%-19s ","%s "), "anywhere");
...@@ -201,7 +211,7 @@ static void print_ipv6_addr(const struct iptables_command_state *cs, ...@@ -201,7 +211,7 @@ static void print_ipv6_addr(const struct iptables_command_state *cs,
} }
fputc(cs->fw6.ipv6.invflags & IPT_INV_DSTIP ? '!' : ' ', stdout); fputc(cs->fw6.ipv6.invflags & IP6T_INV_DSTIP ? '!' : ' ', stdout);
if (IN6_IS_ADDR_UNSPECIFIED(&cs->fw6.ipv6.dst) if (IN6_IS_ADDR_UNSPECIFIED(&cs->fw6.ipv6.dst)
&& !(format & FMT_NUMERIC)) && !(format & FMT_NUMERIC))
printf(FMT("%-19s ","-> %s"), "anywhere"); printf(FMT("%-19s ","-> %s"), "anywhere");
...@@ -265,9 +275,9 @@ static void nft_ipv6_save_firewall(const void *data, unsigned int format) ...@@ -265,9 +275,9 @@ static void nft_ipv6_save_firewall(const void *data, unsigned int format)
cs->fw6.ipv6.outiface_mask); cs->fw6.ipv6.outiface_mask);
save_ipv6_addr('s', &cs->fw6.ipv6.src, save_ipv6_addr('s', &cs->fw6.ipv6.src,
cs->fw6.ipv6.invflags & IPT_INV_SRCIP); cs->fw6.ipv6.invflags & IP6T_INV_SRCIP);
save_ipv6_addr('d', &cs->fw6.ipv6.dst, save_ipv6_addr('d', &cs->fw6.ipv6.dst,
cs->fw6.ipv6.invflags & IPT_INV_DSTIP); cs->fw6.ipv6.invflags & IP6T_INV_DSTIP);
save_matches_and_target(cs->matches, cs->target, save_matches_and_target(cs->matches, cs->target,
cs->jumpto, cs->fw6.ipv6.flags, &cs->fw6); cs->jumpto, cs->fw6.ipv6.flags, &cs->fw6);
...@@ -376,6 +386,66 @@ static void nft_ipv6_save_counters(const void *data) ...@@ -376,6 +386,66 @@ static void nft_ipv6_save_counters(const void *data)
save_counters(cs->counters.pcnt, cs->counters.bcnt); save_counters(cs->counters.pcnt, cs->counters.bcnt);
} }
static void xlate_ipv6_addr(const char *selector, const struct in6_addr *addr,
int invert, struct xt_xlate *xl)
{
char addr_str[INET6_ADDRSTRLEN];
if (!invert && IN6_IS_ADDR_UNSPECIFIED(addr))
return;
inet_ntop(AF_INET6, addr, addr_str, INET6_ADDRSTRLEN);
xt_xlate_add(xl, "%s %s%s ", selector, invert ? "!= " : "", addr_str);
}
static int nft_ipv6_xlate(const void *data, struct xt_xlate *xl)
{
const struct iptables_command_state *cs = data;
const char *comment;
int ret;
xlate_ifname(xl, "iifname", cs->fw6.ipv6.iniface,
cs->fw6.ipv6.invflags & IP6T_INV_VIA_IN);
xlate_ifname(xl, "oifname", cs->fw6.ipv6.outiface,
cs->fw6.ipv6.invflags & IP6T_INV_VIA_OUT);
if (cs->fw6.ipv6.proto != 0) {
const struct protoent *pent =
getprotobynumber(cs->fw6.ipv6.proto);
char protonum[strlen("255") + 1];
if (!xlate_find_match(cs, pent->p_name)) {
snprintf(protonum, sizeof(protonum), "%u",
cs->fw6.ipv6.proto);
protonum[sizeof(protonum) - 1] = '\0';
xt_xlate_add(xl, "meta l4proto %s%s ",
cs->fw6.ipv6.invflags & IP6T_INV_PROTO ?
"!= " : "",
pent ? pent->p_name : protonum);
}
}
xlate_ipv6_addr("ip6 saddr", &cs->fw6.ipv6.src,
cs->fw6.ipv6.invflags & IP6T_INV_SRCIP, xl);
xlate_ipv6_addr("ip6 daddr", &cs->fw6.ipv6.dst,
cs->fw6.ipv6.invflags & IP6T_INV_DSTIP, xl);
ret = xlate_matches(cs, xl);
if (!ret)
return ret;
/* Always add counters per rule, as in iptables */
xt_xlate_add(xl, "counter ");
comment = xt_xlate_get_comment(xl);
if (comment)
xt_xlate_add(xl, "comment %s", comment);
ret = xlate_action(cs, !!(cs->fw6.ipv6.flags & IP6T_F_GOTO), xl);
return ret;
}
struct nft_family_ops nft_family_ops_ipv6 = { struct nft_family_ops nft_family_ops_ipv6 = {
.add = nft_ipv6_add, .add = nft_ipv6_add,
.is_same = nft_ipv6_is_same, .is_same = nft_ipv6_is_same,
...@@ -390,4 +460,5 @@ struct nft_family_ops nft_family_ops_ipv6 = { ...@@ -390,4 +460,5 @@ struct nft_family_ops nft_family_ops_ipv6 = {
.post_parse = nft_ipv6_post_parse, .post_parse = nft_ipv6_post_parse,
.parse_target = nft_ipv6_parse_target, .parse_target = nft_ipv6_parse_target,
.rule_find = nft_ipv6_rule_find, .rule_find = nft_ipv6_rule_find,
.xlate = nft_ipv6_xlate,
}; };
...@@ -525,6 +525,32 @@ void nft_rule_to_iptables_command_state(struct nftnl_rule *r, ...@@ -525,6 +525,32 @@ void nft_rule_to_iptables_command_state(struct nftnl_rule *r,
nftnl_expr_iter_destroy(iter); nftnl_expr_iter_destroy(iter);
if (nftnl_rule_is_set(r, NFTNL_RULE_USERDATA)) {
const void *data;
uint32_t len;
struct xtables_match *match;
struct xt_entry_match *m;
data = nftnl_rule_get_data(r, NFTNL_RULE_USERDATA, &len);
match = xtables_find_match("comment", XTF_TRY_LOAD,
&cs->matches);
if (match == NULL)
return;
m = calloc(1, sizeof(struct xt_entry_match) + len);
if (m == NULL) {
fprintf(stderr, "OOM");
exit(EXIT_FAILURE);
}
memcpy(&m->data, get_comment(data, len), len);
m->u.match_size = len + XT_ALIGN(sizeof(struct xt_entry_match));
m->u.user.revision = 0;
strcpy(m->u.user.name, match->name);
match->m = m;
}
if (cs->target != NULL) if (cs->target != NULL)
cs->jumpto = cs->target->name; cs->jumpto = cs->target->name;
else if (cs->jumpto != NULL) else if (cs->jumpto != NULL)
......
...@@ -37,6 +37,7 @@ ...@@ -37,6 +37,7 @@
#define FMT(tab,notab) ((format) & FMT_NOTABLE ? (notab) : (tab)) #define FMT(tab,notab) ((format) & FMT_NOTABLE ? (notab) : (tab))
struct xtables_args; struct xtables_args;
struct xt_xlate;
enum { enum {
NFT_XT_CTX_PAYLOAD = (1 << 0), NFT_XT_CTX_PAYLOAD = (1 << 0),
...@@ -101,6 +102,7 @@ struct nft_family_ops { ...@@ -101,6 +102,7 @@ struct nft_family_ops {
void (*parse_target)(struct xtables_target *t, void *data); void (*parse_target)(struct xtables_target *t, void *data);
bool (*rule_find)(struct nft_family_ops *ops, struct nftnl_rule *r, bool (*rule_find)(struct nft_family_ops *ops, struct nftnl_rule *r,
void *data); void *data);
int (*xlate)(const void *data, struct xt_xlate *xl);
}; };
void add_meta(struct nftnl_rule *r, uint32_t key); void add_meta(struct nftnl_rule *r, uint32_t key);
...@@ -217,4 +219,54 @@ struct xtables_args { ...@@ -217,4 +219,54 @@ struct xtables_args {
#define CMD_ZERO_NUM 0x2000U #define CMD_ZERO_NUM 0x2000U
#define CMD_CHECK 0x4000U #define CMD_CHECK 0x4000U
struct nft_xt_cmd_parse {
unsigned int command;
unsigned int rulenum;
char *table;
char *chain;
char *newname;
char *policy;
bool restore;
int verbose;
};
void do_parse(struct nft_handle *h, int argc, char *argv[],
struct nft_xt_cmd_parse *p, struct iptables_command_state *cs,
struct xtables_args *args);
struct nft_xt_restore_parse {
FILE *in;
int testing;
const char *tablename;
};
struct nftnl_chain_list;
struct nft_xt_restore_cb {
void (*table_new)(struct nft_handle *h, const char *table);
struct nftnl_chain_list *(*chain_list)(struct nft_handle *h);
int (*chains_purge)(struct nft_handle *h, const char *table,
struct nftnl_chain_list *clist);
void (*chain_del)(struct nftnl_chain_list *clist, const char *curtable,
const char *chain);
int (*chain_set)(struct nft_handle *h, const char *table,
const char *chain, const char *policy,
const struct xt_counters *counters);
int (*chain_user_add)(struct nft_handle *h, const char *chain,
const char *table);
int (*rule_flush)(struct nft_handle *h, const char *chain, const char *table);
int (*do_command)(struct nft_handle *h, int argc, char *argv[],
char **table, bool restore);
int (*commit)(struct nft_handle *h);
int (*abort)(struct nft_handle *h);
};
void xtables_restore_parse(struct nft_handle *h,
struct nft_xt_restore_parse *p,
struct nft_xt_restore_cb *cb,
int argc, char *argv[]);
#endif #endif
...@@ -43,6 +43,7 @@ ...@@ -43,6 +43,7 @@
#include <libnftnl/rule.h> #include <libnftnl/rule.h>
#include <libnftnl/expr.h> #include <libnftnl/expr.h>
#include <libnftnl/set.h> #include <libnftnl/set.h>
#include <libnftnl/udata.h>
#include <netinet/in.h> /* inet_ntoa */ #include <netinet/in.h> /* inet_ntoa */
#include <arpa/inet.h> #include <arpa/inet.h>
...@@ -779,8 +780,18 @@ int nft_init(struct nft_handle *h, struct builtin_table *t) ...@@ -779,8 +780,18 @@ int nft_init(struct nft_handle *h, struct builtin_table *t)
return 0; return 0;
} }
static void flush_rule_cache(struct nft_handle *h)
{
if (!h->rule_cache)
return;
nftnl_rule_list_free(h->rule_cache);
h->rule_cache = NULL;
}
void nft_fini(struct nft_handle *h) void nft_fini(struct nft_handle *h)
{ {
flush_rule_cache(h);
mnl_socket_close(h->nl); mnl_socket_close(h->nl);
free(mnl_nlmsg_batch_head(h->batch)); free(mnl_nlmsg_batch_head(h->batch));
mnl_nlmsg_batch_stop(h->batch); mnl_nlmsg_batch_stop(h->batch);
...@@ -1007,6 +1018,63 @@ int add_counters(struct nftnl_rule *r, uint64_t packets, uint64_t bytes) ...@@ -1007,6 +1018,63 @@ int add_counters(struct nftnl_rule *r, uint64_t packets, uint64_t bytes)
return 0; return 0;
} }
enum udata_type {
UDATA_TYPE_COMMENT,
__UDATA_TYPE_MAX,
};
#define UDATA_TYPE_MAX (__UDATA_TYPE_MAX - 1)
int add_comment(struct nftnl_rule *r, const char *comment)
{
struct nftnl_udata_buf *udata;
udata = nftnl_udata_buf_alloc(NFT_USERDATA_MAXLEN);
if (!udata)
return -ENOMEM;
if (!nftnl_udata_put_strz(udata, UDATA_TYPE_COMMENT, comment))
return -ENOMEM;
nftnl_rule_set_data(r, NFTNL_RULE_USERDATA,
nftnl_udata_buf_data(udata),
nftnl_udata_buf_len(udata));
nftnl_udata_buf_free(udata);
return 0;
}
static int parse_udata_cb(const struct nftnl_udata *attr, void *data)
{
unsigned char *value = nftnl_udata_get(attr);
uint8_t type = nftnl_udata_type(attr);
uint8_t len = nftnl_udata_len(attr);
const struct nftnl_udata **tb = data;
switch (type) {
case UDATA_TYPE_COMMENT:
if (value[len - 1] != '\0')
return -1;
break;
default:
return 0;
}
tb[type] = attr;
return 0;
}
char *get_comment(const void *data, uint32_t data_len)
{
const struct nftnl_udata *tb[UDATA_TYPE_MAX + 1] = {};
if (nftnl_udata_parse(data, data_len, parse_udata_cb, tb) < 0)
return NULL;
if (!tb[UDATA_TYPE_COMMENT])
return NULL;
return nftnl_udata_get(tb[UDATA_TYPE_COMMENT]);
}
void add_compat(struct nftnl_rule *r, uint32_t proto, bool inv) void add_compat(struct nftnl_rule *r, uint32_t proto, bool inv)
{ {
nftnl_rule_set_u32(r, NFTNL_RULE_COMPAT_PROTO, proto); nftnl_rule_set_u32(r, NFTNL_RULE_COMPAT_PROTO, proto);
...@@ -1063,6 +1131,7 @@ nft_rule_append(struct nft_handle *h, const char *chain, const char *table, ...@@ -1063,6 +1131,7 @@ nft_rule_append(struct nft_handle *h, const char *chain, const char *table,
if (batch_rule_add(h, type, r) < 0) if (batch_rule_add(h, type, r) < 0)
nftnl_rule_free(r); nftnl_rule_free(r);
flush_rule_cache(h);
return 1; return 1;
} }
...@@ -1226,6 +1295,9 @@ static struct nftnl_rule_list *nft_rule_list_get(struct nft_handle *h) ...@@ -1226,6 +1295,9 @@ static struct nftnl_rule_list *nft_rule_list_get(struct nft_handle *h)
struct nftnl_rule_list *list; struct nftnl_rule_list *list;
int ret; int ret;
if (h->rule_cache)
return h->rule_cache;
list = nftnl_rule_list_alloc(); list = nftnl_rule_list_alloc();
if (list == NULL) if (list == NULL)
return 0; return 0;
...@@ -1239,6 +1311,7 @@ static struct nftnl_rule_list *nft_rule_list_get(struct nft_handle *h) ...@@ -1239,6 +1311,7 @@ static struct nftnl_rule_list *nft_rule_list_get(struct nft_handle *h)
return NULL; return NULL;
} }
h->rule_cache = list;
return list; return list;
} }
...@@ -1275,7 +1348,6 @@ next: ...@@ -1275,7 +1348,6 @@ next:
} }
nftnl_rule_list_iter_destroy(iter); nftnl_rule_list_iter_destroy(iter);
nftnl_rule_list_free(list);
/* the core expects 1 for success and 0 for error */ /* the core expects 1 for success and 0 for error */
return 1; return 1;
...@@ -1338,6 +1410,7 @@ next: ...@@ -1338,6 +1410,7 @@ next:
} }
nftnl_chain_list_iter_destroy(iter); nftnl_chain_list_iter_destroy(iter);
flush_rule_cache(h);
err: err:
nftnl_chain_list_free(list); nftnl_chain_list_free(list);
...@@ -1708,16 +1781,6 @@ static int __nft_rule_del(struct nft_handle *h, struct nftnl_rule_list *list, ...@@ -1708,16 +1781,6 @@ static int __nft_rule_del(struct nft_handle *h, struct nftnl_rule_list *list,
return 1; return 1;
} }
struct nftnl_rule_list *nft_rule_list_create(struct nft_handle *h)
{
return nft_rule_list_get(h);
}
void nft_rule_list_destroy(struct nftnl_rule_list *list)
{
nftnl_rule_list_free(list);
}
static struct nftnl_rule * static struct nftnl_rule *
nft_rule_find(struct nft_handle *h, struct nftnl_rule_list *list, nft_rule_find(struct nft_handle *h, struct nftnl_rule_list *list,
const char *chain, const char *table, void *data, int rulenum) const char *chain, const char *table, void *data, int rulenum)
...@@ -1773,7 +1836,7 @@ int nft_rule_check(struct nft_handle *h, const char *chain, ...@@ -1773,7 +1836,7 @@ int nft_rule_check(struct nft_handle *h, const char *chain,
nft_fn = nft_rule_check; nft_fn = nft_rule_check;
list = nft_rule_list_create(h); list = nft_rule_list_get(h);
if (list == NULL) if (list == NULL)
return 0; return 0;
...@@ -1781,8 +1844,6 @@ int nft_rule_check(struct nft_handle *h, const char *chain, ...@@ -1781,8 +1844,6 @@ int nft_rule_check(struct nft_handle *h, const char *chain,
if (ret == 0) if (ret == 0)
errno = ENOENT; errno = ENOENT;
nft_rule_list_destroy(list);
return ret; return ret;
} }
...@@ -1795,7 +1856,7 @@ int nft_rule_delete(struct nft_handle *h, const char *chain, ...@@ -1795,7 +1856,7 @@ int nft_rule_delete(struct nft_handle *h, const char *chain,
nft_fn = nft_rule_delete; nft_fn = nft_rule_delete;
list = nft_rule_list_create(h); list = nft_rule_list_get(h);
if (list == NULL) if (list == NULL)
return 0; return 0;
...@@ -1807,7 +1868,7 @@ int nft_rule_delete(struct nft_handle *h, const char *chain, ...@@ -1807,7 +1868,7 @@ int nft_rule_delete(struct nft_handle *h, const char *chain,
} else } else
errno = ENOENT; errno = ENOENT;
nft_rule_list_destroy(list); flush_rule_cache(h);
return ret; return ret;
} }
...@@ -1831,6 +1892,7 @@ nft_rule_add(struct nft_handle *h, const char *chain, ...@@ -1831,6 +1892,7 @@ nft_rule_add(struct nft_handle *h, const char *chain,
return 0; return 0;
} }
flush_rule_cache(h);
return 1; return 1;
} }
...@@ -1848,7 +1910,7 @@ int nft_rule_insert(struct nft_handle *h, const char *chain, ...@@ -1848,7 +1910,7 @@ int nft_rule_insert(struct nft_handle *h, const char *chain,
nft_fn = nft_rule_insert; nft_fn = nft_rule_insert;
if (rulenum > 0) { if (rulenum > 0) {
list = nft_rule_list_create(h); list = nft_rule_list_get(h);
if (list == NULL) if (list == NULL)
goto err; goto err;
...@@ -1860,7 +1922,7 @@ int nft_rule_insert(struct nft_handle *h, const char *chain, ...@@ -1860,7 +1922,7 @@ int nft_rule_insert(struct nft_handle *h, const char *chain,
r = nft_rule_find(h, list, chain, table, data, r = nft_rule_find(h, list, chain, table, data,
rulenum - 1); rulenum - 1);
if (r != NULL) { if (r != NULL) {
nft_rule_list_destroy(list); flush_rule_cache(h);
return nft_rule_append(h, chain, table, data, return nft_rule_append(h, chain, table, data,
0, verbose); 0, verbose);
} }
...@@ -1872,12 +1934,12 @@ int nft_rule_insert(struct nft_handle *h, const char *chain, ...@@ -1872,12 +1934,12 @@ int nft_rule_insert(struct nft_handle *h, const char *chain,
handle = nftnl_rule_get_u64(r, NFTNL_RULE_HANDLE); handle = nftnl_rule_get_u64(r, NFTNL_RULE_HANDLE);
DEBUGP("adding after rule handle %"PRIu64"\n", handle); DEBUGP("adding after rule handle %"PRIu64"\n", handle);
nft_rule_list_destroy(list); flush_rule_cache(h);
} }
return nft_rule_add(h, chain, table, data, handle, verbose); return nft_rule_add(h, chain, table, data, handle, verbose);
err: err:
nft_rule_list_destroy(list); flush_rule_cache(h);
return 0; return 0;
} }
...@@ -1890,7 +1952,7 @@ int nft_rule_delete_num(struct nft_handle *h, const char *chain, ...@@ -1890,7 +1952,7 @@ int nft_rule_delete_num(struct nft_handle *h, const char *chain,
nft_fn = nft_rule_delete_num; nft_fn = nft_rule_delete_num;
list = nft_rule_list_create(h); list = nft_rule_list_get(h);
if (list == NULL) if (list == NULL)
return 0; return 0;
...@@ -1905,7 +1967,7 @@ int nft_rule_delete_num(struct nft_handle *h, const char *chain, ...@@ -1905,7 +1967,7 @@ int nft_rule_delete_num(struct nft_handle *h, const char *chain,
} else } else
errno = ENOENT; errno = ENOENT;
nft_rule_list_destroy(list); flush_rule_cache(h);
return ret; return ret;
} }
...@@ -1919,7 +1981,7 @@ int nft_rule_replace(struct nft_handle *h, const char *chain, ...@@ -1919,7 +1981,7 @@ int nft_rule_replace(struct nft_handle *h, const char *chain,
nft_fn = nft_rule_replace; nft_fn = nft_rule_replace;
list = nft_rule_list_create(h); list = nft_rule_list_get(h);
if (list == NULL) if (list == NULL)
return 0; return 0;
...@@ -1935,7 +1997,7 @@ int nft_rule_replace(struct nft_handle *h, const char *chain, ...@@ -1935,7 +1997,7 @@ int nft_rule_replace(struct nft_handle *h, const char *chain,
} else } else
errno = ENOENT; errno = ENOENT;
nft_rule_list_destroy(list); flush_rule_cache(h);
return ret; return ret;
} }
...@@ -1989,8 +2051,6 @@ next: ...@@ -1989,8 +2051,6 @@ next:
nftnl_rule_list_iter_destroy(iter); nftnl_rule_list_iter_destroy(iter);
err: err:
nftnl_rule_list_free(list);
if (ret == 0) if (ret == 0)
errno = ENOENT; errno = ENOENT;
...@@ -2198,7 +2258,7 @@ int nft_rule_zero_counters(struct nft_handle *h, const char *chain, ...@@ -2198,7 +2258,7 @@ int nft_rule_zero_counters(struct nft_handle *h, const char *chain,
nft_fn = nft_rule_delete; nft_fn = nft_rule_delete;
list = nft_rule_list_create(h); list = nft_rule_list_get(h);
if (list == NULL) if (list == NULL)
return 0; return 0;
...@@ -2218,7 +2278,7 @@ int nft_rule_zero_counters(struct nft_handle *h, const char *chain, ...@@ -2218,7 +2278,7 @@ int nft_rule_zero_counters(struct nft_handle *h, const char *chain,
false); false);
error: error:
nft_rule_list_destroy(list); flush_rule_cache(h);
return ret; return ret;
} }
...@@ -2650,3 +2710,197 @@ uint32_t nft_invflags2cmp(uint32_t invflags, uint32_t flag) ...@@ -2650,3 +2710,197 @@ uint32_t nft_invflags2cmp(uint32_t invflags, uint32_t flag)
return NFT_CMP_EQ; return NFT_CMP_EQ;
} }
#define NFT_COMPAT_EXPR_MAX 8
static const char *supported_exprs[NFT_COMPAT_EXPR_MAX] = {
"match",
"target",
"payload",
"meta",
"cmp",
"bitwise",
"counter",
"immediate"
};
static int nft_is_expr_compatible(const char *name)
{
int i;
for (i = 0; i < NFT_COMPAT_EXPR_MAX; i++) {
if (strcmp(supported_exprs[i], name) == 0)
return 0;
}
return 1;
}
static int nft_is_rule_compatible(struct nftnl_rule *rule)
{
struct nftnl_expr_iter *iter;
struct nftnl_expr *expr;
int ret = 0;
iter = nftnl_expr_iter_create(rule);
if (iter == NULL)
return -1;
expr = nftnl_expr_iter_next(iter);
while (expr != NULL) {
const char *name = nftnl_expr_get_str(expr, NFTNL_EXPR_NAME);
if (nft_is_expr_compatible(name) == 0) {
expr = nftnl_expr_iter_next(iter);
continue;
}
ret = 1;
break;
}
nftnl_expr_iter_destroy(iter);
return ret;
}
static int nft_is_chain_compatible(const char *table, const char *chain)
{
const char *cur_table;
struct builtin_chain *chains;
int i, j;
for (i = 0; i < TABLES_MAX; i++) {
cur_table = xtables_ipv4[i].name;
chains = xtables_ipv4[i].chains;
if (strcmp(table, cur_table) != 0)
continue;
for (j = 0; j < NF_INET_NUMHOOKS && chains[j].name; j++) {
if (strcmp(chain, chains[j].name) == 0)
return 0;
}
}
return 1;
}
static int nft_are_chains_compatible(struct nft_handle *h)
{
struct nftnl_chain_list *list;
struct nftnl_chain_list_iter *iter;
struct nftnl_chain *chain;
int ret = 0;
list = nftnl_chain_list_get(h);
if (list == NULL)
return -1;
iter = nftnl_chain_list_iter_create(list);
if (iter == NULL)
return -1;
chain = nftnl_chain_list_iter_next(iter);
while (chain != NULL) {
if (!nft_chain_builtin(chain))
goto next;
const char *table = nftnl_chain_get(chain, NFTNL_CHAIN_TABLE);
const char *name = nftnl_chain_get(chain, NFTNL_CHAIN_NAME);
if (nft_is_chain_compatible(table, name) == 1) {
ret = 1;
break;
}
next:
chain = nftnl_chain_list_iter_next(iter);
}
nftnl_chain_list_iter_destroy(iter);
nftnl_chain_list_free(list);
return ret;
}
static int nft_is_table_compatible(const char *name)
{
int i;
for (i = 0; i < TABLES_MAX; i++) {
if (strcmp(xtables_ipv4[i].name, name) == 0)
return 0;
}
return 1;
}
static int nft_are_tables_compatible(struct nft_handle *h)
{
struct nftnl_table_list *list;
struct nftnl_table_list_iter *iter;
struct nftnl_table *table;
int ret = 0;
list = nftnl_table_list_get(h);
if (list == NULL)
return -1;
iter = nftnl_table_list_iter_create(list);
if (iter == NULL)
return -1;
table = nftnl_table_list_iter_next(iter);
while (table != NULL) {
const char *name = nftnl_table_get(table, NFTNL_TABLE_NAME);
if (nft_is_table_compatible(name) == 0) {
table = nftnl_table_list_iter_next(iter);
continue;
}
ret = 1;
break;
}
nftnl_table_list_iter_destroy(iter);
nftnl_table_list_free(list);
return ret;
}
int nft_is_ruleset_compatible(struct nft_handle *h)
{
struct nftnl_rule_list *list;
struct nftnl_rule_list_iter *iter;
struct nftnl_rule *rule;
int ret = 0;
ret = nft_are_tables_compatible(h);
if (ret != 0)
return ret;
ret = nft_are_chains_compatible(h);
if (ret != 0)
return ret;
list = nft_rule_list_get(h);
if (list == NULL)
return -1;
iter = nftnl_rule_list_iter_create(list);
if (iter == NULL)
return -1;
rule = nftnl_rule_list_iter_next(iter);
while (rule != NULL) {
ret = nft_is_rule_compatible(rule);
if (ret != 0)
break;
rule = nftnl_rule_list_iter_next(iter);
}
nftnl_rule_list_iter_destroy(iter);
return ret;
}
...@@ -35,6 +35,7 @@ struct nft_handle { ...@@ -35,6 +35,7 @@ struct nft_handle {
struct mnl_nlmsg_batch *batch; struct mnl_nlmsg_batch *batch;
struct nft_family_ops *ops; struct nft_family_ops *ops;
struct builtin_table *tables; struct builtin_table *tables;
struct nftnl_rule_list *rule_cache;
bool restore; bool restore;
bool batch_support; bool batch_support;
}; };
...@@ -92,9 +93,6 @@ int nft_rule_save(struct nft_handle *h, const char *table, bool counters); ...@@ -92,9 +93,6 @@ int nft_rule_save(struct nft_handle *h, const char *table, bool counters);
int nft_rule_flush(struct nft_handle *h, const char *chain, const char *table); int nft_rule_flush(struct nft_handle *h, const char *chain, const char *table);
int nft_rule_zero_counters(struct nft_handle *h, const char *chain, const char *table, int rulenum); int nft_rule_zero_counters(struct nft_handle *h, const char *chain, const char *table, int rulenum);
struct nftnl_rule_list *nft_rule_list_create(struct nft_handle *h);
void nft_rule_list_destroy(struct nftnl_rule_list *list);
/* /*
* Operations used in userspace tools * Operations used in userspace tools
*/ */
...@@ -104,6 +102,8 @@ int add_match(struct nftnl_rule *r, struct xt_entry_match *m); ...@@ -104,6 +102,8 @@ int add_match(struct nftnl_rule *r, struct xt_entry_match *m);
int add_target(struct nftnl_rule *r, struct xt_entry_target *t); int add_target(struct nftnl_rule *r, struct xt_entry_target *t);
int add_jumpto(struct nftnl_rule *r, const char *name, int verdict); int add_jumpto(struct nftnl_rule *r, const char *name, int verdict);
int add_action(struct nftnl_rule *r, struct iptables_command_state *cs, bool goto_set); int add_action(struct nftnl_rule *r, struct iptables_command_state *cs, bool goto_set);
int add_comment(struct nftnl_rule *r, const char *comment);
char *get_comment(const void *data, uint32_t data_len);
enum nft_rule_print { enum nft_rule_print {
NFT_RULE_APPEND, NFT_RULE_APPEND,
...@@ -155,6 +155,18 @@ enum { ...@@ -155,6 +155,18 @@ enum {
int nft_xtables_config_load(struct nft_handle *h, const char *filename, uint32_t flags); int nft_xtables_config_load(struct nft_handle *h, const char *filename, uint32_t flags);
/*
* Translation from iptables to nft
*/
struct xt_buf;
bool xlate_find_match(const struct iptables_command_state *cs, const char *p_name);
int xlate_matches(const struct iptables_command_state *cs, struct xt_xlate *xl);
int xlate_action(const struct iptables_command_state *cs, bool goto_set,
struct xt_xlate *xl);
void xlate_ifname(struct xt_xlate *xl, const char *nftmeta, const char *ifname,
bool invert);
/* /*
* ARP * ARP
*/ */
...@@ -170,4 +182,6 @@ int nft_arp_rule_insert(struct nft_handle *h, const char *chain, ...@@ -170,4 +182,6 @@ int nft_arp_rule_insert(struct nft_handle *h, const char *chain,
void nft_rule_to_arpt_entry(struct nftnl_rule *r, struct arpt_entry *fw); void nft_rule_to_arpt_entry(struct nftnl_rule *r, struct arpt_entry *fw);
int nft_is_ruleset_compatible(struct nft_handle *h);
#endif #endif
...@@ -9,12 +9,15 @@ ...@@ -9,12 +9,15 @@
#include <sys/file.h> #include <sys/file.h>
#include <sys/socket.h> #include <sys/socket.h>
#include <sys/un.h> #include <sys/un.h>
#include <sys/time.h>
#include <unistd.h> #include <unistd.h>
#include <fcntl.h> #include <fcntl.h>
#include <xtables.h> #include <xtables.h>
#include <math.h>
#include "xshared.h" #include "xshared.h"
#define XT_LOCK_NAME "/run/xtables.lock" #define XT_LOCK_NAME "/run/xtables.lock"
#define BASE_MICROSECONDS 100000
/* /*
* Print out any special helps. A user might like to be able to add a --help * Print out any special helps. A user might like to be able to add a --help
...@@ -244,9 +247,15 @@ void xs_init_match(struct xtables_match *match) ...@@ -244,9 +247,15 @@ void xs_init_match(struct xtables_match *match)
match->init(match->m); match->init(match->m);
} }
bool xtables_lock(int wait) bool xtables_lock(int wait, struct timeval *wait_interval)
{ {
int fd, waited = 0, i = 0; struct timeval time_left, wait_time, waited_time;
int fd, i = 0;
time_left.tv_sec = wait;
time_left.tv_usec = 0;
waited_time.tv_sec = 0;
waited_time.tv_usec = 0;
fd = open(XT_LOCK_NAME, O_CREAT, 0600); fd = open(XT_LOCK_NAME, O_CREAT, 0600);
if (fd < 0) if (fd < 0)
...@@ -255,12 +264,43 @@ bool xtables_lock(int wait) ...@@ -255,12 +264,43 @@ bool xtables_lock(int wait)
while (1) { while (1) {
if (flock(fd, LOCK_EX | LOCK_NB) == 0) if (flock(fd, LOCK_EX | LOCK_NB) == 0)
return true; return true;
else if (wait >= 0 && waited >= wait) if (++i % 10 == 0) {
if (wait != -1)
fprintf(stderr, "Another app is currently holding the xtables lock; "
"still %lds %ldus time ahead to have a chance to grab the lock...\n",
time_left.tv_sec, time_left.tv_usec);
else
fprintf(stderr, "Another app is currently holding the xtables lock; "
"waiting for it to exit...\n");
}
wait_time = *wait_interval;
select(0, NULL, NULL, NULL, &wait_time);
if (wait == -1)
continue;
timeradd(&waited_time, wait_interval, &waited_time);
timersub(&time_left, wait_interval, &time_left);
if (!timerisset(&time_left))
return false; return false;
if (++i % 2 == 0)
fprintf(stderr, "Another app is currently holding the xtables lock; "
"waiting (%ds) for it to exit...\n", waited);
waited++;
sleep(1);
} }
} }
void parse_wait_interval(const char *str, struct timeval *wait_interval)
{
unsigned int usec;
int ret;
ret = sscanf(str, "%u", &usec);
if (ret == 1) {
if (usec > 999999)
xtables_error(PARAMETER_PROBLEM,
"too long usec wait %u > 999999 usec",
usec);
wait_interval->tv_sec = 0;
wait_interval->tv_usec = usec;
return;
}
xtables_error(PARAMETER_PROBLEM, "wait interval not numeric");
}
...@@ -63,6 +63,7 @@ struct iptables_command_state { ...@@ -63,6 +63,7 @@ struct iptables_command_state {
int proto_used; int proto_used;
const char *jumpto; const char *jumpto;
char **argv; char **argv;
bool restore;
}; };
typedef int (*mainfunc_t)(int, char **); typedef int (*mainfunc_t)(int, char **);
...@@ -85,7 +86,9 @@ extern struct xtables_match *load_proto(struct iptables_command_state *); ...@@ -85,7 +86,9 @@ extern struct xtables_match *load_proto(struct iptables_command_state *);
extern int subcmd_main(int, char **, const struct subcommand *); extern int subcmd_main(int, char **, const struct subcommand *);
extern void xs_init_target(struct xtables_target *); extern void xs_init_target(struct xtables_target *);
extern void xs_init_match(struct xtables_match *); extern void xs_init_match(struct xtables_match *);
extern bool xtables_lock(int wait); bool xtables_lock(int wait, struct timeval *wait_interval);
void parse_wait_interval(const char *str, struct timeval *wait_interval);
extern const struct xtables_afinfo *afinfo; extern const struct xtables_afinfo *afinfo;
......
...@@ -587,22 +587,30 @@ check_inverse(const char option[], int *invert, int *optidx, int argc) ...@@ -587,22 +587,30 @@ check_inverse(const char option[], int *invert, int *optidx, int argc)
static struct in_addr * static struct in_addr *
host_to_addr(const char *name, unsigned int *naddr) host_to_addr(const char *name, unsigned int *naddr)
{ {
struct hostent *host;
struct in_addr *addr; struct in_addr *addr;
struct addrinfo hints;
struct addrinfo *res, *p;
int err;
unsigned int i; unsigned int i;
*naddr = 0; memset(&hints, 0, sizeof(hints));
if ((host = gethostbyname(name)) != NULL) { hints.ai_flags = AI_CANONNAME;
if (host->h_addrtype != AF_INET || hints.ai_family = AF_INET;
host->h_length != sizeof(struct in_addr)) hints.ai_socktype = SOCK_RAW;
return (struct in_addr *) NULL;
while (host->h_addr_list[*naddr] != (char *) NULL) *naddr = 0;
err = getaddrinfo(name, NULL, &hints, &res);
if (err != 0)
return NULL;
else {
for (p = res; p != NULL; p = p->ai_next)
(*naddr)++; (*naddr)++;
addr = xtables_calloc(*naddr, sizeof(struct in_addr)); addr = xtables_calloc(*naddr, sizeof(struct in_addr));
for (i = 0; i < *naddr; i++) for (i = 0, p = res; p != NULL; p = p->ai_next)
inaddrcpy(&(addr[i]), memcpy(&addr[i++],
(struct in_addr *) host->h_addr_list[i]); &((const struct sockaddr_in *)p->ai_addr)->sin_addr,
sizeof(struct in_addr));
freeaddrinfo(res);
return addr; return addr;
} }
...@@ -727,7 +735,7 @@ parse_interface(const char *arg, char *vianame, unsigned char *mask) ...@@ -727,7 +735,7 @@ parse_interface(const char *arg, char *vianame, unsigned char *mask)
if (!isalnum(vianame[i]) if (!isalnum(vianame[i])
&& vianame[i] != '_' && vianame[i] != '_'
&& vianame[i] != '.') { && vianame[i] != '.') {
printf("Warning: wierd character in interface" printf("Warning: weird character in interface"
" `%s' (No aliases, :, ! or *).\n", " `%s' (No aliases, :, ! or *).\n",
vianame); vianame);
break; break;
......
...@@ -26,6 +26,10 @@ static const struct subcommand multi_subcommands[] = { ...@@ -26,6 +26,10 @@ static const struct subcommand multi_subcommands[] = {
{"ip6tables-restore", xtables_ip6_restore_main}, {"ip6tables-restore", xtables_ip6_restore_main},
{"ip6tables-compat-save", xtables_ip6_save_main}, {"ip6tables-compat-save", xtables_ip6_save_main},
{"ip6tables-compat-restore", xtables_ip6_restore_main}, {"ip6tables-compat-restore", xtables_ip6_restore_main},
{"iptables-translate", xtables_ip4_xlate_main},
{"ip6tables-translate", xtables_ip6_xlate_main},
{"iptables-restore-translate", xtables_ip4_xlate_restore_main},
{"ip6tables-restore-translate", xtables_ip6_xlate_restore_main},
{"arptables", xtables_arp_main}, {"arptables", xtables_arp_main},
{"arptables-compat", xtables_arp_main}, {"arptables-compat", xtables_arp_main},
{"ebtables-compat", xtables_eb_main}, {"ebtables-compat", xtables_eb_main},
......
...@@ -9,6 +9,10 @@ extern int xtables_ip4_restore_main(int, char **); ...@@ -9,6 +9,10 @@ extern int xtables_ip4_restore_main(int, char **);
extern int xtables_ip6_main(int, char **); extern int xtables_ip6_main(int, char **);
extern int xtables_ip6_save_main(int, char **); extern int xtables_ip6_save_main(int, char **);
extern int xtables_ip6_restore_main(int, char **); extern int xtables_ip6_restore_main(int, char **);
extern int xtables_ip4_xlate_main(int, char **);
extern int xtables_ip6_xlate_main(int, char **);
extern int xtables_ip4_xlate_restore_main(int, char **);
extern int xtables_ip6_xlate_restore_main(int, char **);
extern int xtables_arp_main(int, char **); extern int xtables_arp_main(int, char **);
extern int xtables_eb_main(int, char **); extern int xtables_eb_main(int, char **);
extern int xtables_config_main(int, char **); extern int xtables_config_main(int, char **);
......
...@@ -46,14 +46,16 @@ static void print_usage(const char *name, const char *version) __attribute__((no ...@@ -46,14 +46,16 @@ static void print_usage(const char *name, const char *version) __attribute__((no
static void print_usage(const char *name, const char *version) static void print_usage(const char *name, const char *version)
{ {
fprintf(stderr, "Usage: %s [-c] [-v] [-t] [-h]\n" fprintf(stderr, "Usage: %s [-c] [-v] [-t] [-h] [-n] [-T table] [-M command] [-4] [-6]\n"
" [ --counters ]\n" " [ --counters ]\n"
" [ --verbose ]\n" " [ --verbose ]\n"
" [ --test ]\n" " [ --test ]\n"
" [ --help ]\n" " [ --help ]\n"
" [ --noflush ]\n" " [ --noflush ]\n"
" [ --table=<TABLE> ]\n" " [ --table=<TABLE> ]\n"
" [ --modprobe=<command>]\n", name); " [ --modprobe=<command> ]\n"
" [ --ipv4 ]\n"
" [ --ipv6 ]\n", name);
exit(1); exit(1);
} }
...@@ -159,107 +161,64 @@ static void add_param_to_argv(char *parsestart) ...@@ -159,107 +161,64 @@ static void add_param_to_argv(char *parsestart)
} }
} }
static struct nftnl_chain_list *get_chain_list(struct nft_handle *h)
{
struct nftnl_chain_list *chain_list;
chain_list = nft_chain_dump(h);
if (chain_list == NULL)
xtables_error(OTHER_PROBLEM, "cannot retrieve chain list\n");
return chain_list;
}
static void chain_delete(struct nftnl_chain_list *clist, const char *curtable,
const char *chain)
{
struct nftnl_chain *chain_obj;
chain_obj = nft_chain_list_find(clist, curtable, chain);
/* This chain has been found, delete from list. Later
* on, unvisited chains will be purged out.
*/
if (chain_obj != NULL)
nftnl_chain_list_del(chain_obj);
}
struct nft_xt_restore_cb restore_cb = {
.chain_list = get_chain_list,
.commit = nft_commit,
.abort = nft_abort,
.chains_purge = nft_table_purge_chains,
.rule_flush = nft_rule_flush,
.chain_del = chain_delete,
.do_command = do_commandx,
.chain_set = nft_chain_set,
.chain_user_add = nft_chain_user_add,
};
static const struct xtc_ops xtc_ops = { static const struct xtc_ops xtc_ops = {
.strerror = nft_strerror, .strerror = nft_strerror,
}; };
static int void xtables_restore_parse(struct nft_handle *h,
xtables_restore_main(int family, const char *progname, int argc, char *argv[]) struct nft_xt_restore_parse *p,
struct nft_xt_restore_cb *cb,
int argc, char *argv[])
{ {
struct nft_handle h = {
.family = family,
.restore = true,
};
char buffer[10240]; char buffer[10240];
int c; int in_table = 0;
char curtable[XT_TABLE_MAXNAMELEN + 1]; char curtable[XT_TABLE_MAXNAMELEN + 1];
FILE *in;
int in_table = 0, testing = 0;
const char *tablename = NULL;
const struct xtc_ops *ops = &xtc_ops; const struct xtc_ops *ops = &xtc_ops;
struct nftnl_chain_list *chain_list; struct nftnl_chain_list *chain_list = NULL;
struct nftnl_chain *chain_obj;
line = 0; line = 0;
xtables_globals.program_name = progname; if (cb->chain_list)
c = xtables_init_all(&xtables_globals, family); chain_list = cb->chain_list(h);
if (c < 0) {
fprintf(stderr, "%s/%s Failed to initialize xtables\n",
xtables_globals.program_name,
xtables_globals.program_version);
exit(1);
}
#if defined(ALL_INCLUSIVE) || defined(NO_SHARED_LIBS)
init_extensions();
init_extensions4();
#endif
if (nft_init(&h, xtables_ipv4) < 0) {
fprintf(stderr, "%s/%s Failed to initialize nft: %s\n",
xtables_globals.program_name,
xtables_globals.program_version,
strerror(errno));
exit(EXIT_FAILURE);
}
while ((c = getopt_long(argc, argv, "bcvthnM:T:46", options, NULL)) != -1) {
switch (c) {
case 'b':
fprintf(stderr, "-b/--binary option is not implemented\n");
break;
case 'c':
counters = 1;
break;
case 'v':
verbose = 1;
break;
case 't':
testing = 1;
break;
case 'h':
print_usage("xtables-restore",
IPTABLES_VERSION);
break;
case 'n':
noflush = 1;
break;
case 'M':
xtables_modprobe_program = optarg;
break;
case 'T':
tablename = optarg;
break;
case '4':
h.family = AF_INET;
break;
case '6':
h.family = AF_INET6;
xtables_set_nfproto(AF_INET6);
break;
}
}
if (optind == argc - 1) {
in = fopen(argv[optind], "re");
if (!in) {
fprintf(stderr, "Can't open %s: %s\n", argv[optind],
strerror(errno));
exit(1);
}
}
else if (optind < argc) {
fprintf(stderr, "Unknown arguments found on commandline\n");
exit(1);
}
else in = stdin;
chain_list = nft_chain_dump(&h);
if (chain_list == NULL)
xtables_error(OTHER_PROBLEM, "cannot retrieve chain list\n");
/* Grab standard input. */ /* Grab standard input. */
while (fgets(buffer, sizeof(buffer), in)) { while (fgets(buffer, sizeof(buffer), p->in)) {
int ret = 0; int ret = 0;
line++; line++;
...@@ -270,22 +229,24 @@ xtables_restore_main(int family, const char *progname, int argc, char *argv[]) ...@@ -270,22 +229,24 @@ xtables_restore_main(int family, const char *progname, int argc, char *argv[])
fputs(buffer, stdout); fputs(buffer, stdout);
continue; continue;
} else if ((strcmp(buffer, "COMMIT\n") == 0) && (in_table)) { } else if ((strcmp(buffer, "COMMIT\n") == 0) && (in_table)) {
if (!testing) { if (!p->testing) {
/* Commit per table, although we support /* Commit per table, although we support
* global commit at once, stick by now to * global commit at once, stick by now to
* the existing behaviour. * the existing behaviour.
*/ */
DEBUGP("Calling commit\n"); DEBUGP("Calling commit\n");
ret = nft_commit(&h); if (cb->commit)
ret = cb->commit(h);
} else { } else {
DEBUGP("Not calling commit, testing\n"); DEBUGP("Not calling commit, testing\n");
ret = nft_abort(&h); if (cb->abort)
ret = cb->abort(h);
} }
in_table = 0; in_table = 0;
/* Purge out unused chains in this table */ /* Purge out unused chains in this table */
if (!testing) if (!p->testing && cb->chains_purge)
nft_table_purge_chains(&h, curtable, chain_list); cb->chains_purge(h, curtable, chain_list);
} else if ((buffer[0] == '*') && (!in_table)) { } else if ((buffer[0] == '*') && (!in_table)) {
/* New table */ /* New table */
...@@ -302,18 +263,22 @@ xtables_restore_main(int family, const char *progname, int argc, char *argv[]) ...@@ -302,18 +263,22 @@ xtables_restore_main(int family, const char *progname, int argc, char *argv[])
strncpy(curtable, table, XT_TABLE_MAXNAMELEN); strncpy(curtable, table, XT_TABLE_MAXNAMELEN);
curtable[XT_TABLE_MAXNAMELEN] = '\0'; curtable[XT_TABLE_MAXNAMELEN] = '\0';
if (tablename && (strcmp(tablename, table) != 0)) if (p->tablename && (strcmp(p->tablename, table) != 0))
continue; continue;
if (noflush == 0) { if (noflush == 0) {
DEBUGP("Cleaning all chains of table '%s'\n", DEBUGP("Cleaning all chains of table '%s'\n",
table); table);
nft_rule_flush(&h, NULL, table); if (cb->rule_flush)
cb->rule_flush(h, NULL, table);
} }
ret = 1; ret = 1;
in_table = 1; in_table = 1;
if (cb->table_new)
cb->table_new(h, table);
} else if ((buffer[0] == ':') && (in_table)) { } else if ((buffer[0] == ':') && (in_table)) {
/* New chain. */ /* New chain. */
char *policy, *chain = NULL; char *policy, *chain = NULL;
...@@ -328,13 +293,8 @@ xtables_restore_main(int family, const char *progname, int argc, char *argv[]) ...@@ -328,13 +293,8 @@ xtables_restore_main(int family, const char *progname, int argc, char *argv[])
exit(1); exit(1);
} }
chain_obj = nft_chain_list_find(chain_list, if (cb->chain_del)
curtable, chain); cb->chain_del(chain_list, curtable, chain);
/* This chain has been found, delete from list. Later
* on, unvisited chains will be purged out.
*/
if (chain_obj != NULL)
nftnl_chain_list_del(chain_obj);
if (strlen(chain) >= XT_EXTENSION_MAXNAMELEN) if (strlen(chain) >= XT_EXTENSION_MAXNAMELEN)
xtables_error(PARAMETER_PROBLEM, xtables_error(PARAMETER_PROBLEM,
...@@ -362,7 +322,8 @@ xtables_restore_main(int family, const char *progname, int argc, char *argv[]) ...@@ -362,7 +322,8 @@ xtables_restore_main(int family, const char *progname, int argc, char *argv[])
"for chain '%s'\n", chain); "for chain '%s'\n", chain);
} }
if (nft_chain_set(&h, curtable, chain, policy, &count) < 0) { if (cb->chain_set &&
cb->chain_set(h, curtable, chain, policy, &count) < 0) {
xtables_error(OTHER_PROBLEM, xtables_error(OTHER_PROBLEM,
"Can't set policy `%s'" "Can't set policy `%s'"
" on `%s' line %u: %s\n", " on `%s' line %u: %s\n",
...@@ -374,7 +335,8 @@ xtables_restore_main(int family, const char *progname, int argc, char *argv[]) ...@@ -374,7 +335,8 @@ xtables_restore_main(int family, const char *progname, int argc, char *argv[])
ret = 1; ret = 1;
} else { } else {
if (nft_chain_user_add(&h, chain, curtable) < 0) { if (cb->chain_user_add &&
cb->chain_user_add(h, chain, curtable) < 0) {
if (errno == EEXIST) if (errno == EEXIST)
continue; continue;
...@@ -441,10 +403,14 @@ xtables_restore_main(int family, const char *progname, int argc, char *argv[]) ...@@ -441,10 +403,14 @@ xtables_restore_main(int family, const char *progname, int argc, char *argv[])
for (a = 0; a < newargc; a++) for (a = 0; a < newargc; a++)
DEBUGP("argv[%u]: %s\n", a, newargv[a]); DEBUGP("argv[%u]: %s\n", a, newargv[a]);
ret = do_commandx(&h, newargc, newargv, ret = cb->do_command(h, newargc, newargv,
&newargv[2], true); &newargv[2], true);
if (ret < 0) { if (ret < 0) {
ret = nft_abort(&h); if (cb->abort)
ret = cb->abort(h);
else
ret = 0;
if (ret < 0) { if (ret < 0) {
fprintf(stderr, "failed to abort " fprintf(stderr, "failed to abort "
"commit operation\n"); "commit operation\n");
...@@ -455,7 +421,7 @@ xtables_restore_main(int family, const char *progname, int argc, char *argv[]) ...@@ -455,7 +421,7 @@ xtables_restore_main(int family, const char *progname, int argc, char *argv[])
free_argv(); free_argv();
fflush(stdout); fflush(stdout);
} }
if (tablename && (strcmp(tablename, curtable) != 0)) if (p->tablename && (strcmp(p->tablename, curtable) != 0))
continue; continue;
if (!ret) { if (!ret) {
fprintf(stderr, "%s: line %u failed\n", fprintf(stderr, "%s: line %u failed\n",
...@@ -468,8 +434,95 @@ xtables_restore_main(int family, const char *progname, int argc, char *argv[]) ...@@ -468,8 +434,95 @@ xtables_restore_main(int family, const char *progname, int argc, char *argv[])
xt_params->program_name, line + 1); xt_params->program_name, line + 1);
exit(1); exit(1);
} }
}
static int
xtables_restore_main(int family, const char *progname, int argc, char *argv[])
{
struct nft_handle h = {
.family = family,
.restore = true,
};
int c;
struct nft_xt_restore_parse p = {};
line = 0;
xtables_globals.program_name = progname;
c = xtables_init_all(&xtables_globals, family);
if (c < 0) {
fprintf(stderr, "%s/%s Failed to initialize xtables\n",
xtables_globals.program_name,
xtables_globals.program_version);
exit(1);
}
#if defined(ALL_INCLUSIVE) || defined(NO_SHARED_LIBS)
init_extensions();
init_extensions4();
#endif
if (nft_init(&h, xtables_ipv4) < 0) {
fprintf(stderr, "%s/%s Failed to initialize nft: %s\n",
xtables_globals.program_name,
xtables_globals.program_version,
strerror(errno));
exit(EXIT_FAILURE);
}
while ((c = getopt_long(argc, argv, "bcvthnM:T:46", options, NULL)) != -1) {
switch (c) {
case 'b':
fprintf(stderr, "-b/--binary option is not implemented\n");
break;
case 'c':
counters = 1;
break;
case 'v':
verbose = 1;
break;
case 't':
p.testing = 1;
break;
case 'h':
print_usage("xtables-restore",
IPTABLES_VERSION);
break;
case 'n':
noflush = 1;
break;
case 'M':
xtables_modprobe_program = optarg;
break;
case 'T':
p.tablename = optarg;
break;
case '4':
h.family = AF_INET;
break;
case '6':
h.family = AF_INET6;
xtables_set_nfproto(AF_INET6);
break;
}
}
if (optind == argc - 1) {
p.in = fopen(argv[optind], "re");
if (!p.in) {
fprintf(stderr, "Can't open %s: %s\n", argv[optind],
strerror(errno));
exit(1);
}
} else if (optind < argc) {
fprintf(stderr, "Unknown arguments found on commandline\n");
exit(1);
} else {
p.in = stdin;
}
xtables_restore_parse(&h, &p, &restore_cb, argc, argv);
fclose(in); fclose(p.in);
return 0; return 0;
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment