Branch data Line data Source code
1 : : /* SPDX-License-Identifier: BSD-3-Clause 2 : : * Copyright 2016 6WIND S.A. 3 : : */ 4 : : 5 : : #include <stdint.h> 6 : : 7 : : #include <rte_mbuf.h> 8 : : #include <rte_mbuf_ptype.h> 9 : : 10 : : /* get the name of the l2 packet type */ 11 : 0 : const char *rte_get_ptype_l2_name(uint32_t ptype) 12 : : { 13 [ # # # # : 0 : switch (ptype & RTE_PTYPE_L2_MASK) { # # # # # # # ] 14 : : case RTE_PTYPE_L2_ETHER: return "L2_ETHER"; 15 : 0 : case RTE_PTYPE_L2_ETHER_TIMESYNC: return "L2_ETHER_TIMESYNC"; 16 : 0 : case RTE_PTYPE_L2_ETHER_ARP: return "L2_ETHER_ARP"; 17 : 0 : case RTE_PTYPE_L2_ETHER_LLDP: return "L2_ETHER_LLDP"; 18 : 0 : case RTE_PTYPE_L2_ETHER_NSH: return "L2_ETHER_NSH"; 19 : 0 : case RTE_PTYPE_L2_ETHER_VLAN: return "L2_ETHER_VLAN"; 20 : 0 : case RTE_PTYPE_L2_ETHER_QINQ: return "L2_ETHER_QINQ"; 21 : 0 : case RTE_PTYPE_L2_ETHER_PPPOE: return "L2_ETHER_PPPOE"; 22 : 0 : case RTE_PTYPE_L2_ETHER_FCOE: return "L2_ETHER_FCOE"; 23 : 0 : case RTE_PTYPE_L2_ETHER_MPLS: return "L2_ETHER_MPLS"; 24 : 0 : default: return "L2_UNKNOWN"; 25 : : } 26 : : } 27 : : 28 : : /* get the name of the l3 packet type */ 29 : 0 : const char *rte_get_ptype_l3_name(uint32_t ptype) 30 : : { 31 [ # # # # : 0 : switch (ptype & RTE_PTYPE_L3_MASK) { # # # ] 32 : : case RTE_PTYPE_L3_IPV4: return "L3_IPV4"; 33 : 0 : case RTE_PTYPE_L3_IPV4_EXT: return "L3_IPV4_EXT"; 34 : 0 : case RTE_PTYPE_L3_IPV6: return "L3_IPV6"; 35 : 0 : case RTE_PTYPE_L3_IPV4_EXT_UNKNOWN: return "L3_IPV4_EXT_UNKNOWN"; 36 : 0 : case RTE_PTYPE_L3_IPV6_EXT: return "L3_IPV6_EXT"; 37 : 0 : case RTE_PTYPE_L3_IPV6_EXT_UNKNOWN: return "L3_IPV6_EXT_UNKNOWN"; 38 : 0 : default: return "L3_UNKNOWN"; 39 : : } 40 : : } 41 : : 42 : : /* get the name of the l4 packet type */ 43 : 0 : const char *rte_get_ptype_l4_name(uint32_t ptype) 44 : : { 45 [ # # # # : 0 : switch (ptype & RTE_PTYPE_L4_MASK) { # # # # ] 46 : : case RTE_PTYPE_L4_TCP: return "L4_TCP"; 47 : 0 : case RTE_PTYPE_L4_UDP: return "L4_UDP"; 48 : 0 : case RTE_PTYPE_L4_FRAG: return "L4_FRAG"; 49 : 0 : case RTE_PTYPE_L4_SCTP: return "L4_SCTP"; 50 : 0 : case RTE_PTYPE_L4_ICMP: return "L4_ICMP"; 51 : 0 : case RTE_PTYPE_L4_NONFRAG: return "L4_NONFRAG"; 52 : 0 : case RTE_PTYPE_L4_IGMP: return "L4_IGMP"; 53 : 0 : default: return "L4_UNKNOWN"; 54 : : } 55 : : } 56 : : 57 : : /* get the name of the tunnel packet type */ 58 : 0 : const char *rte_get_ptype_tunnel_name(uint32_t ptype) 59 : : { 60 [ # # # # : 0 : switch (ptype & RTE_PTYPE_TUNNEL_MASK) { # # # # # # # # # # ] 61 : : case RTE_PTYPE_TUNNEL_IP: return "TUNNEL_IP"; 62 : 0 : case RTE_PTYPE_TUNNEL_GRE: return "TUNNEL_GRE"; 63 : 0 : case RTE_PTYPE_TUNNEL_VXLAN: return "TUNNEL_VXLAN"; 64 : 0 : case RTE_PTYPE_TUNNEL_NVGRE: return "TUNNEL_NVGRE"; 65 : 0 : case RTE_PTYPE_TUNNEL_GENEVE: return "TUNNEL_GENEVE"; 66 : 0 : case RTE_PTYPE_TUNNEL_GRENAT: return "TUNNEL_GRENAT"; 67 : 0 : case RTE_PTYPE_TUNNEL_GTPC: return "TUNNEL_GTPC"; 68 : 0 : case RTE_PTYPE_TUNNEL_GTPU: return "TUNNEL_GTPU"; 69 : 0 : case RTE_PTYPE_TUNNEL_ESP: return "TUNNEL_ESP"; 70 : 0 : case RTE_PTYPE_TUNNEL_L2TP: return "TUNNEL_L2TP"; 71 : 0 : case RTE_PTYPE_TUNNEL_VXLAN_GPE: return "TUNNEL_VXLAN_GPE"; 72 : 0 : case RTE_PTYPE_TUNNEL_MPLS_IN_UDP: return "TUNNEL_MPLS_IN_UDP"; 73 : 0 : case RTE_PTYPE_TUNNEL_MPLS_IN_GRE: return "TUNNEL_MPLS_IN_GRE"; 74 : 0 : default: return "TUNNEL_UNKNOWN"; 75 : : } 76 : : } 77 : : 78 : : /* get the name of the inner_l2 packet type */ 79 : 0 : const char *rte_get_ptype_inner_l2_name(uint32_t ptype) 80 : : { 81 [ # # # # ]: 0 : switch (ptype & RTE_PTYPE_INNER_L2_MASK) { 82 : : case RTE_PTYPE_INNER_L2_ETHER: return "INNER_L2_ETHER"; 83 : 0 : case RTE_PTYPE_INNER_L2_ETHER_VLAN: return "INNER_L2_ETHER_VLAN"; 84 : 0 : case RTE_PTYPE_INNER_L2_ETHER_QINQ: return "INNER_L2_ETHER_QINQ"; 85 : 0 : default: return "INNER_L2_UNKNOWN"; 86 : : } 87 : : } 88 : : 89 : : /* get the name of the inner_l3 packet type */ 90 : 0 : const char *rte_get_ptype_inner_l3_name(uint32_t ptype) 91 : : { 92 [ # # # # : 0 : switch (ptype & RTE_PTYPE_INNER_L3_MASK) { # # # ] 93 : : case RTE_PTYPE_INNER_L3_IPV4: return "INNER_L3_IPV4"; 94 : 0 : case RTE_PTYPE_INNER_L3_IPV4_EXT: return "INNER_L3_IPV4_EXT"; 95 : 0 : case RTE_PTYPE_INNER_L3_IPV6: return "INNER_L3_IPV6"; 96 : 0 : case RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN: 97 : 0 : return "INNER_L3_IPV4_EXT_UNKNOWN"; 98 : 0 : case RTE_PTYPE_INNER_L3_IPV6_EXT: return "INNER_L3_IPV6_EXT"; 99 : 0 : case RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN: 100 : 0 : return "INNER_L3_IPV6_EXT_UNKNOWN"; 101 : 0 : default: return "INNER_L3_UNKNOWN"; 102 : : } 103 : : } 104 : : 105 : : /* get the name of the inner_l4 packet type */ 106 : 0 : const char *rte_get_ptype_inner_l4_name(uint32_t ptype) 107 : : { 108 [ # # # # : 0 : switch (ptype & RTE_PTYPE_INNER_L4_MASK) { # # # ] 109 : : case RTE_PTYPE_INNER_L4_TCP: return "INNER_L4_TCP"; 110 : 0 : case RTE_PTYPE_INNER_L4_UDP: return "INNER_L4_UDP"; 111 : 0 : case RTE_PTYPE_INNER_L4_FRAG: return "INNER_L4_FRAG"; 112 : 0 : case RTE_PTYPE_INNER_L4_SCTP: return "INNER_L4_SCTP"; 113 : 0 : case RTE_PTYPE_INNER_L4_ICMP: return "INNER_L4_ICMP"; 114 : 0 : case RTE_PTYPE_INNER_L4_NONFRAG: return "INNER_L4_NONFRAG"; 115 : 0 : default: return "INNER_L4_UNKNOWN"; 116 : : } 117 : : } 118 : : 119 : : /* write the packet type name into the buffer */ 120 : 0 : int rte_get_ptype_name(uint32_t ptype, char *buf, size_t buflen) 121 : : { 122 : : int ret; 123 : : 124 [ # # ]: 0 : if (buflen == 0) 125 : : return -1; 126 : : 127 : 0 : buf[0] = '\0'; 128 [ # # ]: 0 : if ((ptype & RTE_PTYPE_ALL_MASK) == RTE_PTYPE_UNKNOWN) { 129 : : ret = snprintf(buf, buflen, "UNKNOWN"); 130 [ # # ]: 0 : if (ret < 0) 131 : : return -1; 132 [ # # ]: 0 : if ((size_t)ret >= buflen) 133 : : return -1; 134 : 0 : return 0; 135 : : } 136 : : 137 [ # # ]: 0 : if ((ptype & RTE_PTYPE_L2_MASK) != 0) { 138 : 0 : ret = snprintf(buf, buflen, "%s ", 139 : : rte_get_ptype_l2_name(ptype)); 140 [ # # ]: 0 : if (ret < 0) 141 : : return -1; 142 [ # # ]: 0 : if ((size_t)ret >= buflen) 143 : : return -1; 144 : 0 : buf += ret; 145 : 0 : buflen -= ret; 146 : : } 147 [ # # ]: 0 : if ((ptype & RTE_PTYPE_L3_MASK) != 0) { 148 : 0 : ret = snprintf(buf, buflen, "%s ", 149 : : rte_get_ptype_l3_name(ptype)); 150 [ # # ]: 0 : if (ret < 0) 151 : : return -1; 152 [ # # ]: 0 : if ((size_t)ret >= buflen) 153 : : return -1; 154 : 0 : buf += ret; 155 : 0 : buflen -= ret; 156 : : } 157 [ # # ]: 0 : if ((ptype & RTE_PTYPE_L4_MASK) != 0) { 158 : 0 : ret = snprintf(buf, buflen, "%s ", 159 : : rte_get_ptype_l4_name(ptype)); 160 [ # # ]: 0 : if (ret < 0) 161 : : return -1; 162 [ # # ]: 0 : if ((size_t)ret >= buflen) 163 : : return -1; 164 : 0 : buf += ret; 165 : 0 : buflen -= ret; 166 : : } 167 [ # # ]: 0 : if ((ptype & RTE_PTYPE_TUNNEL_MASK) != 0) { 168 : 0 : ret = snprintf(buf, buflen, "%s ", 169 : : rte_get_ptype_tunnel_name(ptype)); 170 [ # # ]: 0 : if (ret < 0) 171 : : return -1; 172 [ # # ]: 0 : if ((size_t)ret >= buflen) 173 : : return -1; 174 : 0 : buf += ret; 175 : 0 : buflen -= ret; 176 : : } 177 [ # # ]: 0 : if ((ptype & RTE_PTYPE_INNER_L2_MASK) != 0) { 178 : 0 : ret = snprintf(buf, buflen, "%s ", 179 : : rte_get_ptype_inner_l2_name(ptype)); 180 [ # # ]: 0 : if (ret < 0) 181 : : return -1; 182 [ # # ]: 0 : if ((size_t)ret >= buflen) 183 : : return -1; 184 : 0 : buf += ret; 185 : 0 : buflen -= ret; 186 : : } 187 [ # # ]: 0 : if ((ptype & RTE_PTYPE_INNER_L3_MASK) != 0) { 188 : 0 : ret = snprintf(buf, buflen, "%s ", 189 : : rte_get_ptype_inner_l3_name(ptype)); 190 [ # # ]: 0 : if (ret < 0) 191 : : return -1; 192 [ # # ]: 0 : if ((size_t)ret >= buflen) 193 : : return -1; 194 : 0 : buf += ret; 195 : 0 : buflen -= ret; 196 : : } 197 [ # # ]: 0 : if ((ptype & RTE_PTYPE_INNER_L4_MASK) != 0) { 198 : 0 : ret = snprintf(buf, buflen, "%s ", 199 : : rte_get_ptype_inner_l4_name(ptype)); 200 [ # # ]: 0 : if (ret < 0) 201 : : return -1; 202 [ # # ]: 0 : if ((size_t)ret >= buflen) 203 : 0 : return -1; 204 : : buf += ret; 205 : : buflen -= ret; 206 : : } 207 : : 208 : : return 0; 209 : : }