flow_dissector: Parse multiple MPLS Label Stack Entries
[linux-block.git] / include / net / flow_dissector.h
index 62838391582760a6e4101a2c9dde0b3dd9922218..4fb1a69c6ecf8ab538f6693d9d49359d663bb967 100644 (file)
@@ -59,13 +59,25 @@ struct flow_dissector_key_vlan {
        __be16  vlan_tpid;
 };
 
-struct flow_dissector_key_mpls {
+struct flow_dissector_mpls_lse {
        u32     mpls_ttl:8,
                mpls_bos:1,
                mpls_tc:3,
                mpls_label:20;
 };
 
+#define FLOW_DIS_MPLS_MAX 7
+struct flow_dissector_key_mpls {
+       struct flow_dissector_mpls_lse ls[FLOW_DIS_MPLS_MAX]; /* Label Stack */
+       u8 used_lses; /* One bit set for each Label Stack Entry in use */
+};
+
+static inline void dissector_set_mpls_lse(struct flow_dissector_key_mpls *mpls,
+                                         int lse_index)
+{
+       mpls->used_lses |= 1 << lse_index;
+}
+
 #define FLOW_DIS_TUN_OPTS_MAX 255
 /**
  * struct flow_dissector_key_enc_opts: