+ REPLY_MACRO (VL_API_IPSEC_SPD_ENTRY_ADD_DEL_REPLY);
+}
+
+static int
+ipsec_proto_decode (vl_api_ipsec_proto_t in, ipsec_protocol_t * out)
+{
+ in = clib_net_to_host_u32 (in);
+
+ switch (in)
+ {
+ case IPSEC_API_PROTO_ESP:
+ *out = IPSEC_PROTOCOL_ESP;
+ return (0);
+ case IPSEC_API_PROTO_AH:
+ *out = IPSEC_PROTOCOL_AH;
+ return (0);
+ }
+ return (VNET_API_ERROR_UNIMPLEMENTED);
+}
+
+static int
+ipsec_crypto_algo_decode (vl_api_ipsec_crypto_alg_t in,
+ ipsec_crypto_alg_t * out)
+{
+ in = clib_net_to_host_u32 (in);
+
+ switch (in)
+ {
+#define _(v,f,s) case IPSEC_API_CRYPTO_ALG_##f: \
+ *out = IPSEC_CRYPTO_ALG_##f; \
+ return (0);
+ foreach_ipsec_crypto_alg
+#undef _
+ }
+ return (VNET_API_ERROR_UNIMPLEMENTED);
+}
+
+static int
+ipsec_integ_algo_decode (vl_api_ipsec_integ_alg_t in, ipsec_integ_alg_t * out)
+{
+ in = clib_net_to_host_u32 (in);
+
+ switch (in)
+ {
+#define _(v,f,s) case IPSEC_API_INTEG_ALG_##f: \
+ *out = IPSEC_INTEG_ALG_##f; \
+ return (0);
+ foreach_ipsec_integ_alg
+#undef _
+ }
+ return (VNET_API_ERROR_UNIMPLEMENTED);
+}
+
+static void
+vl_api_ipsec_key_decode (const vl_api_key_t * key, u8 * len, u8 out[128])
+{
+ *len = key->length;
+ clib_memcpy (out, key->data, key->length);
+}
+
+static void
+vl_api_ipsec_sad_flags_decode (vl_api_ipsec_sad_flags_t in, ipsec_sa_t * sa)
+{
+ in = clib_net_to_host_u32 (in);
+
+ if (in & IPSEC_API_SAD_FLAG_USE_EXTENDED_SEQ_NUM)
+ sa->use_esn = 1;
+ if (in & IPSEC_API_SAD_FLAG_USE_ANTI_REPLAY)
+ sa->use_anti_replay = 1;
+ if (in & IPSEC_API_SAD_FLAG_IS_TUNNEL)
+ sa->is_tunnel = 1;
+ if (in & IPSEC_API_SAD_FLAG_IS_TUNNEL_V6)
+ sa->is_tunnel_ip6 = 1;
+ if (in & IPSEC_API_SAD_FLAG_UDP_ENCAP)
+ sa->udp_encap = 1;