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