From bb8fc20cd3491ce95e70272ea55e8ed73edfcfc3 Mon Sep 17 00:00:00 2001 From: Bill Meier Date: Sun, 4 Oct 2009 17:50:39 +0000 Subject: 1. There doesn't seem to be a need for a separate .h file; 2. Move prototype declarations to after the struct declarations used by the prototypes. 3. Fix some typos. svn path=/trunk/; revision=30310 --- epan/dissectors/packet-6lowpan.c | 184 ++++++++++++++++++++++++++++++++++----- epan/dissectors/packet-6lowpan.h | 161 ---------------------------------- 2 files changed, 160 insertions(+), 185 deletions(-) delete mode 100644 epan/dissectors/packet-6lowpan.h (limited to 'epan') diff --git a/epan/dissectors/packet-6lowpan.c b/epan/dissectors/packet-6lowpan.c index a62db4d835..1d8101a4ca 100644 --- a/epan/dissectors/packet-6lowpan.c +++ b/epan/dissectors/packet-6lowpan.c @@ -36,8 +36,144 @@ #include #include "epan/dissectors/packet-ipv6.h" #include "epan/dissectors/packet-ieee802154.h" -#include "packet-6lowpan.h" +/* Definitions for 6lowpan packet disassembly structures and routines */ + +/* 6LoWPAN Patterns */ +#define LOWPAN_PATTERN_NALP 0x00 +#define LOWPAN_PATTERN_NALP_BITS 2 +#define LOWPAN_PATTERN_IPV6 0x41 +#define LOWPAN_PATTERN_IPV6_BITS 8 +#define LOWPAN_PATTERN_HC1 0x42 /* Deprecated - replaced with IPHC. */ +#define LOWPAN_PATTERN_HC1_BITS 8 +#define LOWPAN_PATTERN_BC0 0x50 +#define LOWPAN_PATTERN_BC0_BITS 8 +#define LOWPAN_PATTERN_IPHC 0x03 /* See draft-ietf-6lowpan-hc-05.txt */ +#define LOWPAN_PATTERN_IPHC_BITS 3 +#define LOWPAN_PATTERN_ESC 0x7f +#define LOWPAN_PATTERN_ESC_BITS 8 +#define LOWPAN_PATTERN_MESH 0x02 +#define LOWPAN_PATTERN_MESH_BITS 2 +#define LOWPAN_PATTERN_FRAG1 0x18 +#define LOWPAN_PATTERN_FRAGN 0x1c +#define LOWPAN_PATTERN_FRAG_BITS 5 + +/* 6LoWPAN HC1 Header */ +#define LOWPAN_HC1_SOURCE_PREFIX 0x80 +#define LOWPAN_HC1_SOURCE_IFC 0x40 +#define LOWPAN_HC1_DEST_PREFIX 0x20 +#define LOWPAN_HC1_DEST_IFC 0x10 +#define LOWPAN_HC1_TRAFFIC_CLASS 0x08 +#define LOWPAN_HC1_NEXT 0x06 +#define LOWPAN_HC1_MORE 0x01 + +/* IPv6 header field lengths (in bits) */ +#define LOWPAN_IPV6_TRAFFIC_CLASS_BITS 8 +#define LOWPAN_IPV6_FLOW_LABEL_BITS 20 +#define LOWPAN_IPV6_NEXT_HEADER_BITS 8 +#define LOWPAN_IPV6_HOP_LIMIT_BITS 8 +#define LOWPAN_IPV6_PREFIX_BITS 64 +#define LOWPAN_IPV6_INTERFACE_BITS 64 + +/* HC_UDP header field lengths (in bits). */ +#define LOWPAN_UDP_PORT_BITS 16 +#define LOWPAN_UDP_PORT_COMPRESSED_BITS 4 +#define LOWPAN_UDP_LENGTH_BITS 16 +#define LOWPAN_UDP_CHECKSUM_BITS 16 + +/* HC1 Next Header compression modes. */ +#define LOWPAN_HC1_NEXT_NONE 0x00 +#define LOWPAN_HC1_NEXT_UDP 0x01 +#define LOWPAN_HC1_NEXT_ICMP 0x02 +#define LOWPAN_HC1_NEXT_TCP 0x03 + +/* HC_UDP Header */ +#define LOWPAN_HC2_UDP_SRCPORT 0x80 +#define LOWPAN_HC2_UDP_DSTPORT 0x40 +#define LOWPAN_HC2_UDP_LENGTH 0x20 +#define LOWPAN_HC2_UDP_RESERVED 0x1f + +/* IPHC Base flags */ +#define LOWPAN_IPHC_FLAG_FLOW 0x1800 +#define LOWPAN_IPHC_FLAG_NHDR 0x0400 +#define LOWPAN_IPHC_FLAG_HLIM 0x0300 +#define LOWPAN_IPHC_FLAG_CONTEXT_ID 0x0080 +#define LOWPAN_IPHC_FLAG_SRC_COMP 0x0040 +#define LOWPAN_IPHC_FLAG_SRC_MODE 0x0030 +#define LOWPAN_IPHC_FLAG_MCAST_COMP 0x0008 +#define LOWPAN_IPHC_FLAG_DST_COMP 0x0004 +#define LOWPAN_IPHC_FLAG_DST_MODE 0x0003 +#define LOWPAN_IPHC_FLAG_SCI 0xf0 +#define LOWPAN_IPHC_FLAG_DCI 0x0f +/* Offsets for extracting integer fields. */ +#define LOWPAN_IPHC_FLAG_OFFSET_FLOW 11 +#define LOWPAN_IPHC_FLAG_OFFSET_HLIM 8 +#define LOWPAN_IPHC_FLAG_OFFSET_SRC_MODE 4 +#define LOWPAN_IPHC_FLAG_OFFSET_DST_MODE 0 + +/* IPHC Flow encoding values. */ +#define LOWPAN_IPHC_FLOW_CLASS_LABEL 0x0 +#define LOWPAN_IPHC_FLOW_ECN_LABEL 0x1 +#define LOWPAN_IPHC_FLOW_CLASS 0x2 +#define LOWPAN_IPHC_FLOW_COMPRESSED 0x3 + +/* IPHC Hop limit encoding. */ +#define LOWPAN_IPHC_HLIM_INLINE 0x0 +#define LOWPAN_IPHC_HLIM_1 0x1 +#define LOWPAN_IPHC_HLIM_64 0x2 +#define LOWPAN_IPHC_HLIM_255 0x3 + +/* IPHC address modes. */ +#define LOWPAN_IPHC_ADDR_FULL_INLINE 0x0 +#define LOWPAN_IPHC_ADDR_64BIT_INLINE 0x1 +#define LOWPAN_IPHC_ADDR_16BIT_INLINE 0x2 +#define LOWPAN_IPHC_ADDR_COMPRESSED 0x3 + +/* IPHC Traffic class and flow label field sizes (in bits) */ +#define LOWPAN_IPHC_ECN_BITS 2 +#define LOWPAN_IPHC_DSCP_BITS 6 +#define LOWPAN_IPHC_LABEL_BITS 20 +/* Bitmasks for the reconstructed traffic class field. */ +#define LOWPAN_IPHC_TRAFFIC_ECN 0x03 +#define LOWPAN_IPHC_TRAFFIC_DSCP 0xfc + +/* NHC Patterns. */ +#define LOWPAN_NHC_PATTERN_EXT 0x0e +#define LOWPAN_NHC_PATTERN_EXT_BITS 4 +#define LOWPAN_NHC_PATTERN_UDP 0x1e +#define LOWPAN_NHC_PATTERN_UDP_BITS 5 + +/* NHC Extension header fields. */ +#define LOWPAN_NHC_EXT_EID 0x0e +#define LOWPAN_NHC_EXT_EID_OFFSET 1 +#define LOWPAN_NHC_EXT_NHDR 0x01 + +#define LOWPAN_NHC_EID_HOP_BY_HOP 0x00 +#define LOWPAN_NHC_EID_ROUTING 0x01 +#define LOWPAN_NHC_EID_FRAGMENT 0x02 +#define LOWPAN_NHC_EID_DEST_OPTIONS 0x03 +#define LOWPAN_NHC_EID_MOBILITY 0x04 +#define LOWPAN_NHC_EID_IPV6 0x07 + +/* NHC UDP fields. */ +#define LOWPAN_NHC_UDP_CHECKSUM 0x04 +#define LOWPAN_NHC_UDP_SRCPORT 0x02 +#define LOWPAN_NHC_UDP_DSTPORT 0x01 + +/* 6LoWPAN Mesh Header */ +#define LOWPAN_MESH_HEADER_V 0x20 +#define LOWPAN_MESH_HEADER_F 0x10 +#define LOWPAN_MESH_HEADER_HOPS 0x0f + +/* 6LoWPAN First Fragment Header */ +#define LOWPAN_FRAG_DGRAM_SIZE_BITS 11 + +/* Compressed port number offset. */ +#define LOWPAN_PORT_8BIT_OFFSET 0xf000 +#define LOWPAN_PORT_12BIT_OFFSET (LOWPAN_PORT_8BIT_OFFSET | 0xb0) + +/* 6LoWPAN interface identifier length. */ +#define LOWPAN_IFC_ID_LEN 8 /* Protocol fields handles. */ static int proto_6lowpan = -1; static int hf_6lowpan_pattern = -1; @@ -125,26 +261,6 @@ static gint ett_6lowpan_mesh_flags = -1; static gint ett_6lowpan_frag = -1; static gint ett_6lopwan_traffic_class = -1; -/* Dissector prototypes */ -static void proto_init_6lowpan (void); -static gboolean dissect_6lowpan_heur (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); -static void dissect_6lowpan (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); -static tvbuff_t * dissect_6lowpan_ipv6 (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); -static tvbuff_t * dissect_6lowpan_hc1 (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); -static tvbuff_t * dissect_6lowpan_bc0 (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); -static tvbuff_t * dissect_6lowpan_iphc (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); -static struct lowpan_nhdr * dissect_6lowpan_iphc_nhc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gint offset); -static tvbuff_t * dissect_6lowpan_mesh (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); -static tvbuff_t * dissect_6lowpan_frag (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gboolean first); -static tvbuff_t * dissect_6lowpan_unknown (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); - -/* Helper functions. */ -static gboolean lowpan_dlsrc_to_ifcid (packet_info *pinfo, guint8 *ifcid); -static gboolean lowpan_dldst_to_ifcid (packet_info *pinfo, guint8 *ifcid); -static void lowpan_addr16_to_ifcid (guint16 addr, guint16 pan, guint8 *ifcid); -static tvbuff_t * lowpan_reassemble_ipv6 (struct ip6_hdr * ipv6, struct lowpan_nhdr * nhdr_list); -static guint8 lowpan_parse_nhc_proto (tvbuff_t *tvb, gint offset); - /* Subdissector handles. */ static dissector_handle_t data_handle; static dissector_handle_t ipv6_handle; @@ -261,7 +377,7 @@ struct udp_hdr { guint16 checksum; }; -/* Structure used to store decompressed header chains until reaseembly. */ +/* Structure used to store decompressed header chains until reassembly. */ struct lowpan_nhdr { /* List Linking */ struct lowpan_nhdr *next; @@ -272,6 +388,26 @@ struct lowpan_nhdr { guint8 hdr[]; }; +/* Dissector prototypes */ +static void proto_init_6lowpan (void); +static gboolean dissect_6lowpan_heur (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); +static void dissect_6lowpan (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); +static tvbuff_t * dissect_6lowpan_ipv6 (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); +static tvbuff_t * dissect_6lowpan_hc1 (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); +static tvbuff_t * dissect_6lowpan_bc0 (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); +static tvbuff_t * dissect_6lowpan_iphc (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); +static struct lowpan_nhdr * dissect_6lowpan_iphc_nhc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gint offset); +static tvbuff_t * dissect_6lowpan_mesh (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); +static tvbuff_t * dissect_6lowpan_frag (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gboolean first); +static tvbuff_t * dissect_6lowpan_unknown (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); + +/* Helper functions. */ +static gboolean lowpan_dlsrc_to_ifcid (packet_info *pinfo, guint8 *ifcid); +static gboolean lowpan_dldst_to_ifcid (packet_info *pinfo, guint8 *ifcid); +static void lowpan_addr16_to_ifcid (guint16 addr, guint16 pan, guint8 *ifcid); +static tvbuff_t * lowpan_reassemble_ipv6 (struct ip6_hdr * ipv6, struct lowpan_nhdr * nhdr_list); +static guint8 lowpan_parse_nhc_proto (tvbuff_t *tvb, gint offset); + /*FUNCTION:------------------------------------------------------ * NAME * lowpan_addr16_to_ifcid @@ -1344,7 +1480,7 @@ dissect_6lowpan_iphc_nhc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gi /* Parse the IPv6 extension header protocol. */ ext_proto = lowpan_parse_nhc_proto(tvb, offset); - /* Create a tree for the IPv6 extnesion header. */ + /* Create a tree for the IPv6 extension header. */ if (tree) { ti = proto_tree_add_text(tree, tvb, 0, sizeof(guint16), "IPv6 extension header"); nhc_tree = proto_item_add_subtree(ti, ett_6lowpan_nhc_ext); @@ -1925,7 +2061,7 @@ proto_register_6lowpan(void) { &hf_6lowpan_iphc_flag_sac, { "Source address compression", "6lowpan.iphc.sac", FT_BOOLEAN, 16, TFS(&lowpan_iphc_addr_compression), LOWPAN_IPHC_FLAG_SRC_COMP, NULL, HFILL }}, { &hf_6lowpan_iphc_flag_sam, - { "Source address mode", "6lowpan.iphc.sac", FT_UINT16, BASE_HEX, VALS(lowpan_iphc_addr_modes), LOWPAN_IPHC_FLAG_SRC_MODE, NULL, HFILL }}, + { "Source address mode", "6lowpan.iphc.sam", FT_UINT16, BASE_HEX, VALS(lowpan_iphc_addr_modes), LOWPAN_IPHC_FLAG_SRC_MODE, NULL, HFILL }}, { &hf_6lowpan_iphc_flag_mcast, { "Multicast address compression", "6lowpan.iphc.m", FT_BOOLEAN, 16, NULL, LOWPAN_IPHC_FLAG_MCAST_COMP, NULL, HFILL }}, { &hf_6lowpan_iphc_flag_dac, diff --git a/epan/dissectors/packet-6lowpan.h b/epan/dissectors/packet-6lowpan.h deleted file mode 100644 index 497b89efeb..0000000000 --- a/epan/dissectors/packet-6lowpan.h +++ /dev/null @@ -1,161 +0,0 @@ -/* packet-6lowpan.h - * Definitions for 6lowpan packet disassembly structures and routines - * By Owen Kirby - * Copyright 2009 Owen Kirby - * - * $Id$ - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * Copyright 1998 Gerald Combs - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -/* 6LoWPAN Patterns */ -#define LOWPAN_PATTERN_NALP 0x00 -#define LOWPAN_PATTERN_NALP_BITS 2 -#define LOWPAN_PATTERN_IPV6 0x41 -#define LOWPAN_PATTERN_IPV6_BITS 8 -#define LOWPAN_PATTERN_HC1 0x42 /* Deprecated - replaced with IPHC. */ -#define LOWPAN_PATTERN_HC1_BITS 8 -#define LOWPAN_PATTERN_BC0 0x50 -#define LOWPAN_PATTERN_BC0_BITS 8 -#define LOWPAN_PATTERN_IPHC 0x03 /* See draft-ietf-6lowpan-hc-05.txt */ -#define LOWPAN_PATTERN_IPHC_BITS 3 -#define LOWPAN_PATTERN_ESC 0x7f -#define LOWPAN_PATTERN_ESC_BITS 8 -#define LOWPAN_PATTERN_MESH 0x02 -#define LOWPAN_PATTERN_MESH_BITS 2 -#define LOWPAN_PATTERN_FRAG1 0x18 -#define LOWPAN_PATTERN_FRAGN 0x1c -#define LOWPAN_PATTERN_FRAG_BITS 5 - -/* 6LoWPAN HC1 Header */ -#define LOWPAN_HC1_SOURCE_PREFIX 0x80 -#define LOWPAN_HC1_SOURCE_IFC 0x40 -#define LOWPAN_HC1_DEST_PREFIX 0x20 -#define LOWPAN_HC1_DEST_IFC 0x10 -#define LOWPAN_HC1_TRAFFIC_CLASS 0x08 -#define LOWPAN_HC1_NEXT 0x06 -#define LOWPAN_HC1_MORE 0x01 - -/* IPv6 header field lengths (in bits) */ -#define LOWPAN_IPV6_TRAFFIC_CLASS_BITS 8 -#define LOWPAN_IPV6_FLOW_LABEL_BITS 20 -#define LOWPAN_IPV6_NEXT_HEADER_BITS 8 -#define LOWPAN_IPV6_HOP_LIMIT_BITS 8 -#define LOWPAN_IPV6_PREFIX_BITS 64 -#define LOWPAN_IPV6_INTERFACE_BITS 64 - -/* HC_UDP header field lengths (in bits). */ -#define LOWPAN_UDP_PORT_BITS 16 -#define LOWPAN_UDP_PORT_COMPRESSED_BITS 4 -#define LOWPAN_UDP_LENGTH_BITS 16 -#define LOWPAN_UDP_CHECKSUM_BITS 16 - -/* HC1 Next Header compression modes. */ -#define LOWPAN_HC1_NEXT_NONE 0x00 -#define LOWPAN_HC1_NEXT_UDP 0x01 -#define LOWPAN_HC1_NEXT_ICMP 0x02 -#define LOWPAN_HC1_NEXT_TCP 0x03 - -/* HC_UDP Header */ -#define LOWPAN_HC2_UDP_SRCPORT 0x80 -#define LOWPAN_HC2_UDP_DSTPORT 0x40 -#define LOWPAN_HC2_UDP_LENGTH 0x20 -#define LOWPAN_HC2_UDP_RESERVED 0x1f - -/* IPHC Base flags */ -#define LOWPAN_IPHC_FLAG_FLOW 0x1800 -#define LOWPAN_IPHC_FLAG_NHDR 0x0400 -#define LOWPAN_IPHC_FLAG_HLIM 0x0300 -#define LOWPAN_IPHC_FLAG_CONTEXT_ID 0x0080 -#define LOWPAN_IPHC_FLAG_SRC_COMP 0x0040 -#define LOWPAN_IPHC_FLAG_SRC_MODE 0x0030 -#define LOWPAN_IPHC_FLAG_MCAST_COMP 0x0008 -#define LOWPAN_IPHC_FLAG_DST_COMP 0x0004 -#define LOWPAN_IPHC_FLAG_DST_MODE 0x0003 -#define LOWPAN_IPHC_FLAG_SCI 0xf0 -#define LOWPAN_IPHC_FLAG_DCI 0x0f -/* Offsets for extracting integer fields. */ -#define LOWPAN_IPHC_FLAG_OFFSET_FLOW 11 -#define LOWPAN_IPHC_FLAG_OFFSET_HLIM 8 -#define LOWPAN_IPHC_FLAG_OFFSET_SRC_MODE 4 -#define LOWPAN_IPHC_FLAG_OFFSET_DST_MODE 0 - -/* IPHC Flow encoding values. */ -#define LOWPAN_IPHC_FLOW_CLASS_LABEL 0x0 -#define LOWPAN_IPHC_FLOW_ECN_LABEL 0x1 -#define LOWPAN_IPHC_FLOW_CLASS 0x2 -#define LOWPAN_IPHC_FLOW_COMPRESSED 0x3 - -/* IPHC Hop limit encoding. */ -#define LOWPAN_IPHC_HLIM_INLINE 0x0 -#define LOWPAN_IPHC_HLIM_1 0x1 -#define LOWPAN_IPHC_HLIM_64 0x2 -#define LOWPAN_IPHC_HLIM_255 0x3 - -/* IPHC address modes. */ -#define LOWPAN_IPHC_ADDR_FULL_INLINE 0x0 -#define LOWPAN_IPHC_ADDR_64BIT_INLINE 0x1 -#define LOWPAN_IPHC_ADDR_16BIT_INLINE 0x2 -#define LOWPAN_IPHC_ADDR_COMPRESSED 0x3 - -/* IPHC Traffic class and flow label field sizes (in bits) */ -#define LOWPAN_IPHC_ECN_BITS 2 -#define LOWPAN_IPHC_DSCP_BITS 6 -#define LOWPAN_IPHC_LABEL_BITS 20 -/* Bitmasks for the reconstructed traffic class field. */ -#define LOWPAN_IPHC_TRAFFIC_ECN 0x03 -#define LOWPAN_IPHC_TRAFFIC_DSCP 0xfc - -/* NHC Patterns. */ -#define LOWPAN_NHC_PATTERN_EXT 0x0e -#define LOWPAN_NHC_PATTERN_EXT_BITS 4 -#define LOWPAN_NHC_PATTERN_UDP 0x1e -#define LOWPAN_NHC_PATTERN_UDP_BITS 5 - -/* NHC Extension header fields. */ -#define LOWPAN_NHC_EXT_EID 0x0e -#define LOWPAN_NHC_EXT_EID_OFFSET 1 -#define LOWPAN_NHC_EXT_NHDR 0x01 - -#define LOWPAN_NHC_EID_HOP_BY_HOP 0x00 -#define LOWPAN_NHC_EID_ROUTING 0x01 -#define LOWPAN_NHC_EID_FRAGMENT 0x02 -#define LOWPAN_NHC_EID_DEST_OPTIONS 0x03 -#define LOWPAN_NHC_EID_MOBILITY 0x04 -#define LOWPAN_NHC_EID_IPV6 0x07 - -/* NHC UDP fields. */ -#define LOWPAN_NHC_UDP_CHECKSUM 0x04 -#define LOWPAN_NHC_UDP_SRCPORT 0x02 -#define LOWPAN_NHC_UDP_DSTPORT 0x01 - -/* 6LoWPAN Mesh Header */ -#define LOWPAN_MESH_HEADER_V 0x20 -#define LOWPAN_MESH_HEADER_F 0x10 -#define LOWPAN_MESH_HEADER_HOPS 0x0f - -/* 6LoWPAN First Fragment Header */ -#define LOWPAN_FRAG_DGRAM_SIZE_BITS 11 - -/* Compressed port number offset. */ -#define LOWPAN_PORT_8BIT_OFFSET 0xf000 -#define LOWPAN_PORT_12BIT_OFFSET (LOWPAN_PORT_8BIT_OFFSET | 0xb0) - -/* 6LoWPAN interface identifier length. */ -#define LOWPAN_IFC_ID_LEN 8 -- cgit v1.2.3