Re: [iptables PATCH 14/14] nft: bridge: Rudimental among extension support

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

 



On Wed, Aug 21, 2019 at 11:26:02AM +0200, Phil Sutter wrote:
[...]
> +/* Make sure previous payload expression(s) is/are consistent and extract if
> + * matching on source or destination address and if matching on MAC and IP or
> + * only MAC address. */
> +static int lookup_analyze_payloads(const struct nft_xt_ctx *ctx,
> +				   bool *dst, bool *ip)
> +{
> +	int val, val2 = -1;
> +
> +	if (ctx->flags & NFT_XT_CTX_PREV_PAYLOAD) {

Can you probably achieve this by storing protocol context?

Something like storing the current network base in the nft_xt_ctx
structure, rather than the last payload that you have seen.

>From the context you annotate, then among will find the information
that it needs in the context.

We can reuse this context later on to generate native tcp/udp/etc.
matching.

[...]
> +static int __add_nft_among(struct nft_handle *h, const char *table,
> +			   struct nftnl_rule *r, struct nft_among_pair *pairs,
> +			   int cnt, bool dst, bool inv, bool ip)
> +{
> +	uint32_t set_id, type = 9, len = 6;
> +	/*			!dst, dst */
> +	int eth_addr_off[] = { 6, 0 };
> +	int ip_addr_off[] = { 12, 16 };
> +	struct nftnl_expr *e;
> +	struct nftnl_set *s;
> +	int idx = 0;
> +
> +	if (ip) {
> +		type = type << 6 | 7;
> +		len += 4 + 2;
> +	}

Magic numbers, please help me understand this.

I think this is the way to go, let's just sort out these few glitches.



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

  Powered by Linux