ethdev: extend flow metadata
[dpdk.git] / app / test-pmd / cmdline_flow.c
index 55be271..085182b 100644 (file)
@@ -323,6 +323,9 @@ enum index {
        ACTION_SET_TAG_DATA,
        ACTION_SET_TAG_INDEX,
        ACTION_SET_TAG_MASK,
+       ACTION_SET_META,
+       ACTION_SET_META_DATA,
+       ACTION_SET_META_MASK,
 };
 
 /** Maximum size for pattern in struct rte_flow_item_raw. */
@@ -1083,6 +1086,7 @@ static const enum index next_action[] = {
        ACTION_RAW_ENCAP,
        ACTION_RAW_DECAP,
        ACTION_SET_TAG,
+       ACTION_SET_META,
        ZERO,
 };
 
@@ -1289,6 +1293,13 @@ static const enum index action_set_tag[] = {
        ZERO,
 };
 
+static const enum index action_set_meta[] = {
+       ACTION_SET_META_DATA,
+       ACTION_SET_META_MASK,
+       ACTION_NEXT,
+       ZERO,
+};
+
 static int parse_set_raw_encap_decap(struct context *, const struct token *,
                                     const char *, unsigned int,
                                     void *, unsigned int);
@@ -1353,6 +1364,10 @@ static int parse_vc_action_raw_encap_index(struct context *,
 static int parse_vc_action_raw_decap_index(struct context *,
                                           const struct token *, const char *,
                                           unsigned int, void *, unsigned int);
+static int parse_vc_action_set_meta(struct context *ctx,
+                                   const struct token *token, const char *str,
+                                   unsigned int len, void *buf,
+                                   unsigned int size);
 static int parse_destroy(struct context *, const struct token *,
                         const char *, unsigned int,
                         void *, unsigned int);
@@ -2469,8 +2484,8 @@ static const struct token token_list[] = {
                .name = "data",
                .help = "metadata value",
                .next = NEXT(item_meta, NEXT_ENTRY(UNSIGNED), item_param),
-               .args = ARGS(ARGS_ENTRY_MASK_HTON(struct rte_flow_item_meta,
-                                                 data, "\xff\xff\xff\xff")),
+               .args = ARGS(ARGS_ENTRY_MASK(struct rte_flow_item_meta,
+                                            data, "\xff\xff\xff\xff")),
        },
        [ITEM_GRE_KEY] = {
                .name = "gre_key",
@@ -2569,7 +2584,7 @@ static const struct token token_list[] = {
                .name = "data",
                .help = "tag value to match",
                .next = NEXT(item_tag, NEXT_ENTRY(UNSIGNED), item_param),
-               .args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_tag, data)),
+               .args = ARGS(ARGS_ENTRY(struct rte_flow_item_tag, data)),
        },
        [ITEM_TAG_INDEX] = {
                .name = "index",
@@ -3442,7 +3457,7 @@ static const struct token token_list[] = {
                .name = "data",
                .help = "tag value",
                .next = NEXT(action_set_tag, NEXT_ENTRY(UNSIGNED)),
-               .args = ARGS(ARGS_ENTRY_HTON
+               .args = ARGS(ARGS_ENTRY
                             (struct rte_flow_action_set_tag, data)),
                .call = parse_vc_conf,
        },
@@ -3450,10 +3465,34 @@ static const struct token token_list[] = {
                .name = "mask",
                .help = "mask for tag value",
                .next = NEXT(action_set_tag, NEXT_ENTRY(UNSIGNED)),
-               .args = ARGS(ARGS_ENTRY_HTON
+               .args = ARGS(ARGS_ENTRY
                             (struct rte_flow_action_set_tag, mask)),
                .call = parse_vc_conf,
        },
+       [ACTION_SET_META] = {
+               .name = "set_meta",
+               .help = "set metadata",
+               .priv = PRIV_ACTION(SET_META,
+                       sizeof(struct rte_flow_action_set_meta)),
+               .next = NEXT(action_set_meta),
+               .call = parse_vc_action_set_meta,
+       },
+       [ACTION_SET_META_DATA] = {
+               .name = "data",
+               .help = "metadata value",
+               .next = NEXT(action_set_meta, NEXT_ENTRY(UNSIGNED)),
+               .args = ARGS(ARGS_ENTRY
+                            (struct rte_flow_action_set_meta, data)),
+               .call = parse_vc_conf,
+       },
+       [ACTION_SET_META_MASK] = {
+               .name = "mask",
+               .help = "mask for metadata value",
+               .next = NEXT(action_set_meta, NEXT_ENTRY(UNSIGNED)),
+               .args = ARGS(ARGS_ENTRY
+                            (struct rte_flow_action_set_meta, mask)),
+               .call = parse_vc_conf,
+       },
 };
 
 /** Remove and return last entry from argument stack. */
@@ -4893,6 +4932,22 @@ parse_vc_action_raw_decap(struct context *ctx, const struct token *token,
        return ret;
 }
 
+static int
+parse_vc_action_set_meta(struct context *ctx, const struct token *token,
+                        const char *str, unsigned int len, void *buf,
+                        unsigned int size)
+{
+       int ret;
+
+       ret = parse_vc(ctx, token, str, len, buf, size);
+       if (ret < 0)
+               return ret;
+       ret = rte_flow_dynf_metadata_register();
+       if (ret < 0)
+               return -1;
+       return len;
+}
+
 /** Parse tokens for destroy command. */
 static int
 parse_destroy(struct context *ctx, const struct token *token,