2 * Copyright (c) 2019 Cisco and/or its affiliates.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at:
7 * http://www.apache.org/licenses/LICENSE-2.0
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
17 #include <vnet/ipsec/ipsec_types_api.h>
18 #include <vlibapi/api_types.h>
20 #define vl_typedefs /* define message structures */
21 #include <vnet/vnet_all_api_h.h>
25 ipsec_proto_decode (vl_api_ipsec_proto_t in, ipsec_protocol_t * out)
27 in = clib_net_to_host_u32 (in);
31 case IPSEC_API_PROTO_ESP:
32 *out = IPSEC_PROTOCOL_ESP;
34 case IPSEC_API_PROTO_AH:
35 *out = IPSEC_PROTOCOL_AH;
38 return (VNET_API_ERROR_INVALID_PROTOCOL);
42 ipsec_proto_encode (ipsec_protocol_t p)
46 case IPSEC_PROTOCOL_ESP:
47 return clib_host_to_net_u32 (IPSEC_API_PROTO_ESP);
48 case IPSEC_PROTOCOL_AH:
49 return clib_host_to_net_u32 (IPSEC_API_PROTO_AH);
51 return (VNET_API_ERROR_UNIMPLEMENTED);
55 ipsec_crypto_algo_decode (vl_api_ipsec_crypto_alg_t in,
56 ipsec_crypto_alg_t * out)
58 in = clib_net_to_host_u32 (in);
62 #define _(v,f,s) case IPSEC_API_CRYPTO_ALG_##f: \
63 *out = IPSEC_CRYPTO_ALG_##f; \
65 foreach_ipsec_crypto_alg
68 return (VNET_API_ERROR_INVALID_ALGORITHM);
71 vl_api_ipsec_crypto_alg_t
72 ipsec_crypto_algo_encode (ipsec_crypto_alg_t c)
76 #define _(v,f,s) case IPSEC_CRYPTO_ALG_##f: \
77 return clib_host_to_net_u32(IPSEC_API_CRYPTO_ALG_##f);
78 foreach_ipsec_crypto_alg
80 case IPSEC_CRYPTO_N_ALG:
84 return (VNET_API_ERROR_UNIMPLEMENTED);
88 ipsec_integ_algo_decode (vl_api_ipsec_integ_alg_t in, ipsec_integ_alg_t * out)
90 in = clib_net_to_host_u32 (in);
94 #define _(v,f,s) case IPSEC_API_INTEG_ALG_##f: \
95 *out = IPSEC_INTEG_ALG_##f; \
97 foreach_ipsec_integ_alg
100 return (VNET_API_ERROR_INVALID_ALGORITHM);
103 vl_api_ipsec_integ_alg_t
104 ipsec_integ_algo_encode (ipsec_integ_alg_t i)
108 #define _(v,f,s) case IPSEC_INTEG_ALG_##f: \
109 return (clib_host_to_net_u32(IPSEC_API_INTEG_ALG_##f));
110 foreach_ipsec_integ_alg
112 case IPSEC_INTEG_N_ALG:
116 return (VNET_API_ERROR_UNIMPLEMENTED);
120 ipsec_key_decode (const vl_api_key_t * key, ipsec_key_t * out)
122 ipsec_mk_key (out, key->data, key->length);
126 ipsec_key_encode (const ipsec_key_t * in, vl_api_key_t * out)
128 out->length = in->len;
129 clib_memcpy (out->data, in->data, out->length);
133 ipsec_sa_flags_decode (vl_api_ipsec_sad_flags_t in)
135 ipsec_sa_flags_t flags = IPSEC_SA_FLAG_NONE;
136 in = clib_net_to_host_u32 (in);
138 if (in & IPSEC_API_SAD_FLAG_USE_ESN)
139 flags |= IPSEC_SA_FLAG_USE_ESN;
140 if (in & IPSEC_API_SAD_FLAG_USE_ANTI_REPLAY)
141 flags |= IPSEC_SA_FLAG_USE_ANTI_REPLAY;
142 if (in & IPSEC_API_SAD_FLAG_IS_TUNNEL)
143 flags |= IPSEC_SA_FLAG_IS_TUNNEL;
144 if (in & IPSEC_API_SAD_FLAG_IS_TUNNEL_V6)
145 flags |= IPSEC_SA_FLAG_IS_TUNNEL_V6;
146 if (in & IPSEC_API_SAD_FLAG_UDP_ENCAP)
147 flags |= IPSEC_SA_FLAG_UDP_ENCAP;
152 vl_api_ipsec_sad_flags_t
153 ipsec_sad_flags_encode (const ipsec_sa_t * sa)
155 vl_api_ipsec_sad_flags_t flags = IPSEC_API_SAD_FLAG_NONE;
157 if (ipsec_sa_is_set_USE_ESN (sa))
158 flags |= IPSEC_API_SAD_FLAG_USE_ESN;
159 if (ipsec_sa_is_set_USE_ANTI_REPLAY (sa))
160 flags |= IPSEC_API_SAD_FLAG_USE_ANTI_REPLAY;
161 if (ipsec_sa_is_set_IS_TUNNEL (sa))
162 flags |= IPSEC_API_SAD_FLAG_IS_TUNNEL;
163 if (ipsec_sa_is_set_IS_TUNNEL_V6 (sa))
164 flags |= IPSEC_API_SAD_FLAG_IS_TUNNEL_V6;
165 if (ipsec_sa_is_set_UDP_ENCAP (sa))
166 flags |= IPSEC_API_SAD_FLAG_UDP_ENCAP;
168 return clib_host_to_net_u32 (flags);
172 * fd.io coding-style-patch-verification: ON
175 * eval: (c-set-style "gnu")