netfilter-devel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] netfilter: nftables: fix documentation for dup statement
@ 2020-08-27 15:42 Quentin Armitage
  2020-08-27 17:02 ` Phil Sutter
  2020-08-27 17:55 ` Pablo Neira Ayuso
  0 siblings, 2 replies; 7+ messages in thread
From: Quentin Armitage @ 2020-08-27 15:42 UTC (permalink / raw)
  To: netfilter-devel


The dup statement requires an address, and the device is optional,
not the other way round.

Signed-off-by: Quentin Armitage <quentin@armitage.org.uk>
---
 doc/statements.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/doc/statements.txt b/doc/statements.txt
index 9155f286..835db087 100644
--- a/doc/statements.txt
+++ b/doc/statements.txt
@@ -648,7 +648,7 @@ The dup statement is used to duplicate a packet and send the
copy to a different
 destination.
 
 [verse]
-*dup to* 'device'
+*dup to* 'address'
 *dup to* 'address' *device* 'device'
 
 .Dup statement values
-- 
2.25.4



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH] netfilter: nftables: fix documentation for dup statement
  2020-08-27 15:42 [PATCH] netfilter: nftables: fix documentation for dup statement Quentin Armitage
@ 2020-08-27 17:02 ` Phil Sutter
  2020-08-27 17:40   ` Florian Westphal
  2020-08-27 17:55 ` Pablo Neira Ayuso
  1 sibling, 1 reply; 7+ messages in thread
From: Phil Sutter @ 2020-08-27 17:02 UTC (permalink / raw)
  To: Quentin Armitage; +Cc: netfilter-devel, Florian Westphal

Hi,

On Thu, Aug 27, 2020 at 04:42:00PM +0100, Quentin Armitage wrote:
> The dup statement requires an address, and the device is optional,
> not the other way round.
> 
> Signed-off-by: Quentin Armitage <quentin@armitage.org.uk>
> ---
>  doc/statements.txt | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/doc/statements.txt b/doc/statements.txt
> index 9155f286..835db087 100644
> --- a/doc/statements.txt
> +++ b/doc/statements.txt
> @@ -648,7 +648,7 @@ The dup statement is used to duplicate a packet and send the
> copy to a different
>  destination.
>  
>  [verse]
> -*dup to* 'device'
> +*dup to* 'address'
>  *dup to* 'address' *device* 'device'
>  
>  .Dup statement values

The examples are wrong, too. I wonder if this is really just a mistake
and all three examples given (including the "advanced" usage using a
map) are just wrong or if 'dup' actually was meant to support
duplicating to a device in mirror port fashion.

Florian, you wrote the docs. What's your take here?

Thanks, Phil

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] netfilter: nftables: fix documentation for dup statement
  2020-08-27 17:02 ` Phil Sutter
@ 2020-08-27 17:40   ` Florian Westphal
  2020-08-27 18:59     ` Quentin Armitage
  0 siblings, 1 reply; 7+ messages in thread
From: Florian Westphal @ 2020-08-27 17:40 UTC (permalink / raw)
  To: Phil Sutter, Quentin Armitage, netfilter-devel, Florian Westphal

Phil Sutter <phil@nwl.cc> wrote:
> Hi,
> 
> On Thu, Aug 27, 2020 at 04:42:00PM +0100, Quentin Armitage wrote:
> > The dup statement requires an address, and the device is optional,
> > not the other way round.
> > 
> > Signed-off-by: Quentin Armitage <quentin@armitage.org.uk>
> > ---
> >  doc/statements.txt | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/doc/statements.txt b/doc/statements.txt
> > index 9155f286..835db087 100644
> > --- a/doc/statements.txt
> > +++ b/doc/statements.txt
> > @@ -648,7 +648,7 @@ The dup statement is used to duplicate a packet and send the
> > copy to a different
> >  destination.
> >  
> >  [verse]
> > -*dup to* 'device'
> > +*dup to* 'address'
> >  *dup to* 'address' *device* 'device'
> >  
> >  .Dup statement values
> 
> The examples are wrong, too. I wonder if this is really just a mistake
> and all three examples given (including the "advanced" usage using a
> map) are just wrong or if 'dup' actually was meant to support
> duplicating to a device in mirror port fashion.

