MCPcopy Create free account
hub / github.com/F-Stack/f-stack / ipsec_sa_init

Function ipsec_sa_init

dpdk/examples/ipsec-secgw/sa.c:1552–1605  ·  view source on GitHub ↗

* Initialise related rte_ipsec_sa object. */

Source from the content-addressed store, hash-verified

1550 * Initialise related rte_ipsec_sa object.
1551 */
1552static int
1553ipsec_sa_init(struct ipsec_sa *lsa, struct rte_ipsec_sa *sa, uint32_t sa_size,
1554 struct socket_ctx *skt_ctx, struct ipsec_ctx *ips_ctx[],
1555 const struct eventmode_conf *em_conf)
1556{
1557 int rc;
1558 struct rte_ipsec_sa_prm prm;
1559 struct rte_ipsec_session *ips;
1560 struct rte_ipv4_hdr v4 = {
1561 .version_ihl = IPVERSION << 4 |
1562 sizeof(v4) / RTE_IPV4_IHL_MULTIPLIER,
1563 .time_to_live = IPDEFTTL,
1564 .next_proto_id = lsa->udp_encap ? IPPROTO_UDP : IPPROTO_ESP,
1565 .src_addr = lsa->src.ip.ip4,
1566 .dst_addr = lsa->dst.ip.ip4,
1567 };
1568 struct rte_ipv6_hdr v6 = {
1569 .vtc_flow = htonl(IP6_VERSION << 28),
1570 .proto = lsa->udp_encap ? IPPROTO_UDP : IPPROTO_ESP,
1571 };
1572
1573 if (IS_IP6_TUNNEL(lsa->flags)) {
1574 memcpy(v6.src_addr, lsa->src.ip.ip6.ip6_b, sizeof(v6.src_addr));
1575 memcpy(v6.dst_addr, lsa->dst.ip.ip6.ip6_b, sizeof(v6.dst_addr));
1576 }
1577
1578 rc = fill_ipsec_sa_prm(&prm, lsa, &v4, &v6);
1579 if (rc == 0)
1580 rc = rte_ipsec_sa_init(sa, &prm, sa_size);
1581 if (rc < 0)
1582 return rc;
1583
1584 if (lsa->flags & SA_TELEMETRY_ENABLE)
1585 rte_ipsec_telemetry_sa_add(sa);
1586
1587 /* init primary processing session */
1588 ips = ipsec_get_primary_session(lsa);
1589 rc = fill_ipsec_session(ips, sa);
1590 if (rc != 0)
1591 return rc;
1592
1593 /* init inline fallback processing session */
1594 if (lsa->fallback_sessions == 1) {
1595 struct rte_ipsec_session *ipfs = ipsec_get_fallback_session(lsa);
1596 if (ipfs->security.ses == NULL) {
1597 rc = create_lookaside_session(ips_ctx, skt_ctx, em_conf, lsa, ipfs);
1598 if (rc != 0)
1599 return rc;
1600 }
1601 rc = fill_ipsec_session(ipfs, sa);
1602 }
1603
1604 return rc;
1605}
1606
1607/*
1608 * Allocate space and init rte_ipsec_sa structures,

Callers 1

ipsec_satbl_initFunction · 0.85

Calls 8

fill_ipsec_sa_prmFunction · 0.85
rte_ipsec_sa_initFunction · 0.85
fill_ipsec_sessionFunction · 0.85
create_lookaside_sessionFunction · 0.85
memcpyFunction · 0.50

Tested by

no test coverage detected