diff options
Diffstat (limited to 'src/vnet/lisp-cp/lisp_cp_messages.h')
-rw-r--r-- | src/vnet/lisp-cp/lisp_cp_messages.h | 644 |
1 files changed, 0 insertions, 644 deletions
diff --git a/src/vnet/lisp-cp/lisp_cp_messages.h b/src/vnet/lisp-cp/lisp_cp_messages.h deleted file mode 100644 index 69510a0e1ce..00000000000 --- a/src/vnet/lisp-cp/lisp_cp_messages.h +++ /dev/null @@ -1,644 +0,0 @@ -/* - * Copyright (c) 2016 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. - */ - -#ifndef VNET_LISP_GPE_LISP_CP_MESSAGES_H_ -#define VNET_LISP_GPE_LISP_CP_MESSAGES_H_ - -#include <vnet/vnet.h> - -#define MAX_IP_PKT_LEN 4096 -#define MAX_IP_HDR_LEN 40 /* without options or IPv6 hdr extensions */ -#define UDP_HDR_LEN 8 -#define LISP_DATA_HDR_LEN 8 -#define LISP_ECM_HDR_LEN 4 -#define MAX_LISP_MSG_ENCAP_LEN 2*(MAX_IP_HDR_LEN + UDP_HDR_LEN)+ LISP_ECM_HDR_LEN -#define MAX_LISP_PKT_ENCAP_LEN MAX_IP_HDR_LEN + UDP_HDR_LEN + LISP_DATA_HDR_LEN - -#define LISP_CONTROL_PORT 4342 - -/* - * EID RECORD FIELD - */ - -/* - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * / | Reserved | EID mask-len | EID-prefix-AFI | - * Rec +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * \ | EID-prefix ... | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - */ - - -typedef struct _eid_prefix_record_hdr -{ - u8 reserved; - u8 eid_prefix_length; -} __attribute__ ((__packed__)) eid_record_hdr_t; - -void eid_rec_hdr_init (eid_record_hdr_t * ptr); - -#define EID_REC_CAST(h_) ((eid_record_hdr_t *)(h_)) -#define EID_REC_MLEN(h_) EID_REC_CAST((h_))->eid_prefix_length -#define EID_REC_ADDR(h) (u8 *)(h) + sizeof(eid_record_hdr_t) - -/* LISP Types */ -typedef enum -{ - NOT_LISP_MSG, - LISP_MAP_REQUEST = 1, - LISP_MAP_REPLY, - LISP_MAP_REGISTER, - LISP_MAP_NOTIFY, - LISP_INFO_NAT = 7, - LISP_ENCAP_CONTROL_TYPE = 8, - LISP_MSG_TYPES -} lisp_msg_type_e; - -/* - * ENCAPSULATED CONTROL MESSAGE - */ - -/* - * 0 1 2 3 - * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * / | IPv4 or IPv6 Header | - * OH | (uses RLOC addresses) | - * \ | | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * / | Source Port = xxxx | Dest Port = 4342 | - * UDP +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * \ | UDP Length | UDP Checksum | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * LH |Type=8 |S| Reserved | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * / | IPv4 or IPv6 Header | - * IH | (uses RLOC or EID addresses) | - * \ | | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * / | Source Port = xxxx | Dest Port = yyyy | - * UDP +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * \ | UDP Length | UDP Checksum | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * LCM | LISP Control Message | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - */ - - -/* - * Encapsulated control message header. This is followed by the IP - * header of the encapsulated LISP control message. - * - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * |Type=8 |S| Reserved | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - */ - -typedef struct -{ -#if CLIB_ARCH_IS_LITTLE_ENDIAN - u8 reserved:3; - u8 s_bit:1; - u8 type:4; -#else - u8 type:4; - u8 s_bit:1; - u8 reserved:3; -#endif - u8 reserved2[3]; -} ecm_hdr_t; - -char *ecm_hdr_to_char (ecm_hdr_t * h); - -#define ECM_TYPE(h_) ((ecm_hdr_t *)(h_))->type - -/* - * MAP-REQUEST MESSAGE - */ - -/* - * Map-Request Message Format - * - * 0 1 2 3 - * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * |Type=1 |A|M|P|S|p|s| Reserved | IRC | Record Count | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | Nonce . . . | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | . . . Nonce | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | Source-EID-AFI | Source EID Address ... | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | ITR-RLOC-AFI 1 | ITR-RLOC Address 1 ... | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | ... | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | ITR-RLOC-AFI n | ITR-RLOC Address n ... | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * / | Reserved | EID mask-len | EID-prefix-AFI | - * Rec +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * \ | EID-prefix ... | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | Map-Reply Record ... | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | Mapping Protocol Data | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - */ - - -/* - * Fixed size portion of the map request. Variable size source EID - * address, originating ITR RLOC AFIs and addresses and then map - * request records follow. - */ -typedef struct -{ -#if CLIB_ARCH_IS_LITTLE_ENDIAN - u8 solicit_map_request:1; - u8 rloc_probe:1; - u8 map_data_present:1; - u8 authoritative:1; - u8 type:4; -#else - u8 type:4; - u8 authoritative:1; - u8 map_data_present:1; - u8 rloc_probe:1; - u8 solicit_map_request:1; -#endif -#if CLIB_ARCH_IS_LITTLE_ENDIAN - u8 reserved1:6; - u8 smr_invoked:1; - u8 pitr:1; -#else - u8 pitr:1; - u8 smr_invoked:1; - u8 reserved1:6; -#endif -#if CLIB_ARCH_IS_LITTLE_ENDIAN - u8 additional_itr_rloc_count:5; - u8 reserved2:3; -#else - u8 reserved2:3; - u8 additional_itr_rloc_count:5; -#endif - u8 record_count; - u64 nonce; -} __attribute__ ((__packed__)) map_request_hdr_t; - -void map_request_hdr_init (void *ptr); -char *map_request_hdr_to_char (map_request_hdr_t * h); - -#define MREQ_TYPE(h_) (h_)->type -#define MREQ_HDR_CAST(h_) ((map_request_hdr_t *)(h_)) -#define MREQ_REC_COUNT(h_) (MREQ_HDR_CAST(h_))->record_count -#define MREQ_RLOC_PROBE(h_) (MREQ_HDR_CAST(h_))->rloc_probe -#define MREQ_ITR_RLOC_COUNT(h_) (MREQ_HDR_CAST(h_))->additional_itr_rloc_count -#define MREQ_NONCE(h_) (MREQ_HDR_CAST(h_))->nonce -#define MREQ_SMR(h_) (MREQ_HDR_CAST(h_))->solicit_map_request -#define MREQ_SMR_INVOKED(h_) (MREQ_HDR_CAST(h_))->smr_invoked - -/* - * MAP-REPLY MESSAGE - */ - - /* - * Map-Reply Message Format - * - * 0 1 2 3 - * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * |Type=2 |P|E|S| Reserved | Record Count | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | Nonce . . . | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | . . . Nonce | - * +-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | | Record TTL | - * | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * R | Locator Count | EID mask-len | ACT |A| Reserved | - * e +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * c | Rsvd | Map-Version Number | EID-AFI | - * o +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * r | EID-prefix | - * d +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | /| Priority | Weight | M Priority | M Weight | - * | L +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | o | Unused Flags |L|p|R| Loc-AFI | - * | c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | \| Locator | - * +-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | Mapping Protocol Data | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - */ - - /* - * Fixed size portion of the map reply. - */ -typedef struct -{ -#if CLIB_ARCH_IS_LITTLE_ENDIAN - u8 reserved1:1; - u8 security:1; - u8 echo_nonce:1; - u8 rloc_probe:1; - u8 type:4; -#else - u8 type:4; - u8 rloc_probe:1; - u8 echo_nonce:1; - u8 security:1; - u8 reserved1:1; -#endif - u8 reserved2; - u8 reserved3; - u8 record_count; - u64 nonce; -} __attribute__ ((__packed__)) map_reply_hdr_t; - -void map_reply_hdr_init (void *ptr); -char *map_reply_hdr_to_char (map_reply_hdr_t * h); - -#define MREP_TYPE(h_) MREP_HDR_CAST(h_)->type -#define MREP_HDR_CAST(h_) ((map_reply_hdr_t *)(h_)) -#define MREP_REC_COUNT(h_) MREP_HDR_CAST(h_)->record_count -#define MREP_RLOC_PROBE(h_) MREP_HDR_CAST(h_)->rloc_probe -#define MREP_NONCE(h_) MREP_HDR_CAST(h_)->nonce - - -always_inline lisp_msg_type_e -lisp_msg_type (void *b) -{ - ecm_hdr_t *hdr = b; - if (!hdr) - { - return (NOT_LISP_MSG); - } - return (hdr->type); -} - -always_inline void -increment_record_count (void *b) -{ - switch (lisp_msg_type (b)) - { - case LISP_MAP_REQUEST: - MREQ_REC_COUNT (b) += 1; - break; - case LISP_MAP_REPLY: - MREP_REC_COUNT (b) += 1; - break; - default: - return; - } -} - - -/* - * LOCATOR FIELD - * - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * /| Priority | Weight | M Priority | M Weight | - * L +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * o | Unused Flags |L|p|R| Loc-AFI | - * c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * \| Locator | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * - * Fixed portion of the mapping record locator. Variable length - * locator address follows. - */ -typedef struct _locator_hdr -{ - u8 priority; - u8 weight; - u8 mpriority; - u8 mweight; - u8 unused1; -#ifdef CLIB_ARCH_IS_LITTLE_ENDIAN - u8 reachable:1; - u8 probed:1; - u8 local:1; - u8 unused2:5; -#else - u8 unused2:5; - u8 local:1; - u8 probed:1; - u8 reachable:1; -#endif -} __attribute__ ((__packed__)) locator_hdr_t; - -#define LOC_CAST(h_) ((locator_hdr_t *)(h_)) -#define LOC_PROBED(h_) LOC_CAST(h_)->probed -#define LOC_PRIORITY(h_) LOC_CAST(h_)->priority -#define LOC_WEIGHT(h_) LOC_CAST(h_)->weight -#define LOC_MPRIORITY(h_) LOC_CAST(h_)->mpriority -#define LOC_MWEIGHT(h_) LOC_CAST(h_)->mweight -#define LOC_REACHABLE(h_) LOC_CAST(h_)->reachable -#define LOC_LOCAL(h_) LOC_CAST(h_)->local -#define LOC_ADDR(h_) ((u8 *)(h_) + sizeof(locator_hdr_t)) - -/* - * MAPPING RECORD - * - * Mapping record used in all LISP control messages. - * - * +---> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | | Record TTL | - * | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * R | Locator Count | EID mask-len | ACT |A| Reserved | - * e +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * c | Rsvd | Map-Version Number | EID-AFI | - * o +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * r | EID-prefix | - * d +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | /| Priority | Weight | M Priority | M Weight | - * | / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | Loc | Unused Flags |L|p|R| Loc-AFI | - * | \ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | \| Locator | - * +---> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - */ - -/* - * Fixed portion of the mapping record. EID prefix address and - * locators follow. - */ - -typedef struct _mapping_record_hdr_t -{ - u32 ttl; - u8 locator_count; - u8 eid_prefix_length; -#ifdef CLIB_ARCH_IS_LITTLE_ENDIAN - u8 reserved1:4; - u8 authoritative:1; - u8 action:3; -#else - u8 action:3; - u8 authoritative:1; - u8 reserved1:4; -#endif - u8 reserved2; -#ifdef CLIB_ARCH_IS_LITTLE_ENDIAN - u8 version_hi:4; - u8 reserved3:4; -#else - u8 reserved3:4; - u8 version_hi:4; -#endif - u8 version_low; -} __attribute__ ((__packed__)) mapping_record_hdr_t; - -void mapping_record_init_hdr (mapping_record_hdr_t * h); - -#define MAP_REC_EID_PLEN(h) ((mapping_record_hdr_t *)(h))->eid_prefix_length -#define MAP_REC_LOC_COUNT(h) ((mapping_record_hdr_t *)(h))->locator_count -#define MAP_REC_ACTION(h) ((mapping_record_hdr_t *)(h))->action -#define MAP_REC_AUTH(h) ((mapping_record_hdr_t *)(h))->authoritative -#define MAP_REC_TTL(h) ((mapping_record_hdr_t *)(h))->ttl -#define MAP_REC_EID(h) (u8 *)(h)+sizeof(mapping_record_hdr_t) -#define MAP_REC_VERSION(h) (h)->version_hi << 8 | (h)->version_low - -typedef enum -{ - LISP_NO_ACTION, - LISP_FORWARD_NATIVE, - LISP_SEND_MAP_REQUEST, - LISP_DROP -} lisp_action_e; - -typedef enum lisp_authoritative -{ - A_NO_AUTHORITATIVE = 0, - A_AUTHORITATIVE -} lisp_authoritative_e; - -/* - * LISP Canonical Address Format Encodings - * - * 0 1 2 3 - * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | AFI = 16387 | Rsvd1 | Flags | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | Type | Rsvd2 | Length | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - */ - -typedef struct _lcaf_hdr_t -{ - u8 reserved1; - u8 flags; - u8 type; - u8 reserved2; - u16 len; -} __attribute__ ((__packed__)) lcaf_hdr_t; - -#define LCAF_TYPE(h) ((lcaf_hdr_t *)(h))->type -#define LCAF_LENGTH(h) ((lcaf_hdr_t *)(h))->len -#define LCAF_RES2(h) ((lcaf_hdr_t *)(h))->reserved2 -#define LCAF_FLAGS(h) ((lcaf_hdr_t *)(h))->flags -#define LCAF_PAYLOAD(h) (u8 *)(h)+sizeof(lcaf_hdr_t) - -/* - * Source/Dest Key Canonical Address Format: - * - * 0 1 2 3 - * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | Reserved | Source-ML | Dest-ML | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - */ -typedef struct _lcaf_src_dst_hdr_t -{ - u16 reserved; - u8 src_mask_len; - u8 dst_mask_len; -} __attribute__ ((__packed__)) lcaf_src_dst_hdr_t; - -#define LCAF_SD_SRC_ML(_h) (_h)->src_mask_len -#define LCAF_SD_DST_ML(_h) (_h)->dst_mask_len - -/* - * SPI LCAF - * - * 0 1 2 3 - * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | Service Path ID | Service index | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - */ -typedef struct _lcaf_spi_hdr_t -{ - u32 spi_si; -} __attribute__ ((__packed__)) lcaf_spi_hdr_t; - -#define LCAF_SPI_SI(_h) (_h)->spi_si - -/* - * The Map-Register message format is: - * - * 0 1 2 3 - * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * |Type=3 |P| Reserved |M| Record Count | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | Nonce . . . | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | . . . Nonce | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | Key ID | Authentication Data Length | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * ~ Authentication Data ~ - * +-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | | Record TTL | - * | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * R | Locator Count | EID mask-len | ACT |A| Reserved | - * e +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * c | Rsvd | Map-Version Number | EID-Prefix-AFI | - * o +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * r | EID-Prefix | - * d +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | /| Priority | Weight | M Priority | M Weight | - * | L +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | o | Unused Flags |L|p|R| Loc-AFI | - * | c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | \| Locator | - * +-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - */ -typedef struct -{ -#if CLIB_ARCH_IS_LITTLE_ENDIAN - u8 res1:3; - u8 proxy_map_reply:1; - u8 type:4; -#else - u8 type:4; - u8 proxy_map_reply:1; - u8 res1:3; -#endif - - u8 res2; - -#if CLIB_ARCH_IS_LITTLE_ENDIAN - u8 want_map_notify:1; - u8 res3:7; -#else - u8 res3:7; - u8 want_map_notify:1; -#endif - - u8 record_count; - u64 nonce; - u16 key_id; - u16 auth_data_len; - u8 data[0]; -} __attribute__ ((__packed__)) map_register_hdr_t; - -#define MREG_TYPE(h_) (h_)->type -#define MREG_HDR_CAST(h_) ((map_register_hdr_t *)(h_)) -#define MREG_PROXY_MR(h_) (MREG_HDR_CAST(h_))->proxy_map_reply -#define MREG_WANT_MAP_NOTIFY(h_) (MREG_HDR_CAST(h_))->want_map_notify -#define MREG_REC_COUNT(h_) (MREG_HDR_CAST(h_))->record_count -#define MREG_NONCE(h_) (MREG_HDR_CAST(h_))->nonce -#define MREG_KEY_ID(h_) (MREG_HDR_CAST(h_))->key_id -#define MREG_AUTH_DATA_LEN(h_) (MREG_HDR_CAST(h_))->auth_data_len -#define MREG_DATA(h_) (MREG_HDR_CAST(h_))->data - -/* - * The Map-Notify message format is: - * - * 0 1 2 3 - * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * |Type=4 | Reserved | Record Count | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | Nonce . . . | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | . . . Nonce | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | Key ID | Authentication Data Length | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * ~ Authentication Data ~ - * +-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | | Record TTL | - * | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * R | Locator Count | EID mask-len | ACT |A| Reserved | - * e +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * c | Rsvd | Map-Version Number | EID-Prefix-AFI | - * o +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * r | EID-Prefix | - * d +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | /| Priority | Weight | M Priority | M Weight | - * | L +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | o | Unused Flags |L|p|R| Loc-AFI | - * | c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | \| Locator | - * +-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -*/ - -typedef struct -{ -#if CLIB_ARCH_IS_LITTLE_ENDIAN - u8 res1:4; - u8 type:4; -#else - u8 type:4; - u8 res1:4; -#endif - - u16 res2; - - u8 record_count; - u64 nonce; - u16 key_id; - u16 auth_data_len; - u8 data[0]; -} __attribute__ ((__packed__)) map_notify_hdr_t; - -#define MNOTIFY_TYPE(h_) (h_)->type -#define MNOTIFY_HDR_CAST(h_) ((map_register_hdr_t *)(h_)) -#define MNOTIFY_REC_COUNT(h_) (MREG_HDR_CAST(h_))->record_count -#define MNOTIFY_NONCE(h_) (MREG_HDR_CAST(h_))->nonce -#define MNOTIFY_KEY_ID(h_) (MREG_HDR_CAST(h_))->key_id -#define MNOTIFY_AUTH_DATA_LEN(h_) (MREG_HDR_CAST(h_))->auth_data_len -#define MNOTIFY_DATA(h_) (MREG_HDR_CAST(h_))->data - -/* - * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * |Ver|O|C|R|R|R|R|R|R| Length | MD type=0x1 | Next Protocol | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | Service Path Identifer | Service Index | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - */ - -typedef struct -{ - u32 header; - u32 spi_si; -} __attribute__ ((__packed__)) lisp_nsh_hdr_t; - -#endif /* VNET_LISP_GPE_LISP_CP_MESSAGES_H_ */ - -/* - * fd.io coding-style-patch-verification: ON - * - * Local Variables: - * eval: (c-set-style "gnu") - * End: - */ |