Lines Matching refs:sa
88 rte_ipsec_sa_type(const struct rte_ipsec_sa *sa) in rte_ipsec_sa_type() argument
90 return sa->type; in rte_ipsec_sa_type()
160 rte_ipsec_sa_fini(struct rte_ipsec_sa *sa) in rte_ipsec_sa_fini() argument
162 memset(sa, 0, sa->size); in rte_ipsec_sa_fini()
254 esp_inb_init(struct rte_ipsec_sa *sa) in esp_inb_init() argument
257 sa->ctp.cipher.offset = sizeof(struct rte_esp_hdr) + sa->iv_len; in esp_inb_init()
258 sa->ctp.cipher.length = sa->icv_len + sa->ctp.cipher.offset; in esp_inb_init()
264 switch (sa->algo_type) { in esp_inb_init()
268 sa->ctp.auth.raw = sa->ctp.cipher.raw; in esp_inb_init()
271 sa->ctp.auth.offset = 0; in esp_inb_init()
272 sa->ctp.auth.length = sa->icv_len - sa->sqh_len; in esp_inb_init()
273 sa->cofs.ofs.cipher.tail = sa->sqh_len; in esp_inb_init()
277 sa->cofs.ofs.cipher.head = sa->ctp.cipher.offset - sa->ctp.auth.offset; in esp_inb_init()
284 esp_inb_tun_init(struct rte_ipsec_sa *sa, const struct rte_ipsec_sa_prm *prm) in esp_inb_tun_init() argument
286 sa->proto = prm->tun.next_proto; in esp_inb_tun_init()
287 esp_inb_init(sa); in esp_inb_tun_init()
294 esp_outb_init(struct rte_ipsec_sa *sa, uint32_t hlen, uint64_t sqn) in esp_outb_init() argument
298 sa->sqn.outb = sqn > 1 ? sqn : 1; in esp_outb_init()
300 algo_type = sa->algo_type; in esp_outb_init()
313 sa->ctp.cipher.offset = hlen + sizeof(struct rte_esp_hdr) + in esp_outb_init()
314 sa->iv_len; in esp_outb_init()
315 sa->ctp.cipher.length = 0; in esp_outb_init()
319 sa->ctp.cipher.offset = hlen + sizeof(struct rte_esp_hdr); in esp_outb_init()
320 sa->ctp.cipher.length = sa->iv_len; in esp_outb_init()
323 sa->ctp.cipher.offset = 0; in esp_outb_init()
324 sa->ctp.cipher.length = 0; in esp_outb_init()
336 sa->ctp.auth.raw = sa->ctp.cipher.raw; in esp_outb_init()
339 sa->ctp.auth.offset = hlen; in esp_outb_init()
340 sa->ctp.auth.length = sizeof(struct rte_esp_hdr) + in esp_outb_init()
341 sa->iv_len + sa->sqh_len; in esp_outb_init()
345 sa->cofs.ofs.cipher.head = sa->ctp.cipher.offset - sa->ctp.auth.offset; in esp_outb_init()
346 sa->cofs.ofs.cipher.tail = (sa->ctp.auth.offset + sa->ctp.auth.length) - in esp_outb_init()
347 (sa->ctp.cipher.offset + sa->ctp.cipher.length); in esp_outb_init()
354 esp_outb_tun_init(struct rte_ipsec_sa *sa, const struct rte_ipsec_sa_prm *prm) in esp_outb_tun_init() argument
356 sa->proto = prm->tun.next_proto; in esp_outb_tun_init()
357 sa->hdr_len = prm->tun.hdr_len; in esp_outb_tun_init()
358 sa->hdr_l3_off = prm->tun.hdr_l3_off; in esp_outb_tun_init()
360 memcpy(sa->hdr, prm->tun.hdr, prm->tun.hdr_len); in esp_outb_tun_init()
363 if (sa->type & RTE_IPSEC_SATP_NATT_ENABLE) { in esp_outb_tun_init()
365 &sa->hdr[prm->tun.hdr_len]; in esp_outb_tun_init()
366 sa->hdr_len += sizeof(struct rte_udp_hdr); in esp_outb_tun_init()
373 sa->tx_offload.val = rte_mbuf_tx_offload(sa->hdr_l3_off, in esp_outb_tun_init()
374 sa->hdr_len - sa->hdr_l3_off, 0, 0, 0, 0, 0); in esp_outb_tun_init()
376 esp_outb_init(sa, sa->hdr_len, prm->ipsec_xform.esn.value); in esp_outb_tun_init()
383 esp_sa_init(struct rte_ipsec_sa *sa, const struct rte_ipsec_sa_prm *prm, in esp_sa_init() argument
391 sa->tos_mask |= RTE_IPV4_HDR_ECN_MASK; in esp_sa_init()
394 sa->tos_mask |= RTE_IPV4_HDR_DSCP_MASK; in esp_sa_init()
400 sa->aad_len = sizeof(struct aead_gcm_aad); in esp_sa_init()
401 sa->icv_len = cxf->aead->digest_length; in esp_sa_init()
402 sa->iv_ofs = cxf->aead->iv.offset; in esp_sa_init()
403 sa->iv_len = sizeof(uint64_t); in esp_sa_init()
404 sa->pad_align = IPSEC_PAD_AES_GCM; in esp_sa_init()
405 sa->algo_type = ALGO_TYPE_AES_GCM; in esp_sa_init()
409 sa->aad_len = sizeof(struct aead_ccm_aad); in esp_sa_init()
410 sa->icv_len = cxf->aead->digest_length; in esp_sa_init()
411 sa->iv_ofs = cxf->aead->iv.offset; in esp_sa_init()
412 sa->iv_len = sizeof(uint64_t); in esp_sa_init()
413 sa->pad_align = IPSEC_PAD_AES_CCM; in esp_sa_init()
414 sa->algo_type = ALGO_TYPE_AES_CCM; in esp_sa_init()
418 sa->aad_len = sizeof(struct aead_chacha20_poly1305_aad); in esp_sa_init()
419 sa->icv_len = cxf->aead->digest_length; in esp_sa_init()
420 sa->iv_ofs = cxf->aead->iv.offset; in esp_sa_init()
421 sa->iv_len = sizeof(uint64_t); in esp_sa_init()
422 sa->pad_align = IPSEC_PAD_CHACHA20_POLY1305; in esp_sa_init()
423 sa->algo_type = ALGO_TYPE_CHACHA20_POLY1305; in esp_sa_init()
431 sa->pad_align = IPSEC_PAD_AES_GMAC; in esp_sa_init()
432 sa->iv_len = sizeof(uint64_t); in esp_sa_init()
433 sa->icv_len = cxf->auth->digest_length; in esp_sa_init()
434 sa->iv_ofs = cxf->auth->iv.offset; in esp_sa_init()
435 sa->algo_type = ALGO_TYPE_AES_GMAC; in esp_sa_init()
438 sa->icv_len = cxf->auth->digest_length; in esp_sa_init()
439 sa->iv_ofs = cxf->cipher->iv.offset; in esp_sa_init()
443 sa->pad_align = IPSEC_PAD_NULL; in esp_sa_init()
444 sa->iv_len = 0; in esp_sa_init()
445 sa->algo_type = ALGO_TYPE_NULL; in esp_sa_init()
449 sa->pad_align = IPSEC_PAD_AES_CBC; in esp_sa_init()
450 sa->iv_len = IPSEC_MAX_IV_SIZE; in esp_sa_init()
451 sa->algo_type = ALGO_TYPE_AES_CBC; in esp_sa_init()
456 sa->pad_align = IPSEC_PAD_AES_CTR; in esp_sa_init()
457 sa->iv_len = IPSEC_AES_CTR_IV_SIZE; in esp_sa_init()
458 sa->algo_type = ALGO_TYPE_AES_CTR; in esp_sa_init()
463 sa->pad_align = IPSEC_PAD_3DES_CBC; in esp_sa_init()
464 sa->iv_len = IPSEC_3DES_IV_SIZE; in esp_sa_init()
465 sa->algo_type = ALGO_TYPE_3DES_CBC; in esp_sa_init()
473 sa->sqh_len = IS_ESN(sa) ? sizeof(uint32_t) : 0; in esp_sa_init()
474 sa->udata = prm->userdata; in esp_sa_init()
475 sa->spi = rte_cpu_to_be_32(prm->ipsec_xform.spi); in esp_sa_init()
476 sa->salt = prm->ipsec_xform.salt; in esp_sa_init()
479 sa->tx_offload.msk = in esp_sa_init()
483 switch (sa->type & msk) { in esp_sa_init()
486 esp_inb_tun_init(sa, prm); in esp_sa_init()
489 esp_inb_init(sa); in esp_sa_init()
497 esp_outb_tun_init(sa, prm); in esp_sa_init()
502 esp_outb_init(sa, 0, prm->ipsec_xform.esn.value); in esp_sa_init()
513 fill_sa_replay(struct rte_ipsec_sa *sa, uint32_t wnd_sz, uint32_t nb_bucket, in fill_sa_replay() argument
516 sa->replay.win_sz = wnd_sz; in fill_sa_replay()
517 sa->replay.nb_bucket = nb_bucket; in fill_sa_replay()
518 sa->replay.bucket_index_mask = nb_bucket - 1; in fill_sa_replay()
519 sa->sqn.inb.rsn[0] = (struct replay_sqn *)(sa + 1); in fill_sa_replay()
520 sa->sqn.inb.rsn[0]->sqn = sqn; in fill_sa_replay()
521 if ((sa->type & RTE_IPSEC_SATP_SQN_MASK) == RTE_IPSEC_SATP_SQN_ATOM) { in fill_sa_replay()
522 sa->sqn.inb.rsn[1] = (struct replay_sqn *) in fill_sa_replay()
523 ((uintptr_t)sa->sqn.inb.rsn[0] + rsn_size(nb_bucket)); in fill_sa_replay()
524 sa->sqn.inb.rsn[1]->sqn = sqn; in fill_sa_replay()
549 rte_ipsec_sa_init(struct rte_ipsec_sa *sa, const struct rte_ipsec_sa_prm *prm, in rte_ipsec_sa_init() argument
557 if (sa == NULL || prm == NULL) in rte_ipsec_sa_init()
579 if (sa->type & RTE_IPSEC_SATP_NATT_ENABLE) in rte_ipsec_sa_init()
581 if (hlen > sizeof(sa->hdr)) in rte_ipsec_sa_init()
591 memset(sa, 0, sz); in rte_ipsec_sa_init()
592 sa->type = type; in rte_ipsec_sa_init()
593 sa->size = sz; in rte_ipsec_sa_init()
596 sa->sqn_mask = (prm->ipsec_xform.options.esn == 0) ? in rte_ipsec_sa_init()
599 rc = esp_sa_init(sa, prm, &cxf); in rte_ipsec_sa_init()
601 rte_ipsec_sa_fini(sa); in rte_ipsec_sa_init()
605 fill_sa_replay(sa, wsz, nb, prm->ipsec_xform.esn.value); in rte_ipsec_sa_init()
673 ss->sa->statistics.count += k; in pkt_flag_process()
674 ss->sa->statistics.bytes += bytes; in pkt_flag_process()
691 lksd_none_pkt_func_select(const struct rte_ipsec_sa *sa, in lksd_none_pkt_func_select() argument
700 switch (sa->type & msk) { in lksd_none_pkt_func_select()
713 pf->process = (sa->sqh_len != 0) ? in lksd_none_pkt_func_select()
718 pf->process = (sa->sqh_len != 0) ? in lksd_none_pkt_func_select()
729 cpu_crypto_pkt_func_select(const struct rte_ipsec_sa *sa, in cpu_crypto_pkt_func_select() argument
738 switch (sa->type & msk) { in cpu_crypto_pkt_func_select()
751 pf->process = (sa->sqh_len != 0) ? in cpu_crypto_pkt_func_select()
756 pf->process = (sa->sqh_len != 0) ? in cpu_crypto_pkt_func_select()
771 inline_crypto_pkt_func_select(const struct rte_ipsec_sa *sa, in inline_crypto_pkt_func_select() argument
780 switch (sa->type & msk) { in inline_crypto_pkt_func_select()
808 const struct rte_ipsec_sa *sa, struct rte_ipsec_sa_pkt_func *pf) in ipsec_sa_pkt_func_select() argument
817 rc = lksd_none_pkt_func_select(sa, pf); in ipsec_sa_pkt_func_select()
820 rc = inline_crypto_pkt_func_select(sa, pf); in ipsec_sa_pkt_func_select()
823 if ((sa->type & RTE_IPSEC_SATP_DIR_MASK) == in ipsec_sa_pkt_func_select()
834 rc = cpu_crypto_pkt_func_select(sa, pf); in ipsec_sa_pkt_func_select()