Lines Matching defs:ipsec

164 ipsec_sa_get(struct rte_swx_ipsec *ipsec, uint32_t sa_id)
166 struct ipsec_sa *sadb = (struct ipsec_sa *)ipsec->memory;
168 return &sadb[sa_id & (ipsec->n_sa_max - 1)];
196 struct rte_swx_ipsec *ipsec = (struct rte_swx_ipsec *)te->data;
198 if (!strncmp(name, ipsec->name, sizeof(ipsec->name))) {
200 return ipsec;
209 ipsec_register(struct rte_swx_ipsec *ipsec)
221 if (!strncmp(ipsec->name, elem->name, sizeof(ipsec->name))) {
233 te->data = (void *)ipsec;
240 ipsec_unregister(struct rte_swx_ipsec *ipsec)
250 if (te->data == (void *)ipsec) {
262 ipsec_session_free(struct rte_swx_ipsec *ipsec, struct rte_ipsec_session *s);
265 rte_swx_ipsec_free(struct rte_swx_ipsec *ipsec)
269 if (!ipsec)
273 if (ipsec->registered)
274 ipsec_unregister(ipsec);
277 for (i = 0; i < ipsec->n_sa_max; i++) {
278 struct ipsec_sa *sa = ipsec_sa_get(ipsec, i);
284 ipsec_session_free(ipsec, &sa->s);
288 rte_mempool_free(ipsec->mp_session);
291 env_free(ipsec, ipsec->total_size);
301 struct rte_swx_ipsec *ipsec = NULL;
357 ipsec = env_calloc(total_size, RTE_CACHE_LINE_SIZE, numa_node);
358 if (!ipsec) {
364 strcpy(ipsec->name, name);
365 ipsec->ring_in = ring_in;
366 ipsec->ring_out = ring_out;
367 ipsec->dev_id = (uint8_t)dev_id;
368 ipsec->qp_id = params->crypto_dev_queue_pair_id;
369 memcpy(&ipsec->bsz, &params->bsz, sizeof(struct rte_swx_ipsec_burst_size));
370 ipsec->n_sa_max = n_sa_max;
372 ipsec->crypto_wr_threshold = params->bsz.crypto_wr * 3 / 4;
374 ipsec->sa_free_id = (uint32_t *)&ipsec->memory[sa_free_id_offset];
376 ipsec->sa_free_id[i] = n_sa_max - 1 - i;
377 ipsec->n_sa_free_id = n_sa_max;
379 ipsec->total_size = total_size;
385 ipsec->mp_session = rte_cryptodev_sym_session_pool_create(resource_name,
391 if (!ipsec->mp_session) {
397 status = ipsec_register(ipsec);
401 ipsec->registered = 1;
403 *ipsec_out = ipsec;
407 rte_swx_ipsec_free(ipsec);
412 ipsec_sa_group(struct rte_swx_ipsec *ipsec, int n_pkts)
418 sa = ipsec->in.sa[0];
420 g = &ipsec->in.groups[0];
422 g->m = &ipsec->in.pkts[0];
427 struct ipsec_sa *sa_new = ipsec->in.sa[i];
441 g->m = &ipsec->in.pkts[i];
453 ipsec_crypto_enqueue(struct rte_swx_ipsec *ipsec, uint16_t n_cops)
455 struct rte_crypto_op **dst0 = ipsec->in.cops, **dst;
456 struct rte_crypto_op **src = ipsec->in.group_cops;
458 uint32_t n_pkts_crypto = ipsec->n_pkts_crypto;
459 uint32_t n_dst = ipsec->in.n_cops;
460 uint32_t n_dst_max = ipsec->bsz.crypto_wr;
470 if (!n_dst && n_src >= ipsec->crypto_wr_threshold) {
473 n_ok = rte_cryptodev_enqueue_burst(ipsec->dev_id, ipsec->qp_id, src, n_src);
474 ipsec->n_pkts_crypto = n_pkts_crypto + n_ok;
497 n_ok = rte_cryptodev_enqueue_burst(ipsec->dev_id, ipsec->qp_id, dst0, n_dst_max);
513 ipsec->n_pkts_crypto = n_pkts_crypto;
521 ipsec->in.n_cops = n_dst;
554 rte_swx_ipsec_pre_crypto(struct rte_swx_ipsec *ipsec)
559 n_pkts = rte_ring_sc_dequeue_burst(ipsec->ring_in,
560 (void **)ipsec->in.pkts,
561 ipsec->bsz.ring_rd,
568 struct rte_mbuf *m = ipsec->in.pkts[i];
591 ipsec->in.sa[i] = ipsec_sa_get(ipsec, sa_id);
595 n_groups = ipsec_sa_group(ipsec, n_pkts);
599 struct rte_ipsec_group *g = &ipsec->in.groups[i];
611 ipsec->in.group_cops[j] = &priv->cop;
614 n_pkts_ok = rte_ipsec_pkt_crypto_prepare(s, g->m, ipsec->in.group_cops, g->cnt);
623 ipsec_crypto_enqueue(ipsec, n_pkts_ok);
628 ipsec_ring_enqueue(struct rte_swx_ipsec *ipsec, struct rte_ipsec_group *g, uint32_t n_pkts)
630 struct rte_mbuf **dst0 = ipsec->out.pkts, **dst;
633 uint32_t n_dst = ipsec->out.n_pkts;
634 uint32_t n_dst_max = ipsec->bsz.ring_wr;
652 n_ok = rte_ring_sp_enqueue_burst(ipsec->ring_out, (void **)dst0, n_dst_max, NULL);
672 ipsec->out.n_pkts = n_dst;
676 rte_swx_ipsec_post_crypto(struct rte_swx_ipsec *ipsec)
678 uint32_t n_pkts_crypto = ipsec->n_pkts_crypto, n_pkts, ng, i;
684 n_pkts = rte_cryptodev_dequeue_burst(ipsec->dev_id,
685 ipsec->qp_id,
686 ipsec->out.cops,
687 ipsec->bsz.crypto_rd);
691 ipsec->n_pkts_crypto = n_pkts_crypto - n_pkts;
694 ng = rte_ipsec_pkt_crypto_group((const struct rte_crypto_op **)(uintptr_t)ipsec->out.cops,
695 ipsec->out.group_pkts,
696 ipsec->out.groups,
703 struct rte_ipsec_group *g = &ipsec->out.groups[i];
717 ipsec_ring_enqueue(ipsec, g, n_pkts_ok);
722 rte_swx_ipsec_run(struct rte_swx_ipsec *ipsec)
724 rte_swx_ipsec_pre_crypto(ipsec);
725 rte_swx_ipsec_post_crypto(ipsec);
1133 rte_swx_ipsec_sa_read(struct rte_swx_ipsec *ipsec __rte_unused,
1656 ipsec_session_create(struct rte_swx_ipsec *ipsec,
1706 crypto_session = rte_cryptodev_sym_session_create(ipsec->dev_id,
1708 ipsec->mp_session);
1718 s->crypto.dev_id = ipsec->dev_id;
1737 rte_cryptodev_sym_session_free(ipsec->dev_id, crypto_session);
1746 ipsec_session_free(struct rte_swx_ipsec *ipsec,
1759 rte_cryptodev_sym_session_free(ipsec->dev_id, s->crypto.ses);
1766 rte_swx_ipsec_sa_add(struct rte_swx_ipsec *ipsec,
1775 if (!ipsec || !sa_params || !id)
1779 if (!ipsec->n_sa_free_id)
1782 sa_id = ipsec->sa_free_id[ipsec->n_sa_free_id - 1];
1783 ipsec->n_sa_free_id--;
1786 sa = ipsec_sa_get(ipsec, sa_id);
1788 status = ipsec_session_create(ipsec, sa_params, &sa->s);
1791 ipsec->sa_free_id[ipsec->n_sa_free_id] = sa_id;
1792 ipsec->n_sa_free_id++;
1805 rte_swx_ipsec_sa_delete(struct rte_swx_ipsec *ipsec,
1811 if (!ipsec || (sa_id >= ipsec->n_sa_max))
1815 sa = ipsec_sa_get(ipsec, sa_id);
1817 ipsec_session_free(ipsec, &sa->s);
1820 ipsec->sa_free_id[ipsec->n_sa_free_id] = sa_id;
1821 ipsec->n_sa_free_id++;