Right, 'dup to eth0' can be used in the netdev ingress hook.

For dup from ipv4/ipv6 families the address is needed.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] netfilter: nftables: fix documentation for dup statement
  2020-08-27 15:42 [PATCH] netfilter: nftables: fix documentation for dup statement Quentin Armitage
  2020-08-27 17:02 ` Phil Sutter
@ 2020-08-27 17:55 ` Pablo Neira Ayuso
  1 sibling, 0 replies; 7+ messages in thread
From: Pablo Neira Ayuso @ 2020-08-27 17:55 UTC (permalink / raw)
  To: Quentin Armitage; +Cc: netfilter-devel

Hi Quentin,

Thanks for your patch:

On Thu, Aug 27, 2020 at 04:42:00PM +0100, Quentin Armitage wrote:
> 
> The dup statement requires an address, and the device is optional,
> not the other way round.

table netdev x {
        chain y {
                type filter hook ingress device "eth0" priority filter; policy accept;
                ip protocol udp dup to "eth1"
        }
}

I think probably it should be good to clarify that:

- dup to 'device'
- fwd to 'device'

only work from the netdev family.

Thanks.

> Signed-off-by: Quentin Armitage <quentin@armitage.org.uk>
> ---
>  doc/statements.txt | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/doc/statements.txt b/doc/statements.txt
> index 9155f286..835db087 100644
> --- a/doc/statements.txt
> +++ b/doc/statements.txt
> @@ -648,7 +648,7 @@ The dup statement is used to duplicate a packet and send the
> copy to a different
>  destination.
>  
>  [verse]
> -*dup to* 'device'
> +*dup to* 'address'
>  *dup to* 'address' *device* 'device'
>  
>  .Dup statement values
> -- 
> 2.25.4
> 
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] netfilter: nftables: fix documentation for dup statement
  2020-08-27 17:40   ` Florian Westphal
@ 2020-08-27 18:59     ` Quentin Armitage
  2020-08-31 16:49       ` Phil Sutter
  0 siblings, 1 reply; 7+ messages in thread
From: Quentin Armitage @ 2020-08-27 18:59 UTC (permalink / raw)
  To: Florian Westphal, Phil Sutter, Pablo Neira Ayuso, netfilter-devel

On Thu, 2020-08-27 at 19:40 +0200, Florian Westphal wrote:
> Phil Sutter <phil@nwl.cc> wrote:
> > Hi,
> > 
> > On Thu, Aug 27, 2020 at 04:42:00PM +0100, Quentin Armitage wrote:
> > > The dup statement requires an address, and the device is optional,
> > > not the other way round.
> > > 
> > > Signed-off-by: Quentin Armitage <
> > > quentin@armitage.org.uk
> > > >
> > > ---
> > >  doc/statements.txt | 2 +-
> > >  1 file changed, 1 insertion(+), 1 deletion(-)
> > > 
> > > diff --git a/doc/statements.txt b/doc/statements.txt
> > > index 9155f286..835db087 100644
> > > --- a/doc/statements.txt
> > > +++ b/doc/statements.txt
> > > @@ -648,7 +648,7 @@ The dup statement is used to duplicate a packet and
> > > send the
> > > copy to a different
> > >  destination.
> > >  
> > >  [verse]
> > > -*dup to* 'device'
> > > +*dup to* 'address'
> > >  *dup to* 'address' *device* 'device'
> > >  
> > >  .Dup statement values
> > 
> > The examples are wrong, too. I wonder if this is really just a mistake
> > and all three examples given (including the "advanced" usage using a
> > map) are just wrong or if 'dup' actually was meant to support
> > duplicating to a device in mirror port fashion.
> 
> Right, 'dup to eth0' can be used in the netdev ingress hook.
> 
> For dup from ipv4/ipv6 families the address is needed.

So it seems the valid options are:
*dup to* 'device'			# netdev ingress hook only
*dup to* 'address'  			# ipv4/ipv6 only
*dup to* 'address' *device* 'device'	# ipv4/ipv6 only

From a user perspective being able to specify "dup to 'device'" is something
that is useful to be able to specify. I am now using:
  dup to ip[6] daddr device 'device'
but it seems to me that having to specify "to ip[6] daddr" is unnecessary.

So far as I can see, it would be quite straightforward to allow "dup to
'device'" to be specified and for nft to handle it with an implied "to ip[6]
addr". I am happy to produce a patch to do this if it would be helpful.

I am also happy to submit a revised patch for statements.txt if that would be
useful.

Quentin Armitage


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] netfilter: nftables: fix documentation for dup statement
  2020-08-27 18:59     ` Quentin Armitage
