From: ritsz Date: Fri, 14 Aug 2015 16:06:52 +0000 (+0530) Subject: Initial commit for support of Type 3 and Type 4 LISP packets. X-Git-Tag: tcpdump-4.8.0~105 X-Git-Url: https://git.tcpdump.org/tcpdump/commitdiff_plain/823644a72dfde7f127d127a299d4dde30412e21c Initial commit for support of Type 3 and Type 4 LISP packets. Fixing Travis CI build for LISP commit Adding testcases for lisp notify and register Fixing build warnings Added ND_TCHECK for relevant headers Fixing ND_TCHECK2 issues Adding support for multiple LOC records for same EID entry Fixing review issues, adding detailed tests Adding support for verbose outputs Adding RFC information for UDP PORT defination Removing Spaces in type names Print EID record related flags in verbose mode Using tok2str Fixing -Wpedantic issues Negative testcases, Packet structure comments, verbose mode flag printing Printing Map Version Print auth_data, decouple type and xtr_present extraction, handle malformed packets correctly Tests for latest code changes Printing useful info incase not built with IPv6 support --- diff --git a/Makefile.in b/Makefile.in index 966545e7..db50bf74 100644 --- a/Makefile.in +++ b/Makefile.in @@ -154,6 +154,7 @@ LIBNETDISSECT_SRC=\ print-l2tp.c \ print-lane.c \ print-ldp.c \ + print-lisp.c \ print-llc.c \ print-lldp.c \ print-lmp.c \ diff --git a/netdissect.h b/netdissect.h index 0e9c06a6..29c4e0a1 100644 --- a/netdissect.h +++ b/netdissect.h @@ -462,6 +462,7 @@ extern void krb_print(netdissect_options *, const u_char *); extern void l2tp_print(netdissect_options *, const u_char *, u_int); extern void lane_print(netdissect_options *, const u_char *, u_int, u_int); extern void ldp_print(netdissect_options *, const u_char *, u_int); +extern void lisp_print(netdissect_options *, const u_char *, u_int); extern u_int llap_print(netdissect_options *, const u_char *, u_int); extern int llc_print(netdissect_options *, const u_char *, u_int, u_int, const u_char *, const u_char *); extern void lldp_print(netdissect_options *, const u_char *, u_int); diff --git a/print-lisp.c b/print-lisp.c new file mode 100644 index 00000000..327e99e2 --- /dev/null +++ b/print-lisp.c @@ -0,0 +1,461 @@ +/* + * Copyright (c) 2015 Ritesh Ranjan (r.ranjan789@gmail.com) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * tcpdump filter for LISP - Locator/Identifier Separation Protocol + * RFC 6830 + * + * + * 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|S|I|R| 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 | + * +-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * + * + * 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 |I|R| 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 | + * +-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + */ + + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include + +#include "ip.h" +#ifdef INET6 +#include "ip6.h" +#endif + +#include "extract.h" +#include "interface.h" +#include "addrtoname.h" + +#define IPv4_AFI 1 +#define IPv6_AFI 2 +#define TYPE_INDEX 4 +#define LISP_MAP_NOTIFY_IBIT_MASK 8 +#define LISP_MAP_REGISTER_IBIT_MASK 2 + +enum { + LISP_MAP_REQUEST = 1, + LISP_MAP_REPLY, + LISP_MAP_REGISTER, + LISP_MAP_NOTIFY, + LISP_ENCAPSULATED_CONTROL_MESSAGE = 8 +}; + +enum { + LISP_AUTH_NONE, + LISP_AUTH_SHA1, + LISP_AUTH_SHA256 +}; + +static const struct tok lisp_type [] = { + { 0, "LISP-Reserved" }, + { 1, "LISP-Map-Request" }, + { 2, "LISP-Map-Reply" }, + { 3, "LISP-Map-Register" }, + { 4, "LISP-Map-Notify" }, + { 8, "LISP-Encapsulated-Contol-Message" }, + { 0, NULL } +}; + +/* + * P-Bit : Request for Proxy Map-Reply from the MS/MR + * S-Bit : Security Enhancement. ETR is LISP-SEC enabled. draft-ietf-lisp-sec + * I-Bit : 128 bit xTR-ID and 64 bit Site-ID present. + * xTR-ID and Site-ID help in differentiation of xTRs in multi xTR + * and multi Site deployment scenarios. + * R-Bit : Built for a Reencapsulating-Tunnel-Router. Used in Traffic + * Engineering and Service Chaining + */ +static const struct tok map_register_hdr_flag[] = { + { 0x08000000, "P-Proxy-Map-Reply" }, + { 0x04000000, "S-LISP-SEC-Capable" }, + { 0x02000000, "I-xTR-ID-Present" }, + { 0x01000000, "R-Build-For-RTR" }, + { 0x00000100, "M-Want-Map-Notify" }, + { 0, NULL } +}; + +static const struct tok map_notify_hdr_flag[] = { + { 0x08000000, "I-xTR-ID-Present" }, + { 0x04000000, "R-Build-For-RTR" }, + { 0, NULL } +}; + +static const struct tok auth_type[] = { + { LISP_AUTH_NONE, "None" }, + { LISP_AUTH_SHA1, "SHA1" }, + { LISP_AUTH_SHA256, "SHA256" }, + { 0, NULL} +}; + +static const struct tok lisp_eid_action[] = { + { 0, "No-Action" }, + { 1, "Natively-Forward" }, + { 2, "Send-Map-Request" }, + { 3, "Drop" }, + { 0, NULL} +}; + +static const struct tok lisp_loc_flag[] = { + { 0x0004, "Local-Locator" }, + { 0x0002, "RLoc-Probed" }, + { 0x0001, "Reachable" }, + { 0, NULL } +}; + +typedef struct map_register_hdr { + uint8_t type_and_flag; + uint8_t reserved; + uint8_t reserved_and_flag2; + uint8_t record_count; + uint64_t nonce; + uint16_t key_id; + uint16_t auth_data_len; +} UNALIGNED lisp_map_register_hdr; + +#define MAP_REGISTER_HDR_LEN sizeof(lisp_map_register_hdr) + +typedef struct map_register_eid { + uint32_t ttl; + uint8_t locator_count; + uint8_t eid_prefix_mask_length; + uint8_t act_auth_inc_res; + uint8_t reserved; + uint8_t reserved_version_hi; + uint8_t version_low; + uint16_t eid_prefix_afi; +} UNALIGNED lisp_map_register_eid; + +#define MAP_REGISTER_EID_LEN sizeof(lisp_map_register_eid) + +typedef struct map_register_loc { + uint8_t priority; + uint8_t weight; + uint8_t m_priority; + uint8_t m_weight; + uint16_t unused_and_flag; + uint16_t locator_afi; +} UNALIGNED lisp_map_register_loc; + +#define MAP_REGISTER_LOC_LEN sizeof(lisp_map_register_loc) + +static inline uint8_t extract_lisp_type(uint8_t); +static inline uint8_t is_xtr_data_present(uint8_t , uint8_t); +static void lisp_hdr_flag(netdissect_options *, const lisp_map_register_hdr *); +static void action_flag(netdissect_options *, uint8_t); +static void loc_hdr_flag(netdissect_options *, uint16_t); + +void lisp_print(netdissect_options *ndo, const u_char *bp, u_int length) +{ + uint8_t type; + uint8_t mask_len; + uint8_t loc_count; + uint8_t xtr_present; + uint8_t record_count; + uint16_t key_id; + uint16_t eid_afi; + uint16_t loc_afi; + uint16_t map_version; + uint16_t packet_offset; + uint16_t auth_data_len; + uint32_t ttl; + const u_char *packet_iterator; + const u_char *loc_ip_pointer; + const lisp_map_register_hdr *lisp_hdr; + const lisp_map_register_eid *lisp_eid; + const lisp_map_register_loc *lisp_loc; + + /* Check if enough bytes for header are available */ + ND_TCHECK2(*bp, MAP_REGISTER_HDR_LEN); + lisp_hdr = (const lisp_map_register_hdr *) bp; + lisp_hdr_flag(ndo, lisp_hdr); + /* Supporting only MAP NOTIFY and MAP REGISTER LISP packets */ + type = extract_lisp_type(lisp_hdr->type_and_flag); + if ((type != LISP_MAP_REGISTER) && (type != LISP_MAP_NOTIFY)) + return; + + /* Find if the packet contains xTR and Site-ID data */ + xtr_present = is_xtr_data_present(type, lisp_hdr->type_and_flag); + + /* Extract the number of EID records present */ + auth_data_len = EXTRACT_16BITS(&lisp_hdr->auth_data_len); + packet_iterator = (const u_char *)(lisp_hdr); + packet_offset = MAP_REGISTER_HDR_LEN; + record_count = lisp_hdr->record_count; + + if (ndo->ndo_vflag) { + key_id = EXTRACT_16BITS(&lisp_hdr->key_id); + ND_PRINT((ndo, "\n %u record(s), ", record_count)); + ND_PRINT((ndo, "Authentication %s,", + tok2str(auth_type, "unknown-type", key_id))); + hex_print(ndo, "\n Authentication-Data: ", packet_iterator + + packet_offset, auth_data_len); + } else { + ND_PRINT((ndo, " %u record(s),", record_count)); + } + packet_offset += auth_data_len; + + if (record_count == 0) + goto malformed; + + /* Print all the EID records */ + while ((length > packet_offset) && (record_count--)) { + + ND_TCHECK2(*(packet_iterator + packet_offset), MAP_REGISTER_EID_LEN); + ND_PRINT((ndo, "\n")); + lisp_eid = (const lisp_map_register_eid *) + ((const u_char *)lisp_hdr + packet_offset); + packet_offset += MAP_REGISTER_EID_LEN; + mask_len = lisp_eid->eid_prefix_mask_length; + eid_afi = EXTRACT_16BITS(&lisp_eid->eid_prefix_afi); + loc_count = lisp_eid->locator_count; + + if (ndo->ndo_vflag) { + ttl = EXTRACT_32BITS(&lisp_eid->ttl); + ND_PRINT((ndo, " Record TTL %u,", ttl)); + action_flag(ndo, lisp_eid->act_auth_inc_res); + map_version = (((lisp_eid->reserved_version_hi) & 15 ) * 255) + + lisp_eid->version_low; + ND_PRINT((ndo, " Map Version: %u,", map_version)); + } + + switch (eid_afi) { + case IPv4_AFI: + ND_TCHECK2(*(packet_iterator + packet_offset), 4); + ND_PRINT((ndo, " EID %s/%u,", getname(ndo, + packet_iterator + packet_offset), mask_len)); + packet_offset += 4; + break; + case IPv6_AFI: + ND_TCHECK2(*(packet_iterator + packet_offset), 16); + #ifdef INET6 + ND_PRINT((ndo, " EID %s/%u,", getname6(ndo, + packet_iterator + packet_offset), mask_len)); + #else + ND_PRINT((ndo, " IPv6 EID,")); + #endif + packet_offset += 16; + break; + default: + /* + * No support for LCAF right now. + */ + return; + break; + } + + ND_PRINT((ndo, " %u locator(s)", loc_count)); + + while (loc_count--) { + ND_TCHECK2(*(packet_iterator + packet_offset), MAP_REGISTER_LOC_LEN); + lisp_loc = (const lisp_map_register_loc *) (packet_iterator + packet_offset); + loc_ip_pointer = (const u_char *) (lisp_loc + 1); + packet_offset += MAP_REGISTER_LOC_LEN; + loc_afi = EXTRACT_16BITS(&lisp_loc->locator_afi); + + if (ndo->ndo_vflag) + ND_PRINT((ndo, "\n ")); + + switch (loc_afi) { + case IPv4_AFI: + ND_TCHECK2(*(packet_iterator + packet_offset), 4); + ND_PRINT((ndo, " LOC %s", getname(ndo, loc_ip_pointer))); + packet_offset += 4; + break; + case IPv6_AFI: + ND_TCHECK2(*(packet_iterator + packet_offset), 16); + #ifdef INET6 + ND_PRINT((ndo, " LOC %s", getname6(ndo, loc_ip_pointer))); + #else + ND_PRINT((ndo, " LOC IPv6")); + #endif + packet_offset += 16; + break; + default: + break; + } + if (ndo->ndo_vflag) { + ND_PRINT((ndo, "\n Priority/Weight %u/%u," + " Multicast Priority/Weight %u/%u,", + lisp_loc->priority, lisp_loc->weight, + lisp_loc->m_priority, lisp_loc->m_weight)); + loc_hdr_flag(ndo, EXTRACT_16BITS(&lisp_loc->unused_and_flag)); + } + } + } + + /* + * Print xTR and Site ID. Handle the fact that the packet could be malformed. + * If the xTR_ID_Present bit is not set, and we still have data to display, + * show it as hex data. + */ + if (xtr_present) { + if (!ND_TTEST2(*(packet_iterator + packet_offset), 24)) + goto malformed; + hex_print_with_offset(ndo, "\n xTR-ID: ", packet_iterator + packet_offset, 16, 0); + ND_PRINT((ndo, "\n SITE-ID: %" PRIu64, + EXTRACT_64BITS(packet_iterator + packet_offset + 16))); + } else { + /* Check if packet isn't over yet */ + if (packet_iterator + packet_offset < ndo->ndo_snapend) { + hex_print_with_offset(ndo, "\n Data: ", packet_iterator + packet_offset, + (ndo->ndo_snapend - (packet_iterator + packet_offset)), 0); + } + } + return; +trunc: + ND_PRINT((ndo, "\n [|LISP]")); + return; +malformed: + ND_PRINT((ndo, "\n (malformed-packet)")); + return; +} + + +static inline uint8_t extract_lisp_type(uint8_t lisp_hdr_flags) +{ + return (lisp_hdr_flags) >> TYPE_INDEX; +} + +static inline uint8_t is_xtr_data_present(uint8_t type, uint8_t lisp_hdr_flags) +{ + uint8_t xtr_present; + + if (type == LISP_MAP_REGISTER) + xtr_present = (lisp_hdr_flags) & LISP_MAP_REGISTER_IBIT_MASK; + else if (type == LISP_MAP_NOTIFY) + xtr_present = (lisp_hdr_flags) & LISP_MAP_NOTIFY_IBIT_MASK; + + return xtr_present; +} + +static void lisp_hdr_flag(netdissect_options *ndo, const lisp_map_register_hdr *lisp_hdr) +{ + uint8_t type = extract_lisp_type(lisp_hdr->type_and_flag); + + if (!ndo->ndo_vflag) { + ND_PRINT((ndo, "%s,", tok2str(lisp_type, "unknown-type-%u", type))); + return; + } else { + ND_PRINT((ndo, "%s,", tok2str(lisp_type, "unknown-type-%u", type))); + } + + if (type == LISP_MAP_REGISTER) { + ND_PRINT((ndo, " flags [%s],", bittok2str(map_register_hdr_flag, + "none", EXTRACT_32BITS(lisp_hdr)))); + } else if (type == LISP_MAP_NOTIFY) { + ND_PRINT((ndo, " flags [%s],", bittok2str(map_notify_hdr_flag, + "none", EXTRACT_32BITS(lisp_hdr)))); + } + + return; +} + + +static void action_flag(netdissect_options *ndo, uint8_t act_auth_inc_res) +{ + uint8_t action; + uint8_t authoritative; + + authoritative = ((act_auth_inc_res >> 4) & 1); + + if (authoritative) + ND_PRINT((ndo, " Authoritative,")); + else + ND_PRINT((ndo, " Non-Authoritative,")); + + action = act_auth_inc_res >> 5; + ND_PRINT((ndo, " %s,", tok2str(lisp_eid_action, "unknown", action))); +} + + +static void loc_hdr_flag(netdissect_options *ndo, uint16_t flag) +{ + ND_PRINT((ndo, " flags [%s],", bittok2str(lisp_loc_flag, "none", flag))); +} + diff --git a/print-udp.c b/print-udp.c index cc6b275e..f9a6e333 100644 --- a/print-udp.c +++ b/print-udp.c @@ -652,6 +652,8 @@ udp_print(netdissect_options *ndo, register const u_char *bp, u_int length, vxlan_print(ndo, (const u_char *)(up + 1), length); else if (ISPORT(GENEVE_PORT)) geneve_print(ndo, (const u_char *)(up + 1), length); + else if (ISPORT(LISP_CONTROL_PORT)) + lisp_print(ndo, (const u_char *)(up + 1), length); else { if (ulen > length) ND_PRINT((ndo, "UDP, bad length %u > %u", diff --git a/tests/TESTLIST b/tests/TESTLIST index 9aed41d8..043612da 100644 --- a/tests/TESTLIST +++ b/tests/TESTLIST @@ -306,3 +306,8 @@ olsrv1_1 OLSRv1_HNA_sgw_1.pcap OLSRv1_HNA_sgw_1.out -t -v # tests with unaligned data, to make sure they work on SPARC unaligned-nfs-1 unaligned-nfs-1.pcap unaligned-nfs-1.out -t -v + +# LISP tests +lisp_eid_notify lisp_eid_notify.pcap lisp_eid_notify.out -t -v +lisp_eid_register lisp_eid_register.pcap lisp_eid_register.out -t -v +lisp_ipv6_eid lisp_ipv6.pcap lisp_ipv6.out -t -v diff --git a/tests/lisp_eid_notify.out b/tests/lisp_eid_notify.out new file mode 100644 index 00000000..d3330218 --- /dev/null +++ b/tests/lisp_eid_notify.out @@ -0,0 +1,63 @@ +IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 160) + 192.168.0.105.4342 > 127.0.0.1.4342: LISP-Map-Notify, flags [none], + 3 record(s), Authentication SHA1, + Authentication-Data: 0x0000: 4bbb 9614 a67a 8604 0407 7995 4537 1906 + Authentication-Data: 0x0010: 836c d1d6 + Record TTL 1440, Authoritative, No-Action, Map Version: 0, EID 10.30.1.100/32, 1 locator(s) + LOC 20.20.8.253 + Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none], + Record TTL 1440, Authoritative, No-Action, Map Version: 0, EID 10.30.1.96/32, 2 locator(s) + LOC 20.20.8.251 + Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none], + LOC 20.20.8.252 + Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none], + Record TTL 1440, Authoritative, No-Action, Map Version: 0, EID 10.30.1.80/32, 1 locator(s) + LOC 20.20.8.239 + Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none], +IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 156) + 192.168.0.105.4342 > 127.0.0.1.4342: LISP-Map-Notify, flags [I-xTR-ID-Present], + 2 record(s), Authentication SHA1, + Authentication-Data: 0x0000: 4bbb 9614 a67a 8604 0407 7995 4537 1906 + Authentication-Data: 0x0010: 836c d1d6 + Record TTL 1440, Authoritative, No-Action, Map Version: 0, EID 10.30.1.100/32, 1 locator(s) + LOC 20.20.8.253 + Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none], + Record TTL 1440, Authoritative, No-Action, Map Version: 0, EID 10.30.1.96/32, 2 locator(s) + LOC 20.20.8.251 + Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none], + LOC 20.20.8.252 + Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none], + xTR-ID: 0x0000: 9787 ad75 3caf 58a7 13fa 6920 e6d2 7a8f + SITE-ID: 0 +IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 160) + 192.168.0.105.4342 > 127.0.0.1.4342: LISP-Map-Notify, flags [I-xTR-ID-Present], + 3 record(s), Authentication SHA1, + Authentication-Data: 0x0000: 4bbb 9614 a67a 8604 0407 7995 4537 1906 + Authentication-Data: 0x0010: 836c d1d6 + Record TTL 1440, Authoritative, No-Action, Map Version: 0, EID 10.30.1.100/32, 1 locator(s) + LOC 20.20.8.253 + Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none], + Record TTL 1440, Authoritative, No-Action, Map Version: 0, EID 10.30.1.96/32, 2 locator(s) + LOC 20.20.8.251 + Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none], + LOC 20.20.8.252 + Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none], + Record TTL 1440, Authoritative, No-Action, Map Version: 0, EID 10.30.1.80/32, 1 locator(s) + LOC 20.20.8.239 + Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none], + (malformed-packet) +IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 156) + 192.168.0.105.4342 > 127.0.0.1.4342: LISP-Map-Notify, flags [none], + 2 record(s), Authentication SHA1, + Authentication-Data: 0x0000: 4bbb 9614 a67a 8604 0407 7995 4537 1906 + Authentication-Data: 0x0010: 836c d1d6 + Record TTL 1440, Authoritative, No-Action, Map Version: 0, EID 10.30.1.100/32, 1 locator(s) + LOC 20.20.8.253 + Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none], + Record TTL 1440, Authoritative, No-Action, Map Version: 0, EID 10.30.1.96/32, 2 locator(s) + LOC 20.20.8.251 + Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none], + LOC 20.20.8.252 + Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none], + Data: 0x0000: 9787 ad75 3caf 58a7 13fa 6920 e6d2 7a8f + Data: 0x0010: 0000 0000 0000 0000 diff --git a/tests/lisp_eid_notify.pcap b/tests/lisp_eid_notify.pcap new file mode 100644 index 00000000..1f83378f Binary files /dev/null and b/tests/lisp_eid_notify.pcap differ diff --git a/tests/lisp_eid_register.out b/tests/lisp_eid_register.out new file mode 100644 index 00000000..7687b659 --- /dev/null +++ b/tests/lisp_eid_register.out @@ -0,0 +1,28 @@ +IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 144) + 192.168.0.105.4342 > 127.0.0.1.4342: LISP-Map-Register, flags [I-xTR-ID-Present, M-Want-Map-Notify], + 2 record(s), Authentication SHA1, + Authentication-Data: 0x0000: 4bbb 9614 a67a 8604 0407 7995 4537 1906 + Authentication-Data: 0x0010: 836c d1d6 + Record TTL 1440, Authoritative, No-Action, Map Version: 0, EID 10.30.1.100/32, 1 locator(s) + LOC 20.20.8.253 + Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none], + Record TTL 1440, Authoritative, No-Action, Map Version: 0, EID 10.30.1.96/32, 1 locator(s) + LOC 20.20.8.252 + Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none], + xTR-ID: 0x0000: 9787 ad75 3caf 58a7 13fa 6920 e6d2 7a8f + SITE-ID: 0 +IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 156) + 192.168.0.105.4342 > 127.0.0.1.4342: LISP-Map-Register, flags [I-xTR-ID-Present, M-Want-Map-Notify], + 2 record(s), Authentication SHA1, + Authentication-Data: 0x0000: 4bbb 9614 a67a 8604 0407 7995 4537 1906 + Authentication-Data: 0x0010: 836c d1d6 + Record TTL 1440, Authoritative, No-Action, Map Version: 0, EID 10.30.1.100/32, 1 locator(s) + LOC 20.20.8.253 + Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none], + Record TTL 1440, Authoritative, No-Action, Map Version: 0, EID 10.30.1.96/32, 2 locator(s) + LOC 20.20.8.251 + Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none], + LOC 20.20.8.252 + Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none], + xTR-ID: 0x0000: 9787 ad75 3caf 58a7 13fa 6920 e6d2 7a8f + SITE-ID: 0 diff --git a/tests/lisp_eid_register.pcap b/tests/lisp_eid_register.pcap new file mode 100644 index 00000000..a6d71ef0 Binary files /dev/null and b/tests/lisp_eid_register.pcap differ diff --git a/tests/lisp_ipv6.out b/tests/lisp_ipv6.out new file mode 100644 index 00000000..e33844ca --- /dev/null +++ b/tests/lisp_ipv6.out @@ -0,0 +1,24 @@ +IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 168) + 192.168.0.105.4342 > 127.0.0.1.4342: LISP-Map-Register, flags [I-xTR-ID-Present, M-Want-Map-Notify], + 2 record(s), Authentication SHA1, + Authentication-Data: 0x0000: 4bbb 9614 a67a 8604 0407 7995 4537 1906 + Authentication-Data: 0x0010: 836c d1d6 + Record TTL 1440, Authoritative, No-Action, Map Version: 0, IPv6 EID, 1 locator(s) + LOC 20.20.8.253 + Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none], + Record TTL 1440, Authoritative, No-Action, Map Version: 0, IPv6 EID, 1 locator(s) + LOC 20.20.8.251 + Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none], + xTR-ID: 0x0000: 9787 ad75 3caf 58a7 13fa 6920 e6d2 7a8f + SITE-ID: 0 +IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 144) + 192.168.0.105.4342 > 127.0.0.1.4342: LISP-Map-Notify, flags [none], + 2 record(s), Authentication SHA1, + Authentication-Data: 0x0000: 4bbb 9614 a67a 8604 0407 7995 4537 1906 + Authentication-Data: 0x0010: 836c d1d6 + Record TTL 1440, Authoritative, No-Action, Map Version: 0, IPv6 EID, 1 locator(s) + LOC 20.20.8.253 + Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none], + Record TTL 1440, Authoritative, No-Action, Map Version: 0, IPv6 EID, 1 locator(s) + LOC 20.20.8.251 + Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none], diff --git a/tests/lisp_ipv6.pcap b/tests/lisp_ipv6.pcap new file mode 100644 index 00000000..b878efd2 Binary files /dev/null and b/tests/lisp_ipv6.pcap differ diff --git a/udp.h b/udp.h index ca6836fa..184947a4 100644 --- a/udp.h +++ b/udp.h @@ -248,6 +248,9 @@ struct udphdr { #ifndef NFS_LOCK_DAEMON_PORT #define NFS_LOCK_DAEMON_PORT 4045 /*XXX*/ #endif +#ifndef LISP_CONTROL_PORT +#define LISP_CONTROL_PORT 4342 /* RFC 6830 */ +#endif #ifndef ISAKMP_PORT_NATT #define ISAKMP_PORT_NATT 4500 /* rfc3948 */ #endif