snip > > static inline int > > process_ipsec_ev_inbound(struct ipsec_ctx *ctx, struct route_table *rt, > > - struct rte_event *ev) > > + const struct eh_event_link_info *ev_link, struct rte_event *ev) > > { > > struct ipsec_sa *sa = NULL; > > struct rte_mbuf *pkt; > > @@ -340,7 +437,22 @@ process_ipsec_ev_inbound(struct ipsec_ctx *ctx, > > struct route_table *rt, > > goto drop_pkt_and_exit; > > } > > break; > > + case PKT_TYPE_IPSEC_IPV4: > > + case PKT_TYPE_IPSEC_IPV6: > > + rte_pktmbuf_adj(pkt, RTE_ETHER_HDR_LEN); > > + pkt_l3_len_set(pkt); > > One small question, in case free_pkts() happens inside pkt_l3_len_set(pkt), > can the pkt still be used in sad_lookup() below? > Should return value be added to pkt_l3_len_set() in case pkt free? > Hi, thank you for noticing this. Return value should be checked, I'll address this issue in v2.
> > + > > + sad_lookup(&ctx->sa_ctx->sad, &pkt, (void **)&sa, 1); > > + sa = ipsec_mask_saptr(sa); > > + if (unlikely(sa == NULL)) { > > + RTE_LOG_DP(DEBUG, IPSEC, "Cannot find sa\n"); > > + goto drop_pkt_and_exit; > > + } > > snip