@ 2020-08-31 16:49       ` Phil Sutter
  2020-09-03  8:15         ` Quentin Armitage
  0 siblings, 1 reply; 7+ messages in thread
From: Phil Sutter @ 2020-08-31 16:49 UTC (permalink / raw)
  To: Quentin Armitage; +Cc: Florian Westphal, Pablo Neira Ayuso, netfilter-devel

Hi Quentin,

On Thu, Aug 27, 2020 at 07:59:19PM +0100, Quentin Armitage wrote:
> On Thu, 2020-08-27 at 19:40 +0200, Florian Westphal wrote:
> > Phil Sutter <phil@nwl.cc> wrote:
> > > Hi,
> > > 
> > > On Thu, Aug 27, 2020 at 04:42:00PM +0100, Quentin Armitage wrote:
> > > > The dup statement requires an address, and the device is optional,
> > > > not the other way round.
> > > > 
> > > > Signed-off-by: Quentin Armitage <
> > > > quentin@armitage.org.uk
> > > > >
> > > > ---
> > > >  doc/statements.txt | 2 +-
> > > >  1 file changed, 1 insertion(+), 1 deletion(-)
> > > > 
> > > > diff --git a/doc/statements.txt b/doc/statements.txt
> > > > index 9155f286..835db087 100644
> > > > --- a/doc/statements.txt
> > > > +++ b/doc/statements.txt
> > > > @@ -648,7 +648,7 @@ The dup statement is used to duplicate a packet and
> > > > send the
> > > > copy to a different
> > > >  destination.
> > > >  
> > > >  [verse]
> > > > -*dup to* 'device'
> > > > +*dup to* 'address'
> > > >  *dup to* 'address' *device* 'device'
> > > >  
> > > >  .Dup statement values
> > > 
> > > The examples are wrong, too. I wonder if this is really just a mistake
> > > and all three examples given (including the "advanced" usage using a
> > > map) are just wrong or if 'dup' actually was meant to support
> > > duplicating to a device in mirror port fashion.
> > 
> > Right, 'dup to eth0' can be used in the netdev ingress hook.
> > 
> > For dup from ipv4/ipv6 families the address is needed.
> 
> So it seems the valid options are:
> *dup to* 'device'			# netdev ingress hook only
> *dup to* 'address'  			# ipv4/ipv6 only
> *dup to* 'address' *device* 'device'	# ipv4/ipv6 only
> 
> From a user perspective being able to specify "dup to 'device'" is something
> that is useful to be able to specify. I am now using:
>   dup to ip[6] daddr device 'device'
> but it seems to me that having to specify "to ip[6] daddr" is unnecessary.

Oh, and that works? From reading nf_dup_ipv4.c, the kernel seems to
perform a route lookup for the packet's daddr on given iface. Did you
add an onlink route or something to make sure that succeeds?

Cheers, Phil

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] netfilter: nftables: fix documentation for dup statement
  2020-08-31 16:49       ` Phil Sutter
@ 2020-09-03  8:15         ` Quentin Armitage
  0 siblings, 0 replies; 7+ messages in thread
From: Quentin Armitage @ 2020-09-03  8:15 UTC (permalink / raw)
  To: Phil Sutter; +Cc: Florian Westphal, Pablo Neira Ayuso, netfilter-devel

