IB/uverbs: Expose GRE flow spec to the user-kernel ABI header
authorAriel Levkovich <lariel@mellanox.com>
Sun, 13 May 2018 11:33:29 +0000 (14:33 +0300)
committerJason Gunthorpe <jgg@mellanox.com>
Thu, 17 May 2018 03:32:54 +0000 (21:32 -0600)
Add ib_uverbs_flow_spec_gre to define a rule to match the GRE
encapsulation protocol.

The spec includes the generic specs header, type, size and reserved
fields while the filter itself is defined as ib_uverbs_flow_gre_filter
and includes:
1. Checksum present bit, key present bit and version bits in a single
   16bit field.
2. Protocol type field - Indicates the ether protocol type of the
   encapsulated payload.
3. Key field - present if key bit is set and contains an application
   specific key value.

Reviewed-by: Mark Bloch <markb@mellanox.com>
Signed-off-by: Ariel Levkovich <lariel@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
include/uapi/rdma/ib_user_verbs.h

index 6aeb03315b0bd543b4fa11d5a46ab8d8a98430a8..77c1a9a76e71ac106b2e3d915abc725cd114e10f 100644 (file)
@@ -1033,6 +1033,33 @@ struct ib_uverbs_flow_spec_esp {
        struct ib_uverbs_flow_spec_esp_filter mask;
 };
 
+struct ib_uverbs_flow_gre_filter {
+       /* c_ks_res0_ver field is bits 0-15 in offset 0 of a standard GRE header:
+        * bit 0 - C - checksum bit.
+        * bit 1 - reserved. set to 0.
+        * bit 2 - key bit.
+        * bit 3 - sequence number bit.
+        * bits 4:12 - reserved. set to 0.
+        * bits 13:15 - GRE version.
+        */
+       __be16 c_ks_res0_ver;
+       __be16 protocol;
+       __be32 key;
+};
+
+struct ib_uverbs_flow_spec_gre {
+       union {
+               struct ib_uverbs_flow_spec_hdr hdr;
+               struct {
+                       __u32 type;
+                       __u16 size;
+                       __u16 reserved;
+               };
+       };
+       struct ib_uverbs_flow_gre_filter     val;
+       struct ib_uverbs_flow_gre_filter     mask;
+};
+
 struct ib_uverbs_flow_attr {
        __u32 type;
        __u16 size;