netfilter: nf_tables: add devgroup support in meta expresion
authorAna Rey <anarey@gmail.com>
Tue, 2 Sep 2014 18:36:14 +0000 (20:36 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Tue, 9 Sep 2014 14:31:23 +0000 (16:31 +0200)
Add devgroup support to let us match device group of a packets incoming
or outgoing interface.

Signed-off-by: Ana Rey <anarey@gmail.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
include/uapi/linux/netfilter/nf_tables.h
net/netfilter/nft_meta.c

index c9b6f00a3fb753c479a160f06f1ec6db00918da8..c000947d3f38e4fe1f444ad233ccce05b28b4402 100644 (file)
@@ -573,6 +573,8 @@ enum nft_exthdr_attributes {
  * @NFT_META_BRI_OIFNAME: packet output bridge interface name
  * @NFT_META_PKTTYPE: packet type (skb->pkt_type), special handling for loopback
  * @NFT_META_CPU: cpu id through smp_processor_id()
+ * @NFT_META_IIFGROUP: packet input interface group
+ * @NFT_META_OIFGROUP: packet output interface group
  */
 enum nft_meta_keys {
        NFT_META_LEN,
@@ -596,6 +598,8 @@ enum nft_meta_keys {
        NFT_META_BRI_OIFNAME,
        NFT_META_PKTTYPE,
        NFT_META_CPU,
+       NFT_META_IIFGROUP,
+       NFT_META_OIFGROUP,
 };
 
 /**
index 843e099a962d2fb4f388050c8c96d5e60e468afa..1e7c076ca63ab92e062c56e68910a47b8b1dffc6 100644 (file)
@@ -155,6 +155,16 @@ void nft_meta_get_eval(const struct nft_expr *expr,
        case NFT_META_CPU:
                dest->data[0] = smp_processor_id();
                break;
+       case NFT_META_IIFGROUP:
+               if (in == NULL)
+                       goto err;
+               dest->data[0] = in->group;
+               break;
+       case NFT_META_OIFGROUP:
+               if (out == NULL)
+                       goto err;
+               dest->data[0] = out->group;
+               break;
        default:
                WARN_ON(1);
                goto err;
@@ -228,6 +238,8 @@ int nft_meta_get_init(const struct nft_ctx *ctx,
 #endif
        case NFT_META_PKTTYPE:
        case NFT_META_CPU:
+       case NFT_META_IIFGROUP:
+       case NFT_META_OIFGROUP:
                break;
        default:
                return -EOPNOTSUPP;