Hi Phil,

On Mon, 2020-08-31 at 18:49 +0200, Phil Sutter wrote:
> Hi Quentin,
> 
> On Thu, Aug 27, 2020 at 07:59:19PM +0100, Quentin Armitage wrote:
> > On Thu, 2020-08-27 at 19:40 +0200, Florian Westphal wrote:
> > > Phil Sutter <
> > > phil@nwl.cc
> > > > wrote:
> > > > Hi,
> > > > 
> > > > On Thu, Aug 27, 2020 at 04:42:00PM +0100, Quentin Armitage wrote:
> > > > > The dup statement requires an address, and the device is optional,
> > > > > not the other way round.
> > > > > 
> > > > > Signed-off-by: Quentin Armitage <
> > > > > quentin@armitage.org.uk
> > > > > 
> > > > > 
> > > > > ---
> > > > >  doc/statements.txt | 2 +-
> > > > >  1 file changed, 1 insertion(+), 1 deletion(-)
> > > > > 
> > > > > diff --git a/doc/statements.txt b/doc/statements.txt
> > > > > index 9155f286..835db087 100644
> > > > > --- a/doc/statements.txt
> > > > > +++ b/doc/statements.txt
> > > > > @@ -648,7 +648,7 @@ The dup statement is used to duplicate a packet
> > > > > and
> > > > > send the
> > > > > copy to a different
> > > > >  destination.
> > > > >  
> > > > >  [verse]
> > > > > -*dup to* 'device'
> > > > > +*dup to* 'address'
> > > > >  *dup to* 'address' *device* 'device'
> > > > >  
> > > > >  .Dup statement values
> > > > 
> > > > The examples are wrong, too. I wonder if this is really just a mistake
> > > > and all three examples given (including the "advanced" usage using a
> > > > map) are just wrong or if 'dup' actually was meant to support
> > > > duplicating to a device in mirror port fashion.
> > > 
> > > Right, 'dup to eth0' can be used in the netdev ingress hook.
> > > 
> > > For dup from ipv4/ipv6 families the address is needed.
> > 
> > So it seems the valid options are:
> > *dup to* 'device'			# netdev ingress hook only
> > *dup to* 'address'  			# ipv4/ipv6 only
> > *dup to* 'address' *device* 'device'	# ipv4/ipv6 only
> > 
> > From a user perspective being able to specify "dup to 'device'" is something
> > that is useful to be able to specify. I am now using:
> >   dup to ip[6] daddr device 'device'
> > but it seems to me that having to specify "to ip[6] daddr" is unnecessary.
> 
> Oh, and that works? From reading nf_dup_ipv4.c, the kernel seems to
> perform a route lookup for the packet's daddr on given iface. Did you
> add an onlink route or something to make sure that succeeds?
> 
> Cheers, Phil

It is working for me, both with IPv4 and IPv6, and I suspect the reason is that
I am using this for multicast packets. In particular, I have a macvlan and I want to join multicast groups on the macvlan interface but I want the IGMP/MLD join group messages to be sent with the MAC address of the "parent" interface of the macvlan, and not the mac address of the macvlan itself.

The rules I am using are:
 map vmac_map {
	type iface_index : iface_index
	elements = { "macvlan0" : "eth0" }
 }

 ip protocol igmp dup to ip daddr device oif map @vmac_map drop
and
 icmpv6 type mld2-listener-report dup to ip6 daddr device oif map @vmac_map drop

With many thanks for your help,

Quentin


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2020-09-03  8:15 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-08-27 15:42 [PATCH] netfilter: nftables: fix documentation for dup statement Quentin Armitage
2020-08-27 17:02 ` Phil Sutter
2020-08-27 17:40   ` Florian Westphal
2020-08-27 18:59     ` Quentin Armitage
2020-08-31 16:49       ` Phil Sutter
2020-09-03  8:15         ` Quentin Armitage
2020-08-27 17:55 ` Pablo Neira Ayuso

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).