Re: [PATCH nft] meta: add iifkind and oifkind support

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

 



Hi pablo & Florian,


How about this patch?


On 1/24/2019 10:23 PM, wenxu@xxxxxxxxx wrote:
> From: wenxu <wenxu@xxxxxxxxx>
>
> This can be used to match the kind type of iif or oif
> interface of the packet.  Example:
>
> add rule inet raw prerouting meta iifkind "vrf" accept
>
> Signed-off-by: wenxu <wenxu@xxxxxxxxx>
> ---
>  doc/primary-expression.txt          | 8 +++++++-
>  include/linux/netfilter/nf_tables.h | 4 ++++
>  src/meta.c                          | 6 ++++++
>  3 files changed, 17 insertions(+), 1 deletion(-)
>
> diff --git a/doc/primary-expression.txt b/doc/primary-expression.txt
> index a964ce9..e96fba0 100644
> --- a/doc/primary-expression.txt
> +++ b/doc/primary-expression.txt
> @@ -4,7 +4,7 @@ META EXPRESSIONS
>  *meta* {length | nfproto | l4proto | protocol | priority}
>  [meta] {mark | iif | iifname | iiftype | oif | oifname | oiftype |
>  skuid | skgid | nftrace | rtclassid | ibrname | obrname | pkttype | cpu
> -| iifgroup | oifgroup | cgroup | random | ipsec}
> +| iifgroup | oifgroup | cgroup | random | ipsec | iifkind | oifkind}
>  
>  A meta expression refers to meta data associated with a packet.
>  
> @@ -114,6 +114,10 @@ integer (32 bit)
>  |ipsec|
>  boolean|
>  boolean (1 bit)
> +|iifkind|
> +Input interface kind |
> +|oifkind|
> +Output interface kind
>  |====================
>  
>  .Meta expression specific types
> @@ -137,6 +141,8 @@ Device group (32 bit number). Can be specified numerically or as symbolic name d
>  |pkt_type|
>  Packet type: *host* (addressed to local host), *broadcast* (to all),
>  *multicast* (to group), *other* (addressed to another host).
> +|ifkind|
> +Interface kind (16 byte string). Does not have to exist.
>  |=============================
>  
>  .Using meta expressions
> diff --git a/include/linux/netfilter/nf_tables.h b/include/linux/netfilter/nf_tables.h
> index 1d13ad3..37036be 100644
> --- a/include/linux/netfilter/nf_tables.h
> +++ b/include/linux/netfilter/nf_tables.h
> @@ -789,6 +789,8 @@ enum nft_exthdr_attributes {
>   * @NFT_META_CGROUP: socket control group (skb->sk->sk_classid)
>   * @NFT_META_PRANDOM: a 32bit pseudo-random number
>   * @NFT_META_SECPATH: boolean, secpath_exists (!!skb->sp)
> + * @NFT_META_IIFKIND: packet input interface kind name (dev->rtnl_link_ops->kind)
> + * @NFT_META_OIFKIND: packet output interface kind name (dev->rtnl_link_ops->kind)
>   */
>  enum nft_meta_keys {
>  	NFT_META_LEN,
> @@ -817,6 +819,8 @@ enum nft_meta_keys {
>  	NFT_META_CGROUP,
>  	NFT_META_PRANDOM,
>  	NFT_META_SECPATH,
> +	NFT_META_IIFKIND,
> +	NFT_META_OIFKIND,
>  };
>  
>  /**
> diff --git a/src/meta.c b/src/meta.c
> index c8a7b13..4cb9177 100644
> --- a/src/meta.c
> +++ b/src/meta.c
> @@ -444,6 +444,12 @@ const struct meta_template meta_templates[] = {
>  						BYTEORDER_BIG_ENDIAN), /* avoid conversion; doesn't have endianess */
>  	[NFT_META_SECPATH]	= META_TEMPLATE("ipsec", &boolean_type,
>  						BITS_PER_BYTE, BYTEORDER_HOST_ENDIAN),
> +	[NFT_META_IIFKIND]	= META_TEMPLATE("iifkind",   &ifname_type,
> +						IFNAMSIZ * BITS_PER_BYTE,
> +						BYTEORDER_HOST_ENDIAN),
> +	[NFT_META_OIFKIND]	= META_TEMPLATE("oifkind",   &ifname_type,
> +						IFNAMSIZ * BITS_PER_BYTE,
> +						BYTEORDER_HOST_ENDIAN),
>  };
>  
>  static bool meta_key_is_unqualified(enum nft_meta_keys key)



[Index of Archives]     [Netfitler Users]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux