At 2022-07-25 23:42:06, "Stephen Hemminger" <step...@networkplumber.org> wrote:
On Sun, 24 Jul 2022 16:10:03 +0800
Huichao Cai <chcch...@163.com> wrote:

+
+       /*
+        * Formal parameter checking.
+        */
+       if (unlikely(pkt_in == NULL) || unlikely(pkts_out == NULL) ||
+           unlikely(nb_pkts_out == 0) || unlikely(pool_direct == NULL) ||
+           unlikely(mtu_size < RTE_ETHER_MIN_MTU))
+               return -EINVAL;
+
+       in_hdr = rte_pktmbuf_mtod(pkt_in, struct rte_ipv4_hdr *);
+       header_len = (in_hdr->version_ihl & RTE_IPV4_HDR_IHL_MASK) *
+           RTE_IPV4_IHL_MULTIPLIER;
+
+       /* Check IP header length */
+       if (unlikely(pkt_in->data_len < header_len) ||
+           unlikely(mtu_size < header_len))
+               return -EINVAL;
+

My suspicions are all this input parameter checking probably costs more
 >than any performance gain of having a non-segmented fast path.

I think checks are not that expensive.
My guess - actual copying will be the main cycles eater here.
Though if percentage of packets that need to be fragmented is tiny,
might be it is still worth it.
Though yes, I still think better would be not to use MBUF_FAST_FREE at all, but we are where we are.


These checks are consistent with the rte_ipv4_fragment_packet function.
I think these have been tested for performance.If these checks do affect performance,
perhaps the legitimacy of the variable is better guaranteed by the caller

Reply via email to