menu "Core Netfilter Configuration"
	depends on NET && INET && NETFILTER

config NETFILTER_NETLINK
	tristate

config NETFILTER_NETLINK_ACCT
tristate "Netfilter NFACCT over NFNETLINK interface"
	depends on NETFILTER_ADVANCED
	select NETFILTER_NETLINK
	help
	  If this option is enabled, the kernel will include support
	  for extended accounting via NFNETLINK.

config NETFILTER_NETLINK_QUEUE
	tristate "Netfilter NFQUEUE over NFNETLINK interface"
	depends on NETFILTER_ADVANCED
	select NETFILTER_NETLINK
	help
	  If this option is enabled, the kernel will include support
	  for queueing packets via NFNETLINK.
	  
config NETFILTER_NETLINK_LOG
	tristate "Netfilter LOG over NFNETLINK interface"
	default m if NETFILTER_ADVANCED=n
	select NETFILTER_NETLINK
	help
	  If this option is enabled, the kernel will include support
	  for logging packets via NFNETLINK.

	  This obsoletes the existing ipt_ULOG and ebg_ulog mechanisms,
	  and is also scheduled to replace the old syslog-based ipt_LOG
	  and ip6t_LOG modules.

config NF_CONNTRACK
	tristate "Netfilter connection tracking support"
	default m if NETFILTER_ADVANCED=n
	help
	  Connection tracking keeps a record of what packets have passed
	  through your machine, in order to figure out how they are related
	  into connections.

	  This is required to do Masquerading or other kinds of Network
	  Address Translation.  It can also be used to enhance packet
	  filtering (see `Connection state match support' below).

	  To compile it as a module, choose M here.  If unsure, say N.

config NF_LOG_COMMON
	tristate

if NF_CONNTRACK

config NF_CONNTRACK_MARK
	bool  'Connection mark tracking support'
	depends on NETFILTER_ADVANCED
	help
	  This option enables support for connection marks, used by the
	  `CONNMARK' target and `connmark' match. Similar to the mark value
	  of packets, but this mark value is kept in the conntrack session
	  instead of the individual packets.

config NF_CONNTRACK_SECMARK
	bool  'Connection tracking security mark support'
	depends on NETWORK_SECMARK
	default m if NETFILTER_ADVANCED=n
	help
	  This option enables security markings to be applied to
	  connections.  Typically they are copied to connections from
	  packets using the CONNSECMARK target and copied back from
	  connections to packets with the same target, with the packets
	  being originally labeled via SECMARK.

	  If unsure, say 'N'.

config NF_CONNTRACK_ZONES
	bool  'Connection tracking zones'
	depends on NETFILTER_ADVANCED
	depends on NETFILTER_XT_TARGET_CT
	help
	  This option enables support for connection tracking zones.
	  Normally, each connection needs to have a unique system wide
	  identity. Connection tracking zones allow to have multiple
	  connections using the same identity, as long as they are
	  contained in different zones.

	  If unsure, say `N'.

config NF_CONNTRACK_PROCFS
	bool "Supply CT list in procfs (OBSOLETE)"
	default y
	depends on PROC_FS
	---help---
	This option enables for the list of known conntrack entries
	to be shown in procfs under net/netfilter/nf_conntrack. This
	is considered obsolete in favor of using the conntrack(8)
	tool which uses Netlink.

config NF_CONNTRACK_EVENTS
	bool "Connection tracking events"
	depends on NETFILTER_ADVANCED
	help
	  If this option is enabled, the connection tracking code will
	  provide a notifier chain that can be used by other kernel code
	  to get notified about changes in the connection tracking state.

	  If unsure, say `N'.

config NF_CONNTRACK_TIMEOUT
	bool  'Connection tracking timeout'
	depends on NETFILTER_ADVANCED
	help
	  This option enables support for connection tracking timeout
	  extension. This allows you to attach timeout policies to flow
	  via the CT target.

	  If unsure, say `N'.

config NF_CONNTRACK_TIMESTAMP
	bool  'Connection tracking timestamping'
	depends on NETFILTER_ADVANCED
	help
	  This option enables support for connection tracking timestamping.
	  This allows you to store the flow start-time and to obtain
	  the flow-stop time (once it has been destroyed) via Connection
	  tracking events.

	  If unsure, say `N'.

config NF_CONNTRACK_LABELS
	bool
	help
	  This option enables support for assigning user-defined flag bits
	  to connection tracking entries.  It selected by the connlabel match.

config NF_CT_PROTO_DCCP
	tristate 'DCCP protocol connection tracking support'
	depends on NETFILTER_ADVANCED
	default IP_DCCP
	help
	  With this option enabled, the layer 3 independent connection
	  tracking code will be able to do state tracking on DCCP connections.

	  If unsure, say 'N'.

config NF_CT_PROTO_GRE
	tristate

config NF_CT_PROTO_SCTP
	tristate 'SCTP protocol connection tracking support'
	depends on NETFILTER_ADVANCED
	default IP_SCTP
	help
	  With this option enabled, the layer 3 independent connection
	  tracking code will be able to do state tracking on SCTP connections.

	  If you want to compile it as a module, say M here and read
	  <file:Documentation/kbuild/modules.txt>.  If unsure, say `N'.

config NF_CT_PROTO_UDPLITE
	tristate 'UDP-Lite protocol connection tracking support'
	depends on NETFILTER_ADVANCED
	help
	  With this option enabled, the layer 3 independent connection
	  tracking code will be able to do state tracking on UDP-Lite
	  connections.

	  To compile it as a module, choose M here.  If unsure, say N.

config NF_CONNTRACK_AMANDA
	tristate "Amanda backup protocol support"
	depends on NETFILTER_ADVANCED
	select TEXTSEARCH
	select TEXTSEARCH_KMP
	help
	  If you are running the Amanda backup package <http://www.amanda.org/>
	  on this machine or machines that will be MASQUERADED through this
	  machine, then you may want to enable this feature.  This allows the
	  connection tracking and natting code to allow the sub-channels that
	  Amanda requires for communication of the backup data, messages and
	  index.

	  To compile it as a module, choose M here.  If unsure, say N.

config NF_CONNTRACK_FTP
	tristate "FTP protocol support"
	default m if NETFILTER_ADVANCED=n
	help
	  Tracking FTP connections is problematic: special helpers are
	  required for tracking them, and doing masquerading and other forms
	  of Network Address Translation on them.

	  This is FTP support on Layer 3 independent connection tracking.
	  Layer 3 independent connection tracking is experimental scheme
	  which generalize ip_conntrack to support other layer 3 protocols.

	  To compile it as a module, choose M here.  If unsure, say N.

config NF_CONNTRACK_H323
	tristate "H.323 protocol support"
	depends on (IPV6 || IPV6=n)
	depends on NETFILTER_ADVANCED
	help
	  H.323 is a VoIP signalling protocol from ITU-T. As one of the most
	  important VoIP protocols, it is widely used by voice hardware and
	  software including voice gateways, IP phones, Netmeeting, OpenPhone,
	  Gnomemeeting, etc.

	  With this module you can support H.323 on a connection tracking/NAT
	  firewall.

	  This module supports RAS, Fast Start, H.245 Tunnelling, Call
	  Forwarding, RTP/RTCP and T.120 based audio, video, fax, chat,
	  whiteboard, file transfer, etc. For more information, please
	  visit http://nath323.sourceforge.net/.

	  To compile it as a module, choose M here.  If unsure, say N.

config NF_CONNTRACK_IRC
	tristate "IRC protocol support"
	default m if NETFILTER_ADVANCED=n
	help
	  There is a commonly-used extension to IRC called
	  Direct Client-to-Client Protocol (DCC).  This enables users to send
	  files to each other, and also chat to each other without the need
	  of a server.  DCC Sending is used anywhere you send files over IRC,
	  and DCC Chat is most commonly used by Eggdrop bots.  If you are
	  using NAT, this extension will enable you to send files and initiate
	  chats.  Note that you do NOT need this extension to get files or
	  have others initiate chats, or everything else in IRC.

	  To compile it as a module, choose M here.  If unsure, say N.

config NF_CONNTRACK_BROADCAST
	tristate

config NF_CONNTRACK_NETBIOS_NS
	tristate "NetBIOS name service protocol support"
	select NF_CONNTRACK_BROADCAST
	help
	  NetBIOS name service requests are sent as broadcast messages from an
	  unprivileged port and responded to with unicast messages to the
	  same port. This make them hard to firewall properly because connection
	  tracking doesn't deal with broadcasts. This helper tracks locally
	  originating NetBIOS name service requests and the corresponding
	  responses. It relies on correct IP address configuration, specifically
	  netmask and broadcast address. When properly configured, the output
	  of "ip address show" should look similar to this:

	  $ ip -4 address show eth0
	  4: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
	      inet 172.16.2.252/24 brd 172.16.2.255 scope global eth0

	  To compile it as a module, choose M here.  If unsure, say N.

config NF_CONNTRACK_SNMP
	tristate "SNMP service protocol support"
	depends on NETFILTER_ADVANCED
	select NF_CONNTRACK_BROADCAST
	help
	  SNMP service requests are sent as broadcast messages from an
	  unprivileged port and responded to with unicast messages to the
	  same port. This make them hard to firewall properly because connection
	  tracking doesn't deal with broadcasts. This helper tracks locally
	  originating SNMP service requests and the corresponding
	  responses. It relies on correct IP address configuration, specifically
	  netmask and broadcast address.

	  To compile it as a module, choose M here.  If unsure, say N.

config NF_CONNTRACK_PPTP
	tristate "PPtP protocol support"
	depends on NETFILTER_ADVANCED
	select NF_CT_PROTO_GRE
	help
	  This module adds support for PPTP (Point to Point Tunnelling
	  Protocol, RFC2637) connection tracking and NAT.

	  If you are running PPTP sessions over a stateful firewall or NAT
	  box, you may want to enable this feature.

	  Please note that not all PPTP modes of operation are supported yet.
	  Specifically these limitations exist:
	    - Blindly assumes that control connections are always established
	      in PNS->PAC direction. This is a violation of RFC2637.
	    - Only supports a single call within each session

	  To compile it as a module, choose M here.  If unsure, say N.

config NF_CONNTRACK_SANE
	tristate "SANE protocol support"
	depends on NETFILTER_ADVANCED
	help
	  SANE is a protocol for remote access to scanners as implemented
	  by the 'saned' daemon. Like FTP, it uses separate control and
	  data connections.

	  With this module you can support SANE on a connection tracking
	  firewall.

	  To compile it as a module, choose M here.  If unsure, say N.

config NF_CONNTRACK_SIP
	tristate "SIP protocol support"
	default m if NETFILTER_ADVANCED=n
	help
	  SIP is an application-layer control protocol that can establish,
	  modify, and terminate multimedia sessions (conferences) such as
	  Internet telephony calls. With the ip_conntrack_sip and
	  the nf_nat_sip modules you can support the protocol on a connection
	  tracking/NATing firewall.

	  To compile it as a module, choose M here.  If unsure, say N.

config NF_CONNTRACK_TFTP
	tristate "TFTP protocol support"
	depends on NETFILTER_ADVANCED
	help
	  TFTP connection tracking helper, this is required depending
	  on how restrictive your ruleset is.
	  If you are using a tftp client behind -j SNAT or -j MASQUERADING
	  you will need this.

	  To compile it as a module, choose M here.  If unsure, say N.

config NF_CT_NETLINK
	tristate 'Connection tracking netlink interface'
	select NETFILTER_NETLINK
	default m if NETFILTER_ADVANCED=n
	help
	  This option enables support for a netlink-based userspace interface

config NF_CT_NETLINK_TIMEOUT
	tristate  'Connection tracking timeout tuning via Netlink'
	select NETFILTER_NETLINK
	depends on NETFILTER_ADVANCED
	help
	  This option enables support for connection tracking timeout
	  fine-grain tuning. This allows you to attach specific timeout
	  policies to flows, instead of using the global timeout policy.

	  If unsure, say `N'.

config NF_CT_NETLINK_HELPER
	tristate 'Connection tracking helpers in user-space via Netlink'
	select NETFILTER_NETLINK
	depends on NF_CT_NETLINK
	depends on NETFILTER_NETLINK_QUEUE
	depends on NETFILTER_NETLINK_QUEUE_CT
	depends on NETFILTER_ADVANCED
	help
	  This option enables the user-space connection tracking helpers
	  infrastructure.

	  If unsure, say `N'.

config NETFILTER_NETLINK_QUEUE_CT
        bool "NFQUEUE integration with Connection Tracking"
        default n
        depends on NETFILTER_NETLINK_QUEUE
	help
	  If this option is enabled, NFQUEUE can include Connection Tracking
	  information together with the packet is the enqueued via NFNETLINK.

config NF_NAT
	tristate

config NF_NAT_NEEDED
	bool
	depends on NF_NAT
	default y

config NF_NAT_PROTO_DCCP
	tristate
	depends on NF_NAT && NF_CT_PROTO_DCCP
	default NF_NAT && NF_CT_PROTO_DCCP

config NF_NAT_PROTO_UDPLITE
	tristate
	depends on NF_NAT && NF_CT_PROTO_UDPLITE
	default NF_NAT && NF_CT_PROTO_UDPLITE

config NF_NAT_PROTO_SCTP
	tristate
	default NF_NAT && NF_CT_PROTO_SCTP
	depends on NF_NAT && NF_CT_PROTO_SCTP
	select LIBCRC32C

config NF_NAT_AMANDA
	tristate
	depends on NF_CONNTRACK && NF_NAT
	default NF_NAT && NF_CONNTRACK_AMANDA

config NF_NAT_FTP
	tristate
	depends on NF_CONNTRACK && NF_NAT
	default NF_NAT && NF_CONNTRACK_FTP

config NF_NAT_IRC
	tristate
	depends on NF_CONNTRACK && NF_NAT
	default NF_NAT && NF_CONNTRACK_IRC

config NF_NAT_SIP
	tristate
	depends on NF_CONNTRACK && NF_NAT
	default NF_NAT && NF_CONNTRACK_SIP

config NF_NAT_TFTP
	tristate
	depends on NF_CONNTRACK && NF_NAT
	default NF_NAT && NF_CONNTRACK_TFTP

config NF_NAT_REDIRECT
        tristate "IPv4/IPv6 redirect support"
	depends on NF_NAT
        help
          This is the kernel functionality to redirect packets to local
          machine through NAT.

config NETFILTER_SYNPROXY
	tristate

endif # NF_CONNTRACK

config NF_TABLES
	select NETFILTER_NETLINK
	tristate "Netfilter nf_tables support"
	help
	  nftables is the new packet classification framework that intends to
	  replace the existing {ip,ip6,arp,eb}_tables infrastructure. It
	  provides a pseudo-state machine with an extensible instruction-set
	  (also known as expressions) that the userspace 'nft' utility
	  (http://www.netfilter.org/projects/nftables) uses to build the
	  rule-set. It also comes with the generic set infrastructure that
	  allows you to construct mappings between matchings and actions
	  for performance lookups.

	  To compile it as a module, choose M here.

if NF_TABLES

config NF_TABLES_INET
	depends on IPV6
	select NF_TABLES_IPV4
	select NF_TABLES_IPV6
	tristate "Netfilter nf_tables mixed IPv4/IPv6 tables support"
	help
	  This option enables support for a mixed IPv4/IPv6 "inet" table.

config NFT_EXTHDR
	tristate "Netfilter nf_tables IPv6 exthdr module"
	help
	  This option adds the "exthdr" expression that you can use to match
	  IPv6 extension headers.

config NFT_META
	tristate "Netfilter nf_tables meta module"
	help
	  This option adds the "meta" expression that you can use to match and
	  to set packet metainformation such as the packet mark.

config NFT_CT
	depends on NF_CONNTRACK
	tristate "Netfilter nf_tables conntrack module"
	help
	  This option adds the "meta" expression that you can use to match
	  connection tracking information such as the flow state.

config NFT_RBTREE
	tristate "Netfilter nf_tables rbtree set module"
	help
	  This option adds the "rbtree" set type (Red Black tree) that is used
	  to build interval-based sets.

config NFT_HASH
	tristate "Netfilter nf_tables hash set module"
	help
	  This option adds the "hash" set type that is used to build one-way
	  mappings between matchings and actions.

config NFT_COUNTER
	tristate "Netfilter nf_tables counter module"
	help
	  This option adds the "counter" expression that you can use to
	  include packet and byte counters in a rule.

config NFT_LOG
	tristate "Netfilter nf_tables log module"
	help
	  This option adds the "log" expression that you can use to log
	  packets matching some criteria.

config NFT_LIMIT
	tristate "Netfilter nf_tables limit module"
	help
	  This option adds the "limit" expression that you can use to
	  ratelimit rule matchings.

config NFT_MASQ
	depends on NF_CONNTRACK
	depends on NF_NAT
	tristate "Netfilter nf_tables masquerade support"
	help
	  This option adds the "masquerade" expression that you can use
	  to perform NAT in the masquerade flavour.

config NFT_REDIR
	depends on NF_CONNTRACK
	depends on NF_NAT
	tristate "Netfilter nf_tables redirect support"
	help
	  This options adds the "redirect" expression that you can use
	  to perform NAT in the redirect flavour.

config NFT_NAT
	depends on NF_CONNTRACK
	select NF_NAT
	tristate "Netfilter nf_tables nat module"
	help
	  This option adds the "nat" expression that you can use to perform
	  typical Network Address Translation (NAT) packet transformations.

config NFT_QUEUE
	depends on NETFILTER_NETLINK_QUEUE
	tristate "Netfilter nf_tables queue module"
	help
	  This is required if you intend to use the userspace queueing
	  infrastructure (also known as NFQUEUE) from nftables.

config NFT_REJECT
	default m if NETFILTER_ADVANCED=n
	tristate "Netfilter nf_tables reject support"
	help
	  This option adds the "reject" expression that you can use to
	  explicitly deny and notify via TCP reset/ICMP informational errors
	  unallowed traffic.

config NFT_REJECT_INET
	depends on NF_TABLES_INET
	default NFT_REJECT
	tristate

config NFT_COMPAT
	depends on NETFILTER_XTABLES
	tristate "Netfilter x_tables over nf_tables module"
	help
	  This is required if you intend to use any of existing
	  x_tables match/target extensions over the nf_tables
	  framework.

endif # NF_TABLES

config NETFILTER_XTABLES
	tristate "Netfilter Xtables support (required for ip_tables)"
	default m if NETFILTER_ADVANCED=n
	help
	  This is required if you intend to use any of ip_tables,
	  ip6_tables or arp_tables.

if NETFILTER_XTABLES

comment "Xtables combined modules"

config NETFILTER_XT_MARK
	tristate 'nfmark target and match support'
	default m if NETFILTER_ADVANCED=n
	---help---
	This option adds the "MARK" target and "mark" match.

	Netfilter mark matching allows you to match packets based on the
	"nfmark" value in the packet.
	The target allows you to create rules in the "mangle" table which alter
	the netfilter mark (nfmark) field associated with the packet.

	Prior to routing, the nfmark can influence the routing method (see
	"Use netfilter MARK value as routing key") and can also be used by
	other subsystems to change their behavior.

config NETFILTER_XT_CONNMARK
	tristate 'ctmark target and match support'
	depends on NF_CONNTRACK
	depends on NETFILTER_ADVANCED
	select NF_CONNTRACK_MARK
	---help---
	This option adds the "CONNMARK" target and "connmark" match.

	Netfilter allows you to store a mark value per connection (a.k.a.
	ctmark), similarly to the packet mark (nfmark). Using this
	target and match, you can set and match on this mark.

config NETFILTER_XT_SET
	tristate 'set target and match support'
	depends on IP_SET
	depends on NETFILTER_ADVANCED
	help
	  This option adds the "SET" target and "set" match.

	  Using this target and match, you can add/delete and match
	  elements in the sets created by ipset(8).

	  To compile it as a module, choose M here.  If unsure, say N.

# alphabetically ordered list of targets

comment "Xtables targets"

config NETFILTER_XT_TARGET_AUDIT
	tristate "AUDIT target support"
	depends on AUDIT
	depends on NETFILTER_ADVANCED
	---help---
	  This option adds a 'AUDIT' target, which can be used to create
	  audit records for packets dropped/accepted.

	  To compileit as a module, choose M here. If unsure, say N.

config NETFILTER_XT_TARGET_CHECKSUM
	tristate "CHECKSUM target support"
	depends on IP_NF_MANGLE || IP6_NF_MANGLE
	depends on NETFILTER_ADVANCED
	---help---
	  This option adds a `CHECKSUM' target, which can be used in the iptables mangle
	  table.

	  You can use this target to compute and fill in the checksum in
	  a packet that lacks a checksum.  This is particularly useful,
	  if you need to work around old applications such as dhcp clients,
	  that do not work well with checksum offloads, but don't want to disable
	  checksum offload in your device.

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_TARGET_CLASSIFY
	tristate '"CLASSIFY" target support'
	depends on NETFILTER_ADVANCED
	help
	  This option adds a `CLASSIFY' target, which enables the user to set
	  the priority of a packet. Some qdiscs can use this value for
	  classification, among these are:

  	  atm, cbq, dsmark, pfifo_fast, htb, prio

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_TARGET_CONNMARK
	tristate  '"CONNMARK" target support'
	depends on NF_CONNTRACK
	depends on NETFILTER_ADVANCED
	select NETFILTER_XT_CONNMARK
	---help---
	This is a backwards-compat option for the user's convenience
	(e.g. when running oldconfig). It selects
	CONFIG_NETFILTER_XT_CONNMARK (combined connmark/CONNMARK module).

config NETFILTER_XT_TARGET_CONNSECMARK
	tristate '"CONNSECMARK" target support'
	depends on NF_CONNTRACK && NF_CONNTRACK_SECMARK
	default m if NETFILTER_ADVANCED=n
	help
	  The CONNSECMARK target copies security markings from packets
	  to connections, and restores security markings from connections
	  to packets (if the packets are not already marked).  This would
	  normally be used in conjunction with the SECMARK target.

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_TARGET_CT
	tristate '"CT" target support'
	depends on NF_CONNTRACK
	depends on IP_NF_RAW || IP6_NF_RAW
	depends on NETFILTER_ADVANCED
	help
	  This options adds a `CT' target, which allows to specify initial
	  connection tracking parameters like events to be delivered and
	  the helper to be used.

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_TARGET_DSCP
	tristate '"DSCP" and "TOS" target support'
	depends on IP_NF_MANGLE || IP6_NF_MANGLE
	depends on NETFILTER_ADVANCED
	help
	  This option adds a `DSCP' target, which allows you to manipulate
	  the IPv4/IPv6 header DSCP field (differentiated services codepoint).

	  The DSCP field can have any value between 0x0 and 0x3f inclusive.

	  It also adds the "TOS" target, which allows you to create rules in
	  the "mangle" table which alter the Type Of Service field of an IPv4
	  or the Priority field of an IPv6 packet, prior to routing.

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_TARGET_HL
	tristate '"HL" hoplimit target support'
	depends on IP_NF_MANGLE || IP6_NF_MANGLE
	depends on NETFILTER_ADVANCED
	---help---
	This option adds the "HL" (for IPv6) and "TTL" (for IPv4)
	targets, which enable the user to change the
	hoplimit/time-to-live value of the IP header.

	While it is safe to decrement the hoplimit/TTL value, the
	modules also allow to increment and set the hoplimit value of
	the header to arbitrary values. This is EXTREMELY DANGEROUS
	since you can easily create immortal packets that loop
	forever on the network.

config NETFILTER_XT_TARGET_HMARK
	tristate '"HMARK" target support'
	depends on (IP6_NF_IPTABLES || IP6_NF_IPTABLES=n)
	depends on NETFILTER_ADVANCED
	---help---
	This option adds the "HMARK" target.

	The target allows you to create rules in the "raw" and "mangle" tables
	which set the skbuff mark by means of hash calculation within a given
	range. The nfmark can influence the routing method (see "Use netfilter
	MARK value as routing key") and can also be used by other subsystems to
	change their behaviour.

	To compile it as a module, choose M here. If unsure, say N.

config NETFILTER_XT_TARGET_IDLETIMER
	tristate  "IDLETIMER target support"
	depends on NETFILTER_ADVANCED
	help

	  This option adds the `IDLETIMER' target.  Each matching packet
	  resets the timer associated with label specified when the rule is
	  added.  When the timer expires, it triggers a sysfs notification.
	  The remaining time for expiration can be read via sysfs.

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_TARGET_LED
	tristate '"LED" target support'
	depends on LEDS_CLASS && LEDS_TRIGGERS
	depends on NETFILTER_ADVANCED
	help
	  This option adds a `LED' target, which allows you to blink LEDs in
	  response to particular packets passing through your machine.

	  This can be used to turn a spare LED into a network activity LED,
	  which only flashes in response to FTP transfers, for example.  Or
	  you could have an LED which lights up for a minute or two every time
	  somebody connects to your machine via SSH.

	  You will need support for the "led" class to make this work.

	  To create an LED trigger for incoming SSH traffic:
	    iptables -A INPUT -p tcp --dport 22 -j LED --led-trigger-id ssh --led-delay 1000

	  Then attach the new trigger to an LED on your system:
	    echo netfilter-ssh > /sys/class/leds/<ledname>/trigger

	  For more information on the LEDs available on your system, see
	  Documentation/leds/leds-class.txt

config NETFILTER_XT_TARGET_LOG
	tristate "LOG target support"
	select NF_LOG_COMMON
	select NF_LOG_IPV4
	select NF_LOG_IPV6 if IPV6
	default m if NETFILTER_ADVANCED=n
	help
	  This option adds a `LOG' target, which allows you to create rules in
	  any iptables table which records the packet header to the syslog.

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_TARGET_MARK
	tristate '"MARK" target support'
	depends on NETFILTER_ADVANCED
	select NETFILTER_XT_MARK
	---help---
	This is a backwards-compat option for the user's convenience
	(e.g. when running oldconfig). It selects
	CONFIG_NETFILTER_XT_MARK (combined mark/MARK module).

config NETFILTER_XT_NAT
	tristate '"SNAT and DNAT" targets support'
	depends on NF_NAT
	---help---
	This option enables the SNAT and DNAT targets.

	To compile it as a module, choose M here. If unsure, say N.

config NETFILTER_XT_TARGET_NETMAP
	tristate '"NETMAP" target support'
	depends on NF_NAT
	---help---
	NETMAP is an implementation of static 1:1 NAT mapping of network
	addresses. It maps the network address part, while keeping the host
	address part intact.

	To compile it as a module, choose M here. If unsure, say N.

config NETFILTER_XT_TARGET_NFLOG
	tristate '"NFLOG" target support'
	default m if NETFILTER_ADVANCED=n
	select NETFILTER_NETLINK_LOG
	help
	  This option enables the NFLOG target, which allows to LOG
	  messages through nfnetlink_log.

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_TARGET_NFQUEUE
	tristate '"NFQUEUE" target Support'
	depends on NETFILTER_ADVANCED
	select NETFILTER_NETLINK_QUEUE
	help
	  This target replaced the old obsolete QUEUE target.

	  As opposed to QUEUE, it supports 65535 different queues,
	  not just one.

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_TARGET_NOTRACK
	tristate  '"NOTRACK" target support (DEPRECATED)'
	depends on NF_CONNTRACK
	depends on IP_NF_RAW || IP6_NF_RAW
	depends on NETFILTER_ADVANCED
	select NETFILTER_XT_TARGET_CT

config NETFILTER_XT_TARGET_RATEEST
	tristate '"RATEEST" target support'
	depends on NETFILTER_ADVANCED
	help
	  This option adds a `RATEEST' target, which allows to measure
	  rates similar to TC estimators. The `rateest' match can be
	  used to match on the measured rates.

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_TARGET_REDIRECT
	tristate "REDIRECT target support"
	depends on NF_NAT
	select NF_NAT_REDIRECT
	---help---
	REDIRECT is a special case of NAT: all incoming connections are
	mapped onto the incoming interface's address, causing the packets to
	come to the local machine instead of passing through. This is
	useful for transparent proxies.

	To compile it as a module, choose M here. If unsure, say N.

config NETFILTER_XT_TARGET_TEE
	tristate '"TEE" - packet cloning to alternate destination'
	depends on NETFILTER_ADVANCED
	depends on (IPV6 || IPV6=n)
	depends on !NF_CONNTRACK || NF_CONNTRACK
	---help---
	This option adds a "TEE" target with which a packet can be cloned and
	this clone be rerouted to another nexthop.

config NETFILTER_XT_TARGET_TPROXY
	tristate '"TPROXY" target transparent proxying support'
	depends on NETFILTER_XTABLES
	depends on NETFILTER_ADVANCED
	depends on (IPV6 || IPV6=n)
	depends on (IP6_NF_IPTABLES || IP6_NF_IPTABLES=n)
	depends on IP_NF_MANGLE
	select NF_DEFRAG_IPV4
	select NF_DEFRAG_IPV6 if IP6_NF_IPTABLES
	help
	  This option adds a `TPROXY' target, which is somewhat similar to
	  REDIRECT.  It can only be used in the mangle table and is useful
	  to redirect traffic to a transparent proxy.  It does _not_ depend
	  on Netfilter connection tracking and NAT, unlike REDIRECT.
	  For it to work you will have to configure certain iptables rules
	  and use policy routing. For more information on how to set it up
	  see Documentation/networking/tproxy.txt.

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_TARGET_TRACE
	tristate  '"TRACE" target support'
	depends on IP_NF_RAW || IP6_NF_RAW
	depends on NETFILTER_ADVANCED
	help
	  The TRACE target allows you to mark packets so that the kernel
	  will log every rule which match the packets as those traverse
	  the tables, chains, rules.

	  If you want to compile it as a module, say M here and read
	  <file:Documentation/kbuild/modules.txt>.  If unsure, say `N'.

config NETFILTER_XT_TARGET_SECMARK
	tristate '"SECMARK" target support'
	depends on NETWORK_SECMARK
	default m if NETFILTER_ADVANCED=n
	help
	  The SECMARK target allows security marking of network
	  packets, for use with security subsystems.

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_TARGET_TCPMSS
	tristate '"TCPMSS" target support'
	depends on (IPV6 || IPV6=n)
	default m if NETFILTER_ADVANCED=n
	---help---
	  This option adds a `TCPMSS' target, which allows you to alter the
	  MSS value of TCP SYN packets, to control the maximum size for that
	  connection (usually limiting it to your outgoing interface's MTU
	  minus 40).

	  This is used to overcome criminally braindead ISPs or servers which
	  block ICMP Fragmentation Needed packets.  The symptoms of this
	  problem are that everything works fine from your Linux
	  firewall/router, but machines behind it can never exchange large
	  packets:
	        1) Web browsers connect, then hang with no data received.
	        2) Small mail works fine, but large emails hang.
	        3) ssh works fine, but scp hangs after initial handshaking.

	  Workaround: activate this option and add a rule to your firewall
	  configuration like:

	  iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN \
	                 -j TCPMSS --clamp-mss-to-pmtu

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_TARGET_TCPOPTSTRIP
	tristate '"TCPOPTSTRIP" target support'
	depends on IP_NF_MANGLE || IP6_NF_MANGLE
	depends on NETFILTER_ADVANCED
	help
	  This option adds a "TCPOPTSTRIP" target, which allows you to strip
	  TCP options from TCP packets.

# alphabetically ordered list of matches

comment "Xtables matches"

config NETFILTER_XT_MATCH_ADDRTYPE
	tristate '"addrtype" address type match support'
	default m if NETFILTER_ADVANCED=n
	---help---
	  This option allows you to match what routing thinks of an address,
	  eg. UNICAST, LOCAL, BROADCAST, ...

	  If you want to compile it as a module, say M here and read
	  <file:Documentation/kbuild/modules.txt>.  If unsure, say `N'.

config NETFILTER_XT_MATCH_BPF
	tristate '"bpf" match support'
	depends on NETFILTER_ADVANCED
	help
	  BPF matching applies a linux socket filter to each packet and
	  accepts those for which the filter returns non-zero.

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_MATCH_CGROUP
	tristate '"control group" match support'
	depends on NETFILTER_ADVANCED
	depends on CGROUPS
	select CGROUP_NET_CLASSID
	---help---
	Socket/process control group matching allows you to match locally
	generated packets based on which net_cls control group processes
	belong to.

config NETFILTER_XT_MATCH_CLUSTER
	tristate '"cluster" match support'
	depends on NF_CONNTRACK
	depends on NETFILTER_ADVANCED
	---help---
	  This option allows you to build work-load-sharing clusters of
	  network servers/stateful firewalls without having a dedicated
	  load-balancing router/server/switch. Basically, this match returns
	  true when the packet must be handled by this cluster node. Thus,
	  all nodes see all packets and this match decides which node handles
	  what packets. The work-load sharing algorithm is based on source
	  address hashing.

	  If you say Y or M here, try `iptables -m cluster --help` for
	  more information.

config NETFILTER_XT_MATCH_COMMENT
	tristate  '"comment" match support'
	depends on NETFILTER_ADVANCED
	help
	  This option adds a `comment' dummy-match, which allows you to put
	  comments in your iptables ruleset.

	  If you want to compile it as a module, say M here and read
	  <file:Documentation/kbuild/modules.txt>.  If unsure, say `N'.

config NETFILTER_XT_MATCH_CONNBYTES
	tristate  '"connbytes" per-connection counter match support'
	depends on NF_CONNTRACK
	depends on NETFILTER_ADVANCED
	help
	  This option adds a `connbytes' match, which allows you to match the
	  number of bytes and/or packets for each direction within a connection.

	  If you want to compile it as a module, say M here and read
	  <file:Documentation/kbuild/modules.txt>.  If unsure, say `N'.

config NETFILTER_XT_MATCH_CONNLABEL
	tristate '"connlabel" match support'
	select NF_CONNTRACK_LABELS
	depends on NF_CONNTRACK
	depends on NETFILTER_ADVANCED
	---help---
	  This match allows you to test and assign userspace-defined labels names
	  to a connection.  The kernel only stores bit values - mapping
	  names to bits is done by userspace.

	  Unlike connmark, more than 32 flag bits may be assigned to a
	  connection simultaneously.

config NETFILTER_XT_MATCH_CONNLIMIT
	tristate '"connlimit" match support'
	depends on NF_CONNTRACK
	depends on NETFILTER_ADVANCED
	---help---
	  This match allows you to match against the number of parallel
	  connections to a server per client IP address (or address block).

config NETFILTER_XT_MATCH_CONNMARK
	tristate  '"connmark" connection mark match support'
	depends on NF_CONNTRACK
	depends on NETFILTER_ADVANCED
	select NETFILTER_XT_CONNMARK
	---help---
	This is a backwards-compat option for the user's convenience
	(e.g. when running oldconfig). It selects
	CONFIG_NETFILTER_XT_CONNMARK (combined connmark/CONNMARK module).

config NETFILTER_XT_MATCH_CONNTRACK
	tristate '"conntrack" connection tracking match support'
	depends on NF_CONNTRACK
	default m if NETFILTER_ADVANCED=n
	help
	  This is a general conntrack match module, a superset of the state match.

	  It allows matching on additional conntrack information, which is
	  useful in complex configurations, such as NAT gateways with multiple
	  internet links or tunnels.

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_MATCH_CPU
	tristate '"cpu" match support'
	depends on NETFILTER_ADVANCED
	help
	  CPU matching allows you to match packets based on the CPU
	  currently handling the packet.

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_MATCH_DCCP
	tristate '"dccp" protocol match support'
	depends on NETFILTER_ADVANCED
	default IP_DCCP
	help
	  With this option enabled, you will be able to use the iptables
	  `dccp' match in order to match on DCCP source/destination ports
	  and DCCP flags.

	  If you want to compile it as a module, say M here and read
	  <file:Documentation/kbuild/modules.txt>.  If unsure, say `N'.

config NETFILTER_XT_MATCH_DEVGROUP
	tristate '"devgroup" match support'
	depends on NETFILTER_ADVANCED
	help
	  This options adds a `devgroup' match, which allows to match on the
	  device group a network device is assigned to.

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_MATCH_DSCP
	tristate '"dscp" and "tos" match support'
	depends on NETFILTER_ADVANCED
	help
	  This option adds a `DSCP' match, which allows you to match against
	  the IPv4/IPv6 header DSCP field (differentiated services codepoint).

	  The DSCP field can have any value between 0x0 and 0x3f inclusive.

	  It will also add a "tos" match, which allows you to match packets
	  based on the Type Of Service fields of the IPv4 packet (which share
	  the same bits as DSCP).

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_MATCH_ECN
	tristate '"ecn" match support'
	depends on NETFILTER_ADVANCED
	---help---
	This option adds an "ECN" match, which allows you to match against
	the IPv4 and TCP header ECN fields.

	To compile it as a module, choose M here. If unsure, say N.

config NETFILTER_XT_MATCH_ESP
	tristate '"esp" match support'
	depends on NETFILTER_ADVANCED
	help
	  This match extension allows you to match a range of SPIs
	  inside ESP header of IPSec packets.

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_MATCH_HASHLIMIT
	tristate '"hashlimit" match support'
	depends on (IP6_NF_IPTABLES || IP6_NF_IPTABLES=n)
	depends on NETFILTER_ADVANCED
	help
	  This option adds a `hashlimit' match.

	  As opposed to `limit', this match dynamically creates a hash table
	  of limit buckets, based on your selection of source/destination
	  addresses and/or ports.

	  It enables you to express policies like `10kpps for any given
	  destination address' or `500pps from any given source address'
	  with a single rule.

config NETFILTER_XT_MATCH_HELPER
	tristate '"helper" match support'
	depends on NF_CONNTRACK
	depends on NETFILTER_ADVANCED
	help
	  Helper matching allows you to match packets in dynamic connections
	  tracked by a conntrack-helper, ie. ip_conntrack_ftp

	  To compile it as a module, choose M here.  If unsure, say Y.

config NETFILTER_XT_MATCH_HL
	tristate '"hl" hoplimit/TTL match support'
	depends on NETFILTER_ADVANCED
	---help---
	HL matching allows you to match packets based on the hoplimit
	in the IPv6 header, or the time-to-live field in the IPv4
	header of the packet.

config NETFILTER_XT_MATCH_IPCOMP
	tristate '"ipcomp" match support'
	depends on NETFILTER_ADVANCED
	help
	  This match extension allows you to match a range of CPIs(16 bits)
	  inside IPComp header of IPSec packets.

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_MATCH_IPRANGE
	tristate '"iprange" address range match support'
	depends on NETFILTER_ADVANCED
	---help---
	This option adds a "iprange" match, which allows you to match based on
	an IP address range. (Normal iptables only matches on single addresses
	with an optional mask.)

	If unsure, say M.

config NETFILTER_XT_MATCH_IPVS
	tristate '"ipvs" match support'
	depends on IP_VS
	depends on NETFILTER_ADVANCED
	depends on NF_CONNTRACK
	help
	  This option allows you to match against IPVS properties of a packet.

	  If unsure, say N.

config NETFILTER_XT_MATCH_L2TP
	tristate '"l2tp" match support'
	depends on NETFILTER_ADVANCED
	default L2TP
	---help---
	This option adds an "L2TP" match, which allows you to match against
	L2TP protocol header fields.

	To compile it as a module, choose M here. If unsure, say N.

config NETFILTER_XT_MATCH_LENGTH
	tristate '"length" match support'
	depends on NETFILTER_ADVANCED
	help
	  This option allows you to match the length of a packet against a
	  specific value or range of values.

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_MATCH_LIMIT
	tristate '"limit" match support'
	depends on NETFILTER_ADVANCED
	help
	  limit matching allows you to control the rate at which a rule can be
	  matched: mainly useful in combination with the LOG target ("LOG
	  target support", below) and to avoid some Denial of Service attacks.

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_MATCH_MAC
	tristate '"mac" address match support'
	depends on NETFILTER_ADVANCED
	help
	  MAC matching allows you to match packets based on the source
	  Ethernet address of the packet.

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_MATCH_MARK
	tristate '"mark" match support'
	depends on NETFILTER_ADVANCED
	select NETFILTER_XT_MARK
	---help---
	This is a backwards-compat option for the user's convenience
	(e.g. when running oldconfig). It selects
	CONFIG_NETFILTER_XT_MARK (combined mark/MARK module).

config NETFILTER_XT_MATCH_MULTIPORT
	tristate '"multiport" Multiple port match support'
	depends on NETFILTER_ADVANCED
	help
	  Multiport matching allows you to match TCP or UDP packets based on
	  a series of source or destination ports: normally a rule can only
	  match a single range of ports.

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_MATCH_NFACCT
	tristate '"nfacct" match support'
	depends on NETFILTER_ADVANCED
	select NETFILTER_NETLINK_ACCT
	help
	  This option allows you to use the extended accounting through
	  nfnetlink_acct.

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_MATCH_OSF
	tristate '"osf" Passive OS fingerprint match'
	depends on NETFILTER_ADVANCED && NETFILTER_NETLINK
	help
	  This option selects the Passive OS Fingerprinting match module
	  that allows to passively match the remote operating system by
	  analyzing incoming TCP SYN packets.

	  Rules and loading software can be downloaded from
	  http://www.ioremap.net/projects/osf

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_MATCH_OWNER
	tristate '"owner" match support'
	depends on NETFILTER_ADVANCED
	---help---
	Socket owner matching allows you to match locally-generated packets
	based on who created the socket: the user or group. It is also
	possible to check whether a socket actually exists.

config NETFILTER_XT_MATCH_POLICY
	tristate 'IPsec "policy" match support'
	depends on XFRM
	default m if NETFILTER_ADVANCED=n
	help
	  Policy matching allows you to match packets based on the
	  IPsec policy that was used during decapsulation/will
	  be used during encapsulation.

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_MATCH_PHYSDEV
	tristate '"physdev" match support'
	depends on BRIDGE && BRIDGE_NETFILTER
	depends on NETFILTER_ADVANCED
	help
	  Physdev packet matching matches against the physical bridge ports
	  the IP packet arrived on or will leave by.

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_MATCH_PKTTYPE
	tristate '"pkttype" packet type match support'
	depends on NETFILTER_ADVANCED
	help
	  Packet type matching allows you to match a packet by
	  its "class", eg. BROADCAST, MULTICAST, ...

	  Typical usage:
	  iptables -A INPUT -m pkttype --pkt-type broadcast -j LOG

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_MATCH_QUOTA
	tristate '"quota" match support'
	depends on NETFILTER_ADVANCED
	help
	  This option adds a `quota' match, which allows to match on a
	  byte counter.

	  If you want to compile it as a module, say M here and read
	  <file:Documentation/kbuild/modules.txt>.  If unsure, say `N'.

config NETFILTER_XT_MATCH_RATEEST
	tristate '"rateest" match support'
	depends on NETFILTER_ADVANCED
	select NETFILTER_XT_TARGET_RATEEST
	help
	  This option adds a `rateest' match, which allows to match on the
	  rate estimated by the RATEEST target.

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_MATCH_REALM
	tristate  '"realm" match support'
	depends on NETFILTER_ADVANCED
	select IP_ROUTE_CLASSID
	help
	  This option adds a `realm' match, which allows you to use the realm
	  key from the routing subsystem inside iptables.

	  This match pretty much resembles the CONFIG_NET_CLS_ROUTE4 option 
	  in tc world.

	  If you want to compile it as a module, say M here and read
	  <file:Documentation/kbuild/modules.txt>.  If unsure, say `N'.

config NETFILTER_XT_MATCH_RECENT
	tristate '"recent" match support'
	depends on NETFILTER_ADVANCED
	---help---
	This match is used for creating one or many lists of recently
	used addresses and then matching against that/those list(s).

	Short options are available by using 'iptables -m recent -h'
	Official Website: <http://snowman.net/projects/ipt_recent/>

config NETFILTER_XT_MATCH_SCTP
	tristate  '"sctp" protocol match support'
	depends on NETFILTER_ADVANCED
	default IP_SCTP
	help
	  With this option enabled, you will be able to use the 
	  `sctp' match in order to match on SCTP source/destination ports
	  and SCTP chunk types.

	  If you want to compile it as a module, say M here and read
	  <file:Documentation/kbuild/modules.txt>.  If unsure, say `N'.

config NETFILTER_XT_MATCH_SOCKET
	tristate '"socket" match support'
	depends on NETFILTER_XTABLES
	depends on NETFILTER_ADVANCED
	depends on !NF_CONNTRACK || NF_CONNTRACK
	depends on (IPV6 || IPV6=n)
	depends on (IP6_NF_IPTABLES || IP6_NF_IPTABLES=n)
	select NF_DEFRAG_IPV4
	select NF_DEFRAG_IPV6 if IP6_NF_IPTABLES
	help
	  This option adds a `socket' match, which can be used to match
	  packets for which a TCP or UDP socket lookup finds a valid socket.
	  It can be used in combination with the MARK target and policy
	  routing to implement full featured non-locally bound sockets.

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_MATCH_STATE
	tristate '"state" match support'
	depends on NF_CONNTRACK
	default m if NETFILTER_ADVANCED=n
	help
	  Connection state matching allows you to match packets based on their
	  relationship to a tracked connection (ie. previous packets).  This
	  is a powerful tool for packet classification.

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_MATCH_STATISTIC
	tristate '"statistic" match support'
	depends on NETFILTER_ADVANCED
	help
	  This option adds a `statistic' match, which allows you to match
	  on packets periodically or randomly with a given percentage.

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_MATCH_STRING
	tristate  '"string" match support'
	depends on NETFILTER_ADVANCED
	select TEXTSEARCH
	select TEXTSEARCH_KMP
	select TEXTSEARCH_BM
	select TEXTSEARCH_FSM
	help
	  This option adds a `string' match, which allows you to look for
	  pattern matchings in packets.

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_MATCH_TCPMSS
	tristate '"tcpmss" match support'
	depends on NETFILTER_ADVANCED
	help
	  This option adds a `tcpmss' match, which allows you to examine the
	  MSS value of TCP SYN packets, which control the maximum packet size
	  for that connection.

	  To compile it as a module, choose M here.  If unsure, say N.

config NETFILTER_XT_MATCH_TIME
	tristate '"time" match support'
	depends on NETFILTER_ADVANCED
	---help---
	  This option adds a "time" match, which allows you to match based on
	  the packet arrival time (at the machine which netfilter is running)
	  on) or departure time/date (for locally generated packets).

	  If you say Y here, try `iptables -m time --help` for
	  more information.

	  If you want to compile it as a module, say M here.
	  If unsure, say N.

config NETFILTER_XT_MATCH_U32
	tristate '"u32" match support'
	depends on NETFILTER_ADVANCED
	---help---
	  u32 allows you to extract quantities of up to 4 bytes from a packet,
	  AND them with specified masks, shift them by specified amounts and
	  test whether the results are in any of a set of specified ranges.
	  The specification of what to extract is general enough to skip over
	  headers with lengths stored in the packet, as in IP or TCP header
	  lengths.

	  Details and examples are in the kernel module source.

endif # NETFILTER_XTABLES

endmenu

source "net/netfilter/ipset/Kconfig"

source "net/netfilter/ipvs/Kconfig"
