[dpdk-users] Flow Director for IPv6, flex bytes

Cody Doucette doucette at bu.edu
Mon Jan 9 06:47:24 CET 2017


Does anyone have any examples of Flow Director being used with IPv6,
especially for an ixgbe NIC?

Or does anyone have any experience/knowledge that the driver may be buggy?

Cody

On Tue, Jan 3, 2017 at 3:21 PM, Cody Doucette <doucette at bu.edu> wrote:

> I'm trying to use Flow Director on an 82599 NIC to match the IPv6 proto
> and hop limit fields. I've been able to get something analogous working for
> IPv4, but changing the flow type to IPv6 breaks it.
>
> Does anyone have any pointers to working examples of Flow Director for
> IPv6 flows?
>
> My Flow Director configuration is:
>
> (It seems to be a driver requirement that we use RTE_ETH_RAW_PAYLOAD and
> RTE_ETH_FLOW_UNKNOWN below):
>
> .fdir_conf = {
>                 .mode = RTE_FDIR_MODE_PERFECT,
>                 .pballoc = RTE_FDIR_PBALLOC_64K,
>                 .status = RTE_FDIR_REPORT_STATUS_ALWAYS,
>                 .drop_queue = DROP_QUEUE,
>                 .mask = {
>                         .vlan_tci_mask = 0x0,
>                         .ipv4_mask = {
>                                 .src_ip = 0,
>                                 .dst_ip = 0,
>                         },
>                         .ipv6_mask = {
>                                 .src_ip = { 0, 0, 0, 0},
>                                 .dst_ip = { 0, 0, 0, 0},
>                         },
>                         .src_port_mask = 0,
>                         .dst_port_mask = 0,
>                         .mac_addr_byte_mask = 0,
>                         .tunnel_type_mask = 0,
>                         .tunnel_id_mask = 0,
>                 },
>                 .flex_conf = {
>                         .nb_payloads = 1,
>                         .nb_flexmasks = 1,
>                         .flex_set = {
>                                 [0] = {
>                                         .type = RTE_ETH_RAW_PAYLOAD,
>                                         .src_offset = {
>                                                 FDIR_FLEX_OFFSET,
>                                                 FDIR_FLEX_OFFSET + 1,
>                                         },
>                                 },
>                         },
>                         .flex_mask = {
>                                 [0] = {
>                                         .flow_type = RTE_ETH_FLOW_UNKNOWN,
>                                         .mask = {
>                                                 [0] = 0xFF,
>                                                 [1] = 0xFF,
>                                         },
>                                 },
>                         },
>                 },
> },
>
> And then this filter works for IPv4 packets:
>
>         struct rte_eth_fdir_filter filter = {
>                 .soft_id = soft_id,
>                 .input = {
>                         .flow_type = RTE_ETH_FLOW_IPV4,
>                         .flow_ext = {
>                                 .vlan_tci = 0,
>                                 .flexbytes = {
>                                         0x40,
>                                         0x01,
>                                 },
>                                 .is_vf = 0,
>                                 .dst_id = 0,
>                         },
>                 },
>                 .action = {
>                         .rx_queue = queue_id,
>                 },
>         };
>
> But this filter does not work for IPv6 packets (and neither does changing
> the flow type to anything else):
>
>         struct rte_eth_fdir_filter filter = {
>                 .soft_id = soft_id,
>                 .input = {
>                         .flow_type = RTE_ETH_FLOW_IPV6,
>                         .flow_ext = {
>                                 .vlan_tci = 0,
>                                 .flexbytes = {
>                                         0x3A,
>                                         0x55,
>                                 },
>                                 .is_vf = 0,
>                                 .dst_id = 0,
>                         },
>                 },
>                 .action = {
>                         .rx_queue = queue_id,
>                 },
>         };
>


More information about the users mailing list