2 // Copyright (c) 2010-2017 Intel Corporation
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
8 // http://www.apache.org/licenses/LICENSE-2.0
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
17 #ifndef _MBUF_UTILS_H_
18 #define _MBUF_UTILS_H_
23 #include <rte_version.h>
24 #include <rte_ether.h>
26 static void init_mbuf_seg(struct rte_mbuf *mbuf)
28 #if RTE_VERSION >= RTE_VERSION_NUM(1,8,0,0)
31 mbuf->pkt.nb_segs = 1;
33 rte_mbuf_refcnt_set(mbuf, 1);
36 static uint16_t pkt_len_to_wire_size(uint16_t pkt_len)
38 return (pkt_len < 60? 60 : pkt_len) + ETHER_CRC_LEN + 20;
41 static uint16_t mbuf_wire_size(const struct rte_mbuf *mbuf)
43 uint16_t pkt_len = rte_pktmbuf_pkt_len(mbuf);
45 return pkt_len_to_wire_size(pkt_len);
48 static uint16_t mbuf_calc_padlen(const struct rte_mbuf *mbuf, void *pkt, struct ipv4_hdr *ipv4)
50 uint16_t pkt_len = rte_pktmbuf_pkt_len(mbuf);
51 uint16_t ip_offset = (uint8_t *)ipv4 - (uint8_t*)pkt;
52 uint16_t ip_total_len = rte_be_to_cpu_16(ipv4->total_length);
54 return pkt_len - ip_total_len - ip_offset;
57 #endif /* _MBUF_UTILS_H_ */