+void
+ipsec_set_async_mode (u32 is_enabled)
+{
+ ipsec_main_t *im = &ipsec_main;
+ ipsec_sa_t *sa;
+
+ vnet_crypto_request_async_mode (is_enabled);
+
+ im->async_mode = is_enabled;
+
+ /* change SA crypto op data */
+ pool_foreach (sa, ipsec_sa_pool)
+ {
+ sa->crypto_op_data =
+ (is_enabled ? sa->async_op_data.data : sa->sync_op_data.data);
+ }
+}
+
+static void
+crypto_engine_backend_register_post_node (vlib_main_t * vm)
+{
+ esp_async_post_next_t *eit;
+ esp_async_post_next_t *dit;
+
+ eit = &esp_encrypt_async_next;
+ eit->esp4_post_next =
+ vnet_crypto_register_post_node (vm, "esp4-encrypt-post");
+ eit->esp6_post_next =
+ vnet_crypto_register_post_node (vm, "esp6-encrypt-post");
+ eit->esp4_tun_post_next =
+ vnet_crypto_register_post_node (vm, "esp4-encrypt-tun-post");
+ eit->esp6_tun_post_next =
+ vnet_crypto_register_post_node (vm, "esp6-encrypt-tun-post");
+ eit->esp_mpls_tun_post_next =
+ vnet_crypto_register_post_node (vm, "esp-mpls-encrypt-tun-post");
+
+ dit = &esp_decrypt_async_next;
+ dit->esp4_post_next =
+ vnet_crypto_register_post_node (vm, "esp4-decrypt-post");
+ dit->esp6_post_next =
+ vnet_crypto_register_post_node (vm, "esp6-decrypt-post");
+ dit->esp4_tun_post_next =
+ vnet_crypto_register_post_node (vm, "esp4-decrypt-tun-post");
+ dit->esp6_tun_post_next =
+ vnet_crypto_register_post_node (vm, "esp6-decrypt-tun-post");
+}
+