forked from osmocom/wireshark
From David Frascone: support LWAPP on port 12223 (for control traffic)
and, for packets sent to that port, handle the MAC address that's at the beginning of the packet. svn path=/trunk/; revision=9298
This commit is contained in:
parent
337ea44dd8
commit
6ab609c044
|
@ -3,7 +3,7 @@
|
||||||
* Routines for LWAPP encapsulated packet disassembly
|
* Routines for LWAPP encapsulated packet disassembly
|
||||||
* draft-calhoun-seamoby-lwapp-N (the current draft is 3)
|
* draft-calhoun-seamoby-lwapp-N (the current draft is 3)
|
||||||
*
|
*
|
||||||
* $Id: packet-lwapp.c,v 1.4 2003/09/24 23:35:39 guy Exp $
|
* $Id: packet-lwapp.c,v 1.5 2003/12/16 19:58:45 guy Exp $
|
||||||
*
|
*
|
||||||
* Copyright (c) 2003 by David Frascone <dave@frascone.com>
|
* Copyright (c) 2003 by David Frascone <dave@frascone.com>
|
||||||
*
|
*
|
||||||
|
@ -69,6 +69,7 @@ static gint hf_lwapp_length = -1;
|
||||||
static gint hf_lwapp_rssi = -1;
|
static gint hf_lwapp_rssi = -1;
|
||||||
static gint hf_lwapp_snr = -1;
|
static gint hf_lwapp_snr = -1;
|
||||||
static gint hf_lwapp_control = -1;
|
static gint hf_lwapp_control = -1;
|
||||||
|
static gint hf_lwapp_control_mac = -1;
|
||||||
static gint hf_lwapp_control_type = -1;
|
static gint hf_lwapp_control_type = -1;
|
||||||
static gint hf_lwapp_control_seq_no = -1;
|
static gint hf_lwapp_control_seq_no = -1;
|
||||||
static gint hf_lwapp_control_length = -1;
|
static gint hf_lwapp_control_length = -1;
|
||||||
|
@ -345,11 +346,13 @@ static void dissect_lwapp(tvbuff_t *tvb, packet_info *pinfo,
|
||||||
proto_tree *tree)
|
proto_tree *tree)
|
||||||
{
|
{
|
||||||
LWAPP_Header header;
|
LWAPP_Header header;
|
||||||
guint8 slotId;
|
guint8 slotId;
|
||||||
guint8 version;
|
guint8 version;
|
||||||
proto_tree *lwapp_tree;
|
proto_tree *lwapp_tree;
|
||||||
proto_tree *flags_tree;
|
proto_tree *flags_tree;
|
||||||
tvbuff_t *next_client;
|
tvbuff_t *next_client;
|
||||||
|
char dest_mac[6];
|
||||||
|
guint8 have_destmac=0;
|
||||||
|
|
||||||
/* Set up structures needed to add the protocol subtree and manage it */
|
/* Set up structures needed to add the protocol subtree and manage it */
|
||||||
proto_item *ti;
|
proto_item *ti;
|
||||||
|
@ -364,8 +367,20 @@ static void dissect_lwapp(tvbuff_t *tvb, packet_info *pinfo,
|
||||||
"LWAPP IP or Layer 2");
|
"LWAPP IP or Layer 2");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Copy our header */
|
/* First, set up our dest mac, if we're a control packet with a
|
||||||
tvb_memcpy(tvb, (guint8*) &header, offset, sizeof(header));
|
* dest of port 12223 */
|
||||||
|
if (pinfo->destport == 12223 ) {
|
||||||
|
tvb_memcpy(tvb, (guint8*)dest_mac, offset, 6);
|
||||||
|
have_destmac = 1;
|
||||||
|
|
||||||
|
/* Copy our header */
|
||||||
|
tvb_memcpy(tvb, (guint8*) &header, offset + 6, sizeof(header));
|
||||||
|
} else {
|
||||||
|
|
||||||
|
/* Copy our header */
|
||||||
|
tvb_memcpy(tvb, (guint8*) &header, offset, sizeof(header));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Fix the length (network byte ordering), and set our version &
|
* Fix the length (network byte ordering), and set our version &
|
||||||
|
@ -393,6 +408,12 @@ static void dissect_lwapp(tvbuff_t *tvb, packet_info *pinfo,
|
||||||
tvb_length(tvb), FALSE);
|
tvb_length(tvb), FALSE);
|
||||||
lwapp_tree = proto_item_add_subtree(ti, ett_lwapp);
|
lwapp_tree = proto_item_add_subtree(ti, ett_lwapp);
|
||||||
|
|
||||||
|
if (have_destmac) {
|
||||||
|
proto_tree_add_ether(lwapp_tree, hf_lwapp_control_mac, tvb, offset,
|
||||||
|
6, dest_mac);
|
||||||
|
offset += 6;
|
||||||
|
}
|
||||||
|
|
||||||
proto_tree_add_uint(lwapp_tree, hf_lwapp_version,
|
proto_tree_add_uint(lwapp_tree, hf_lwapp_version,
|
||||||
tvb, offset, 1, version);
|
tvb, offset, 1, version);
|
||||||
proto_tree_add_uint(lwapp_tree, hf_lwapp_slotid,
|
proto_tree_add_uint(lwapp_tree, hf_lwapp_slotid,
|
||||||
|
@ -425,7 +446,7 @@ static void dissect_lwapp(tvbuff_t *tvb, packet_info *pinfo,
|
||||||
|
|
||||||
} /* tree */
|
} /* tree */
|
||||||
|
|
||||||
next_client = tvb_new_subset(tvb, sizeof(LWAPP_Header), -1, -1);
|
next_client = tvb_new_subset(tvb, (have_destmac?6:0) + sizeof(LWAPP_Header), -1, -1);
|
||||||
if ((header.flags & LWAPP_FLAGS_T) == 0) {
|
if ((header.flags & LWAPP_FLAGS_T) == 0) {
|
||||||
call_dissector(swap_frame_control ? wlan_bsfc_handle : wlan_handle,
|
call_dissector(swap_frame_control ? wlan_bsfc_handle : wlan_handle,
|
||||||
next_client, pinfo, tree);
|
next_client, pinfo, tree);
|
||||||
|
@ -473,6 +494,9 @@ proto_register_lwapp(void)
|
||||||
{ &hf_lwapp_control,
|
{ &hf_lwapp_control,
|
||||||
{ "Control Data (not dissected yet)","lwapp.control", FT_BYTES, BASE_NONE,
|
{ "Control Data (not dissected yet)","lwapp.control", FT_BYTES, BASE_NONE,
|
||||||
NULL, 0x0, "", HFILL }},
|
NULL, 0x0, "", HFILL }},
|
||||||
|
{ &hf_lwapp_control_mac,
|
||||||
|
{ "AP Identity", "lwapp.apid", FT_ETHER, BASE_NONE, NULL, 0x0,
|
||||||
|
"Access Point Identity", HFILL }},
|
||||||
{ &hf_lwapp_control_type,
|
{ &hf_lwapp_control_type,
|
||||||
{ "Control Type", "lwapp.control.type", FT_UINT8, BASE_DEC, NULL, 0x00,
|
{ "Control Type", "lwapp.control.type", FT_UINT8, BASE_DEC, NULL, 0x00,
|
||||||
"", HFILL }},
|
"", HFILL }},
|
||||||
|
@ -556,6 +580,7 @@ proto_reg_handoff_lwapp(void)
|
||||||
|
|
||||||
/* new-style lwapp directly over UDP: L3-lwapp*/
|
/* new-style lwapp directly over UDP: L3-lwapp*/
|
||||||
dissector_add("udp.port", 12222, lwapp_handle);
|
dissector_add("udp.port", 12222, lwapp_handle);
|
||||||
|
dissector_add("udp.port", 12223, lwapp_handle);
|
||||||
|
|
||||||
/* Lwapp over L2 */
|
/* Lwapp over L2 */
|
||||||
dissector_add("ethertype", 0x88bb, lwapp_handle);
|
dissector_add("ethertype", 0x88bb, lwapp_handle);
|
||||||
|
|
Loading…
Reference in New Issue