-static walk_rc_t
-send_ipsec_sa_v3_details (ipsec_sa_t *sa, void *arg)
-{
- ipsec_dump_walk_ctx_t *ctx = arg;
- vl_api_ipsec_sa_v3_details_t *mp;
- ipsec_main_t *im = &ipsec_main;
-
- mp = vl_msg_api_alloc (sizeof (*mp));
- clib_memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_IPSEC_SA_V3_DETAILS);
- mp->context = ctx->context;
-
- mp->entry.sad_id = htonl (sa->id);
- mp->entry.spi = htonl (sa->spi);
- mp->entry.protocol = ipsec_proto_encode (sa->protocol);
-
- mp->entry.crypto_algorithm = ipsec_crypto_algo_encode (sa->crypto_alg);
- ipsec_key_encode (&sa->crypto_key, &mp->entry.crypto_key);
-
- mp->entry.integrity_algorithm = ipsec_integ_algo_encode (sa->integ_alg);
- ipsec_key_encode (&sa->integ_key, &mp->entry.integrity_key);
-
- mp->entry.flags = ipsec_sad_flags_encode (sa);
- mp->entry.salt = clib_host_to_net_u32 (sa->salt);
-
- if (ipsec_sa_is_set_IS_PROTECT (sa))
- {
- ipsec_sa_dump_match_ctx_t ctx = {
- .sai = sa - im->sad,
- .sw_if_index = ~0,
- };
- ipsec_tun_protect_walk (ipsec_sa_dump_match_sa, &ctx);
-
- mp->sw_if_index = htonl (ctx.sw_if_index);
- }
- else
- mp->sw_if_index = ~0;
-
- if (ipsec_sa_is_set_IS_TUNNEL (sa))
- tunnel_encode (&sa->tunnel, &mp->entry.tunnel);
-
- if (ipsec_sa_is_set_UDP_ENCAP (sa))
- {
- mp->entry.udp_src_port = sa->udp_hdr.src_port;
- mp->entry.udp_dst_port = sa->udp_hdr.dst_port;
- }
-
- mp->seq_outbound = clib_host_to_net_u64 (((u64) sa->seq));
- mp->last_seq_inbound = clib_host_to_net_u64 (((u64) sa->last_seq));
- if (ipsec_sa_is_set_USE_ESN (sa))
- {
- mp->seq_outbound |= (u64) (clib_host_to_net_u32 (sa->seq_hi));
- mp->last_seq_inbound |= (u64) (clib_host_to_net_u32 (sa->last_seq_hi));
- }
- if (ipsec_sa_is_set_USE_ANTI_REPLAY (sa))
- mp->replay_window = clib_host_to_net_u64 (sa->replay_window);
-
- mp->stat_index = clib_host_to_net_u32 (sa->stat_index);
-
- vl_api_send_msg (ctx->reg, (u8 *) mp);
-
- return (WALK_CONTINUE);
-}
-
-static void
-vl_api_ipsec_sa_v3_dump_t_handler (vl_api_ipsec_sa_v3_dump_t *mp)
-{
- vl_api_registration_t *reg;
-
-#if WITH_LIBSSL > 0
- reg = vl_api_client_index_to_registration (mp->client_index);
- if (!reg)
- return;
-
- ipsec_dump_walk_ctx_t ctx = {
- .reg = reg,
- .context = mp->context,
- };
-
- ipsec_sa_walk (send_ipsec_sa_v3_details, &ctx);
-
-#else
- clib_warning ("unimplemented");
-#endif
-}
-