diff options
author | 2020-01-30 13:26:43 +0100 | |
---|---|---|
committer | 2020-04-28 11:54:00 +0000 | |
commit | 58db6e16cf4f3bb1740ca2f62d7d887baad58d63 (patch) | |
tree | d8863a2a8bacccb6d3ca78c649910a3fa20acc12 /src/vnet/lisp-cp/lisp_types_api.c | |
parent | 4830e4f78fb8e46b23a1a0711cd06969a77d8d95 (diff) |
lisp: API cleanup
Use consistent API types.
Type: fix
Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
Change-Id: Ib7f73a0b6de188982a09040f7739dc46be3cb1de
Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
Diffstat (limited to 'src/vnet/lisp-cp/lisp_types_api.c')
-rw-r--r-- | src/vnet/lisp-cp/lisp_types_api.c | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/src/vnet/lisp-cp/lisp_types_api.c b/src/vnet/lisp-cp/lisp_types_api.c new file mode 100644 index 00000000000..e966f625677 --- /dev/null +++ b/src/vnet/lisp-cp/lisp_types_api.c @@ -0,0 +1,88 @@ +/* + *------------------------------------------------------------------ + * + * Copyright (c) 2020 Cisco and/or its affiliates. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *------------------------------------------------------------------ + */ + +#include <vnet/lisp-cp/lisp_types_api.h> +#include <vnet/ip/ip_types_api.h> +#include <vnet/ethernet/ethernet_types_api.h> + +int +unformat_lisp_eid_api (gid_address_t * dst, u32 vni, const vl_api_eid_t * eid) +{ + switch (eid->type) + { + case EID_TYPE_API_PREFIX: /* ip prefix */ + gid_address_type (dst) = GID_ADDR_IP_PREFIX; + ip_address_decode2 (&eid->address.prefix.address, &dst->ippref.addr); + gid_address_ippref_len (dst) = eid->address.prefix.len; + ip_prefix_normalize (&gid_address_ippref (dst)); + break; + case EID_TYPE_API_MAC: /* l2 mac */ + gid_address_type (dst) = GID_ADDR_MAC; + mac_address_decode (eid->address.mac, (mac_address_t *) gid_address_mac (dst)); + break; + default: + /* unknown type */ + return VNET_API_ERROR_INVALID_VALUE; + } + + gid_address_vni (dst) = clib_net_to_host_u32 (vni); + + return 0; +} + +void +lisp_fid_put_api (vl_api_eid_t * eid, const fid_address_t * fid) +{ + switch (fid_addr_type (fid)) + { + case FID_ADDR_IP_PREF: + ip_prefix_encode2 (&fid_addr_ippref (fid), &eid->address.prefix); + eid->type = EID_TYPE_API_PREFIX; + break; + + case FID_ADDR_MAC: + mac_address_encode ((mac_address_t *) fid_addr_mac (fid), eid->address.mac); + eid->type = EID_TYPE_API_MAC; + break; + + default: + clib_warning ("Unknown FID type %d!", fid_addr_type (fid)); + break; + } +} + +void +lisp_gid_put_api (vl_api_eid_t * eid, const gid_address_t * gid) +{ + switch (gid_address_type (gid)) + { + case GID_ADDR_IP_PREFIX: + ip_prefix_encode2 (&gid_address_ippref (gid), &eid->address.prefix); + eid->type = EID_TYPE_API_PREFIX; + break; + + case GID_ADDR_MAC: + mac_address_encode ((mac_address_t *) gid_address_mac (gid), eid->address.mac); + eid->type = EID_TYPE_API_MAC; + break; + + default: + clib_warning ("Unknown GID type %d!", gid_address_type (gid)); + break; + } +} |