> > > >> <snip> > >> + > >> +static int > >> +ixgbe_crypto_update_mb(void *device __rte_unused, > >> + struct rte_security_session *session, > >> + struct rte_mbuf *m, void *params __rte_unused) > >> +{ > >> + struct ixgbe_crypto_session *ic_session = > >> + get_sec_session_private_data(session); > >> + if (ic_session->op == IXGBE_OP_AUTHENTICATED_ENCRYPTION) { > >> + struct ixgbe_crypto_tx_desc_md *mdata = > >> + (struct ixgbe_crypto_tx_desc_md *)&m->udata64; > >> + mdata->enc = 1; > >> + mdata->sa_idx = ic_session->sa_index; > >> + mdata->pad_len = *rte_pktmbuf_mtod_offset(m, > >> + uint8_t *, rte_pktmbuf_pkt_len(m) - 18) + 18; > > Could you explain what pad_len supposed to contain? > > Also what is a magical constant '18'? > > Could you create some macro if needed? > I added an explanation in the code, we read the payload padding size > that is stored at the len-18 bytes and add 18 bytes, 2 for ESP trailer > and 16 for ICV.
Ok, can we at least have a macros for all these constants? Another question: you do use pkt_len() here - does it mean that multi-segment packets are not supported by ixgbe-ipsec? Konstantin