net/ngbe: fix debug logs
[dpdk.git] / app / test-pmd / cmdline_flow.c
index e0c79d5..c0644d6 100644 (file)
@@ -272,6 +272,10 @@ enum index {
        ITEM_META_DATA,
        ITEM_GRE_KEY,
        ITEM_GRE_KEY_VALUE,
+       ITEM_GRE_OPTION,
+       ITEM_GRE_OPTION_CHECKSUM,
+       ITEM_GRE_OPTION_KEY,
+       ITEM_GRE_OPTION_SEQUENCE,
        ITEM_GTP_PSC,
        ITEM_GTP_PSC_QFI,
        ITEM_GTP_PSC_PDU_T,
@@ -1060,6 +1064,7 @@ static const enum index next_item[] = {
        ITEM_ICMP6_ND_OPT_TLA_ETH,
        ITEM_META,
        ITEM_GRE_KEY,
+       ITEM_GRE_OPTION,
        ITEM_GTP_PSC,
        ITEM_PPPOES,
        ITEM_PPPOED,
@@ -1251,6 +1256,14 @@ static const enum index item_gre_key[] = {
        ZERO,
 };
 
+static const enum index item_gre_option[] = {
+       ITEM_GRE_OPTION_CHECKSUM,
+       ITEM_GRE_OPTION_KEY,
+       ITEM_GRE_OPTION_SEQUENCE,
+       ITEM_NEXT,
+       ZERO,
+};
+
 static const enum index item_gtp[] = {
        ITEM_GTP_FLAGS,
        ITEM_GTP_MSG_TYPE,
@@ -3562,6 +3575,38 @@ static const struct token token_list[] = {
                             item_param),
                .args = ARGS(ARG_ENTRY_HTON(rte_be32_t)),
        },
+       [ITEM_GRE_OPTION] = {
+               .name = "gre_option",
+               .help = "match GRE optional fields",
+               .priv = PRIV_ITEM(GRE_OPTION,
+                                 sizeof(struct rte_flow_item_gre_opt)),
+               .next = NEXT(item_gre_option),
+               .call = parse_vc,
+       },
+       [ITEM_GRE_OPTION_CHECKSUM] = {
+               .name = "checksum",
+               .help = "match GRE checksum",
+               .next = NEXT(item_gre_option, NEXT_ENTRY(COMMON_UNSIGNED),
+                            item_param),
+               .args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_gre_opt,
+                                            checksum_rsvd.checksum)),
+       },
+       [ITEM_GRE_OPTION_KEY] = {
+               .name = "key",
+               .help = "match GRE key",
+               .next = NEXT(item_gre_option, NEXT_ENTRY(COMMON_UNSIGNED),
+                            item_param),
+               .args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_gre_opt,
+                                            key.key)),
+       },
+       [ITEM_GRE_OPTION_SEQUENCE] = {
+               .name = "sequence",
+               .help = "match GRE sequence",
+               .next = NEXT(item_gre_option, NEXT_ENTRY(COMMON_UNSIGNED),
+                            item_param),
+               .args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_gre_opt,
+                                            sequence.sequence)),
+       },
        [ITEM_GTP_PSC] = {
                .name = "gtp_psc",
                .help = "match GTP extension header with type 0x85",
@@ -9463,6 +9508,33 @@ cmd_set_raw_parsed(const struct buffer *in)
                                ((const struct rte_flow_item_flex *)
                                item->spec)->length : 0;
                        break;
+               case RTE_FLOW_ITEM_TYPE_GRE_OPTION:
+                       size = 0;
+                       if (item->spec) {
+                               const struct rte_flow_item_gre_opt
+                                       *opt = item->spec;
+                               if (opt->checksum_rsvd.checksum) {
+                                       *total_size +=
+                                               sizeof(opt->checksum_rsvd);
+                                       rte_memcpy(data_tail - (*total_size),
+                                                  &opt->checksum_rsvd,
+                                                  sizeof(opt->checksum_rsvd));
+                               }
+                               if (opt->key.key) {
+                                       *total_size += sizeof(opt->key.key);
+                                       rte_memcpy(data_tail - (*total_size),
+                                                  &opt->key.key,
+                                                  sizeof(opt->key.key));
+                               }
+                               if (opt->sequence.sequence) {
+                                       *total_size += sizeof(opt->sequence.sequence);
+                                       rte_memcpy(data_tail - (*total_size),
+                                                  &opt->sequence.sequence,
+                                                  sizeof(opt->sequence.sequence));
+                               }
+                       }
+                       proto = 0x2F;
+                       break;
                default:
                        fprintf(stderr, "Error - Not supported item\n");
                        goto error;