LCOV - code coverage report
Current view: top level - drivers/net/iavf - rte_pmd_iavf.h (source / functions) Hit Total Coverage
Test: Code coverage Lines: 0 1 0.0 %
Date: 2024-12-01 18:57:19 Functions: 0 0 -
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 2 0.0 %

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: BSD-3-Clause
       2                 :            :  * Copyright(c) 2019 Intel Corporation
       3                 :            :  */
       4                 :            : 
       5                 :            : #ifndef _RTE_PMD_IAVF_H_
       6                 :            : #define _RTE_PMD_IAVF_H_
       7                 :            : 
       8                 :            : /**
       9                 :            :  * @file rte_pmd_iavf.h
      10                 :            :  *
      11                 :            :  * iavf PMD specific functions.
      12                 :            :  *
      13                 :            :  * @b EXPERIMENTAL: this API may change, or be removed, without prior notiavf
      14                 :            :  *
      15                 :            :  */
      16                 :            : 
      17                 :            : #include <stdio.h>
      18                 :            : #include <rte_compat.h>
      19                 :            : #include <rte_mbuf.h>
      20                 :            : #include <rte_mbuf_dyn.h>
      21                 :            : 
      22                 :            : #ifdef __cplusplus
      23                 :            : extern "C" {
      24                 :            : #endif
      25                 :            : 
      26                 :            : /**
      27                 :            :  * The supported network flexible descriptor's extraction metadata format.
      28                 :            :  */
      29                 :            : union rte_pmd_ifd_proto_xtr_metadata {
      30                 :            :         uint32_t metadata;
      31                 :            : 
      32                 :            :         struct {
      33                 :            :                 uint16_t data0;
      34                 :            :                 uint16_t data1;
      35                 :            :         } raw;
      36                 :            : 
      37                 :            :         struct {
      38                 :            :                 uint16_t stag_vid:12,
      39                 :            :                          stag_dei:1,
      40                 :            :                          stag_pcp:3;
      41                 :            :                 uint16_t ctag_vid:12,
      42                 :            :                          ctag_dei:1,
      43                 :            :                          ctag_pcp:3;
      44                 :            :         } vlan;
      45                 :            : 
      46                 :            :         struct {
      47                 :            :                 uint16_t protocol:8,
      48                 :            :                          ttl:8;
      49                 :            :                 uint16_t tos:8,
      50                 :            :                          ihl:4,
      51                 :            :                          version:4;
      52                 :            :         } ipv4;
      53                 :            : 
      54                 :            :         struct {
      55                 :            :                 uint16_t hoplimit:8,
      56                 :            :                          nexthdr:8;
      57                 :            :                 uint16_t flowhi4:4,
      58                 :            :                          tc:8,
      59                 :            :                          version:4;
      60                 :            :         } ipv6;
      61                 :            : 
      62                 :            :         struct {
      63                 :            :                 uint16_t flowlo16;
      64                 :            :                 uint16_t flowhi4:4,
      65                 :            :                          tc:8,
      66                 :            :                          version:4;
      67                 :            :         } ipv6_flow;
      68                 :            : 
      69                 :            :         struct {
      70                 :            :                 uint16_t fin:1,
      71                 :            :                          syn:1,
      72                 :            :                          rst:1,
      73                 :            :                          psh:1,
      74                 :            :                          ack:1,
      75                 :            :                          urg:1,
      76                 :            :                          ece:1,
      77                 :            :                          cwr:1,
      78                 :            :                          res1:4,
      79                 :            :                          doff:4;
      80                 :            :                 uint16_t rsvd;
      81                 :            :         } tcp;
      82                 :            : 
      83                 :            :         uint32_t ip_ofs;
      84                 :            : };
      85                 :            : 
      86                 :            : /* Offset of mbuf dynamic field for flexible descriptor's extraction data */
      87                 :            : extern int rte_pmd_ifd_dynfield_proto_xtr_metadata_offs;
      88                 :            : 
      89                 :            : /* Mask of mbuf dynamic flags for flexible descriptor's extraction type */
      90                 :            : extern uint64_t rte_pmd_ifd_dynflag_proto_xtr_vlan_mask;
      91                 :            : extern uint64_t rte_pmd_ifd_dynflag_proto_xtr_ipv4_mask;
      92                 :            : extern uint64_t rte_pmd_ifd_dynflag_proto_xtr_ipv6_mask;
      93                 :            : extern uint64_t rte_pmd_ifd_dynflag_proto_xtr_ipv6_flow_mask;
      94                 :            : extern uint64_t rte_pmd_ifd_dynflag_proto_xtr_tcp_mask;
      95                 :            : extern uint64_t rte_pmd_ifd_dynflag_proto_xtr_ip_offset_mask;
      96                 :            : extern uint64_t rte_pmd_ifd_dynflag_proto_xtr_ipsec_crypto_said_mask;
      97                 :            : 
      98                 :            : /**
      99                 :            :  * The mbuf dynamic field pointer for flexible descriptor's extraction metadata.
     100                 :            :  */
     101                 :            : #define RTE_PMD_IFD_DYNF_PROTO_XTR_METADATA(m) \
     102                 :            :         RTE_MBUF_DYNFIELD((m), \
     103                 :            :                           rte_pmd_ifd_dynfield_proto_xtr_metadata_offs, \
     104                 :            :                           uint32_t *)
     105                 :            : 
     106                 :            : /**
     107                 :            :  * The mbuf dynamic flag for VLAN protocol extraction metadata, it is valid
     108                 :            :  * when dev_args 'proto_xtr' has 'vlan' specified.
     109                 :            :  */
     110                 :            : #define RTE_IAVF_PKT_RX_DYNF_PROTO_XTR_VLAN \
     111                 :            :         (rte_pmd_ifd_dynflag_proto_xtr_vlan_mask)
     112                 :            : 
     113                 :            : /**
     114                 :            :  * The mbuf dynamic flag for IPv4 protocol extraction metadata, it is valid
     115                 :            :  * when dev_args 'proto_xtr' has 'ipv4' specified.
     116                 :            :  */
     117                 :            : #define RTE_IAVF_PKT_RX_DYNF_PROTO_XTR_IPV4 \
     118                 :            :         (rte_pmd_ifd_dynflag_proto_xtr_ipv4_mask)
     119                 :            : 
     120                 :            : /**
     121                 :            :  * The mbuf dynamic flag for IPv6 protocol extraction metadata, it is valid
     122                 :            :  * when dev_args 'proto_xtr' has 'ipv6' specified.
     123                 :            :  */
     124                 :            : #define RTE_IAVF_PKT_RX_DYNF_PROTO_XTR_IPV6 \
     125                 :            :         (rte_pmd_ifd_dynflag_proto_xtr_ipv6_mask)
     126                 :            : 
     127                 :            : /**
     128                 :            :  * The mbuf dynamic flag for IPv6 with flow protocol extraction metadata, it is
     129                 :            :  * valid when dev_args 'proto_xtr' has 'ipv6_flow' specified.
     130                 :            :  */
     131                 :            : #define RTE_IAVF_PKT_RX_DYNF_PROTO_XTR_IPV6_FLOW \
     132                 :            :         (rte_pmd_ifd_dynflag_proto_xtr_ipv6_flow_mask)
     133                 :            : 
     134                 :            : /**
     135                 :            :  * The mbuf dynamic flag for TCP protocol extraction metadata, it is valid
     136                 :            :  * when dev_args 'proto_xtr' has 'tcp' specified.
     137                 :            :  */
     138                 :            : #define RTE_IAVF_PKT_RX_DYNF_PROTO_XTR_TCP \
     139                 :            :         (rte_pmd_ifd_dynflag_proto_xtr_tcp_mask)
     140                 :            : 
     141                 :            : /**
     142                 :            :  * The mbuf dynamic flag for IP_OFFSET extraction metadata, it is valid
     143                 :            :  * when dev_args 'proto_xtr' has 'ip_offset' specified.
     144                 :            :  */
     145                 :            : #define RTE_IAVF_PKT_RX_DYNF_PROTO_XTR_IP_OFFSET \
     146                 :            :         (rte_pmd_ifd_dynflag_proto_xtr_ip_offset_mask)
     147                 :            : 
     148                 :            : /**
     149                 :            :  * Check if mbuf dynamic field for flexible descriptor's extraction metadata
     150                 :            :  * is registered.
     151                 :            :  *
     152                 :            :  * @return
     153                 :            :  *   True if registered, false otherwise.
     154                 :            :  */
     155                 :            : __rte_experimental
     156                 :            : static __rte_always_inline int
     157                 :            : rte_pmd_ifd_dynf_proto_xtr_metadata_avail(void)
     158                 :            : {
     159         [ #  # ]:          0 :         return rte_pmd_ifd_dynfield_proto_xtr_metadata_offs != -1;
     160                 :            : }
     161                 :            : 
     162                 :            : /**
     163                 :            :  * Get the mbuf dynamic field for flexible descriptor's extraction metadata.
     164                 :            :  *
     165                 :            :  * @param m
     166                 :            :  *    The pointer to the mbuf.
     167                 :            :  * @return
     168                 :            :  *   The saved protocol extraction metadata.
     169                 :            :  */
     170                 :            : __rte_experimental
     171                 :            : static __rte_always_inline uint32_t
     172                 :            : rte_pmd_ifd_dynf_proto_xtr_metadata_get(struct rte_mbuf *m)
     173                 :            : {
     174                 :            :         return *RTE_PMD_IFD_DYNF_PROTO_XTR_METADATA(m);
     175                 :            : }
     176                 :            : 
     177                 :            : /**
     178                 :            :  * Dump the mbuf dynamic field for flexible descriptor's extraction metadata.
     179                 :            :  *
     180                 :            :  * @param m
     181                 :            :  *    The pointer to the mbuf.
     182                 :            :  */
     183                 :            : __rte_experimental
     184                 :            : static inline void
     185                 :            : rte_pmd_ifd_dump_proto_xtr_metadata(struct rte_mbuf *m)
     186                 :            : {
     187                 :            :         union rte_pmd_ifd_proto_xtr_metadata data;
     188                 :            : 
     189                 :            :         if (!rte_pmd_ifd_dynf_proto_xtr_metadata_avail())
     190                 :            :                 return;
     191                 :            : 
     192                 :            :         data.metadata = rte_pmd_ifd_dynf_proto_xtr_metadata_get(m);
     193                 :            : 
     194                 :            :         if (m->ol_flags & RTE_IAVF_PKT_RX_DYNF_PROTO_XTR_VLAN)
     195                 :            :                 printf(" - Flexible descriptor's Metadata: [0x%04x:0x%04x],"
     196                 :            :                        "vlan,stag=%u:%u:%u,ctag=%u:%u:%u",
     197                 :            :                        data.raw.data0, data.raw.data1,
     198                 :            :                        data.vlan.stag_pcp,
     199                 :            :                        data.vlan.stag_dei,
     200                 :            :                        data.vlan.stag_vid,
     201                 :            :                        data.vlan.ctag_pcp,
     202                 :            :                        data.vlan.ctag_dei,
     203                 :            :                        data.vlan.ctag_vid);
     204                 :            :         else if (m->ol_flags & RTE_IAVF_PKT_RX_DYNF_PROTO_XTR_IPV4)
     205                 :            :                 printf(" - Flexible descriptor's Metadata: [0x%04x:0x%04x],"
     206                 :            :                        "ipv4,ver=%u,hdrlen=%u,tos=%u,ttl=%u,proto=%u",
     207                 :            :                        data.raw.data0, data.raw.data1,
     208                 :            :                        data.ipv4.version,
     209                 :            :                        data.ipv4.ihl,
     210                 :            :                        data.ipv4.tos,
     211                 :            :                        data.ipv4.ttl,
     212                 :            :                        data.ipv4.protocol);
     213                 :            :         else if (m->ol_flags & RTE_IAVF_PKT_RX_DYNF_PROTO_XTR_IPV6)
     214                 :            :                 printf(" - Flexible descriptor's Metadata: [0x%04x:0x%04x],"
     215                 :            :                        "ipv6,ver=%u,tc=%u,flow_hi4=0x%x,nexthdr=%u,hoplimit=%u",
     216                 :            :                        data.raw.data0, data.raw.data1,
     217                 :            :                        data.ipv6.version,
     218                 :            :                        data.ipv6.tc,
     219                 :            :                        data.ipv6.flowhi4,
     220                 :            :                        data.ipv6.nexthdr,
     221                 :            :                        data.ipv6.hoplimit);
     222                 :            :         else if (m->ol_flags & RTE_IAVF_PKT_RX_DYNF_PROTO_XTR_IPV6_FLOW)
     223                 :            :                 printf(" - Flexible descriptor's Metadata: [0x%04x:0x%04x],"
     224                 :            :                        "ipv6_flow,ver=%u,tc=%u,flow=0x%x%04x",
     225                 :            :                        data.raw.data0, data.raw.data1,
     226                 :            :                        data.ipv6_flow.version,
     227                 :            :                        data.ipv6_flow.tc,
     228                 :            :                        data.ipv6_flow.flowhi4,
     229                 :            :                        data.ipv6_flow.flowlo16);
     230                 :            :         else if (m->ol_flags & RTE_IAVF_PKT_RX_DYNF_PROTO_XTR_TCP)
     231                 :            :                 printf(" - Flexible descriptor's Metadata: [0x%04x:0x%04x],"
     232                 :            :                        "tcp,doff=%u,flags=%s%s%s%s%s%s%s%s",
     233                 :            :                        data.raw.data0, data.raw.data1,
     234                 :            :                        data.tcp.doff,
     235                 :            :                        data.tcp.cwr ? "C" : "",
     236                 :            :                        data.tcp.ece ? "E" : "",
     237                 :            :                        data.tcp.urg ? "U" : "",
     238                 :            :                        data.tcp.ack ? "A" : "",
     239                 :            :                        data.tcp.psh ? "P" : "",
     240                 :            :                        data.tcp.rst ? "R" : "",
     241                 :            :                        data.tcp.syn ? "S" : "",
     242                 :            :                        data.tcp.fin ? "F" : "");
     243                 :            :         else if (m->ol_flags & RTE_IAVF_PKT_RX_DYNF_PROTO_XTR_IP_OFFSET)
     244                 :            :                 printf(" - Flexible descriptor's Extraction: ip_offset=%u",
     245                 :            :                        data.ip_ofs);
     246                 :            : }
     247                 :            : 
     248                 :            : #ifdef __cplusplus
     249                 :            : }
     250                 :            : #endif
     251                 :            : 
     252                 :            : #endif /* _RTE_PMD_IAVF_H_ */

Generated by: LCOV version 1.14