Re: [nft PATCH v3] src: Support maps as left side expressions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, Nov 30, 2019 at 02:53:21PM +0100, Phil Sutter wrote:
> From: Brett Mastbergen <bmastbergen@xxxxxxxxxxxx>
> 
> This change allows map expressions on the left side of comparisons:
> 
> nft add rule foo bar ip saddr map @map_a == 22 counter
> 
> It also allows map expressions as the left side expression of other
> map expressions:
> 
> nft add rule foo bar ip saddr map @map_a map @map_b == 22 counter
> 
> To accomplish this, some additional context needs to be set during
> evaluation and delinearization.  A tweak is also make to the parser
> logic to allow map expressions as the left hand expression to other
> map expressions.
> 
> By allowing maps as left side comparison expressions one can map
> information in the packet to some arbitrary piece of data and use
> the equality (or inequality) to make some decision about the traffic,
> unlike today where the result of a map lookup is only usable as the
> right side of a statement (like dnat or snat) that actually uses the
> value as input.
> 
> Signed-off-by: Brett Mastbergen <bmastbergen@xxxxxxxxxxxx>
> Signed-off-by: Phil Sutter <phil@xxxxxx>
> ---
> v2: Add testcases
> v3: Support maps on vmap LHS
> 
> Pablo, Brett,
> 
> Reading the discussion about pending v2 of this patch I gave it a try
> and extending functionality to verdict maps was easy and
> straightforward, so I just went ahead and extended the code accordingly.

Nice, thanks a lot for following up on this.

There is still one more case we have to cover and we go:

$ sudo nft add rule x z ip saddr map { 1.1.1.1 : 22 } vmap { 22 : accept }
Error: No symbol type information
add rule x z ip saddr map { 1.1.1.1 : 22 } vmap { 22 : accept }
                                      ^^

The existing syntax does not give us a chance to specify the right
hand side datatype. For named sets, this is fine because the set
reference implicit gives us the datatype. This information is not
available on implicit sets.

I think we have to update the syntax to include this information. For
the named set case, this will allow us to validate that actually the
specified selector and the set datatype are matching. For the implicit
sets, this will give us the datatype for the right hand side.

Otherwise, I'm afraid we will have to deal with variable length
integer, which will make things more complicated. At this stage, I
would start with strict typing, later on we can probably relax this in
the future as we find a way to reasonable infer information. This
means that a more verbose syntax, but I think that is fine.



[Index of Archives]     [Netfitler Users]     [Berkeley Packet Filter]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux