app/testpmd: show new flow director modes
authorWenzhuo Lu <wenzhuo.lu@intel.com>
Mon, 26 Oct 2015 05:27:31 +0000 (13:27 +0800)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Wed, 28 Oct 2015 23:02:24 +0000 (00:02 +0100)
There're fdir mask and supported flow type in the output of the CLI,
show port fdir. But not every parameter has meaning for all the fdir
modes, and the supported flow type is meaningless for mac vlan and
tunnel modes. So, we output different thing for different mode.

Signed-off-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
app/test-pmd/config.c

index cf2aa6e..1ec6a77 100644 (file)
@@ -1829,18 +1829,28 @@ set_qmap(portid_t port_id, uint8_t is_rx, uint16_t queue_id, uint8_t map_value)
 static inline void
 print_fdir_mask(struct rte_eth_fdir_masks *mask)
 {
-       printf("\n    vlan_tci: 0x%04x, src_ipv4: 0x%08x, dst_ipv4: 0x%08x,"
-                     " src_port: 0x%04x, dst_port: 0x%04x",
-               mask->vlan_tci_mask, mask->ipv4_mask.src_ip,
-               mask->ipv4_mask.dst_ip,
-               mask->src_port_mask, mask->dst_port_mask);
-
-       printf("\n    src_ipv6: 0x%08x,0x%08x,0x%08x,0x%08x,"
-                    " dst_ipv6: 0x%08x,0x%08x,0x%08x,0x%08x",
-               mask->ipv6_mask.src_ip[0], mask->ipv6_mask.src_ip[1],
-               mask->ipv6_mask.src_ip[2], mask->ipv6_mask.src_ip[3],
-               mask->ipv6_mask.dst_ip[0], mask->ipv6_mask.dst_ip[1],
-               mask->ipv6_mask.dst_ip[2], mask->ipv6_mask.dst_ip[3]);
+       printf("\n    vlan_tci: 0x%04x, ", mask->vlan_tci_mask);
+
+       if (fdir_conf.mode == RTE_FDIR_MODE_PERFECT_MAC_VLAN)
+               printf("mac_addr: 0x%02x", mask->mac_addr_byte_mask);
+       else if (fdir_conf.mode == RTE_FDIR_MODE_PERFECT_TUNNEL)
+               printf("mac_addr: 0x%02x, tunnel_type: 0x%01x, tunnel_id: 0x%08x",
+                       mask->mac_addr_byte_mask, mask->tunnel_type_mask,
+                       mask->tunnel_id_mask);
+       else {
+               printf("src_ipv4: 0x%08x, dst_ipv4: 0x%08x,"
+                       " src_port: 0x%04x, dst_port: 0x%04x",
+                       mask->ipv4_mask.src_ip, mask->ipv4_mask.dst_ip,
+                       mask->src_port_mask, mask->dst_port_mask);
+
+               printf("\n    src_ipv6: 0x%08x,0x%08x,0x%08x,0x%08x,"
+                       " dst_ipv6: 0x%08x,0x%08x,0x%08x,0x%08x",
+                       mask->ipv6_mask.src_ip[0], mask->ipv6_mask.src_ip[1],
+                       mask->ipv6_mask.src_ip[2], mask->ipv6_mask.src_ip[3],
+                       mask->ipv6_mask.dst_ip[0], mask->ipv6_mask.dst_ip[1],
+                       mask->ipv6_mask.dst_ip[2], mask->ipv6_mask.dst_ip[3]);
+       }
+
        printf("\n");
 }
 
@@ -1966,12 +1976,19 @@ fdir_get_infos(portid_t port_id)
        printf("  MODE: ");
        if (fdir_info.mode == RTE_FDIR_MODE_PERFECT)
                printf("  PERFECT\n");
+       else if (fdir_info.mode == RTE_FDIR_MODE_PERFECT_MAC_VLAN)
+               printf("  PERFECT-MAC-VLAN\n");
+       else if (fdir_info.mode == RTE_FDIR_MODE_PERFECT_TUNNEL)
+               printf("  PERFECT-TUNNEL\n");
        else if (fdir_info.mode == RTE_FDIR_MODE_SIGNATURE)
                printf("  SIGNATURE\n");
        else
                printf("  DISABLE\n");
-       printf("  SUPPORTED FLOW TYPE: ");
-       print_fdir_flow_type(fdir_info.flow_types_mask[0]);
+       if (fdir_info.mode != RTE_FDIR_MODE_PERFECT_MAC_VLAN
+               && fdir_info.mode != RTE_FDIR_MODE_PERFECT_TUNNEL) {
+               printf("  SUPPORTED FLOW TYPE: ");
+               print_fdir_flow_type(fdir_info.flow_types_mask[0]);
+       }
        printf("  FLEX PAYLOAD INFO:\n");
        printf("  max_len:       %-10"PRIu32"  payload_limit: %-10"PRIu32"\n"
               "  payload_unit:  %-10"PRIu32"  payload_seg:   %-10"PRIu32"\n"