From Richard Stearn: add support for BPQ (AX.25 on Ethernet).

svn path=/trunk/; revision=44232
This commit is contained in:
Guy Harris 2012-08-02 23:55:42 +00:00
parent 1b876c36f1
commit 931a1077ea
6 changed files with 229 additions and 0 deletions

View File

@ -383,6 +383,7 @@ set(DISSECTOR_SRC
dissectors/packet-bootp.c
dissectors/packet-bootparams.c
dissectors/packet-bpdu.c
dissectors/packet-bpq.c
dissectors/packet-brdwlk.c
dissectors/packet-brp.c
dissectors/packet-bssap.c

View File

@ -303,6 +303,7 @@ DISSECTOR_SRC = \
packet-bootp.c \
packet-bootparams.c \
packet-bpdu.c \
packet-bpq.c \
packet-brdwlk.c \
packet-brp.c \
packet-bssap.c \
@ -1204,6 +1205,7 @@ DISSECTOR_INCLUDES = \
packet-bacapp.h \
packet-ber.h \
packet-bfd.h \
packet-bpq.h \
packet-bssap.h \
packet-bssgp.h \
packet-bthci_acl.h \

View File

@ -0,0 +1,185 @@
/* packet-bpq.c
*
* Routines for Amateur Packet Radio protocol dissection
* Copyright 2005,2006,2007,2008,2009,2010,2012 R.W. Stearn <richard@rns-stearn.demon.co.uk>
*
* $Id$
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
* 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.
*/
/*
* This dissector is for:
* Ethernet encapsulated Amateur AX.25 (AX.25 over Ethernet)
*
* Information was drawn from:
* ?
*
* It uses Ether ID 0x08ff which is not not officially registered.
*
*/
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <glib.h>
#include <epan/strutil.h>
#include <epan/packet.h>
#include <epan/prefs.h>
#include <epan/emem.h>
#include <epan/etypes.h>
#include "packet-bpq.h"
#include "packet-ax25.h"
#define STRLEN 80
#define BPQ_HEADER_SIZE 2 /* length of bpq_len */
/* Forward declaration we need below */
void proto_reg_handoff_bpq(void);
/* Dissector handles - all the possibles are listed */
static dissector_handle_t ax25_handle;
/* Initialize the protocol and registered fields */
static int proto_bpq = -1;
static int hf_bpq_len = -1;
/* Initialize the subtree pointers */
static gint ett_bpq = -1;
/* Code to actually dissect the packets */
static void
dissect_bpq( tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree )
{
proto_item *ti;
proto_tree *bpq_tree;
int offset;
guint16 bpq_len;
void *saved_private_data;
tvbuff_t *next_tvb = NULL;
col_set_str( pinfo->cinfo, COL_PROTOCOL, "BPQ" );
col_clear( pinfo->cinfo, COL_INFO );
/* protocol offset for the BPQ header */
offset = 0;
bpq_len = tvb_get_letohs( tvb, offset );
col_add_fstr( pinfo->cinfo, COL_INFO, "%u", bpq_len );
if ( parent_tree )
{
/* protocol offset for the BPQ header */
offset = 0;
/* create display subtree for the protocol */
ti = proto_tree_add_protocol_format( parent_tree, proto_bpq, tvb, offset, BPQ_HEADER_SIZE,
"BPQ, Len: %u",
bpq_len & 0xfff /* XXX - lower 12 bits? */
);
bpq_tree = proto_item_add_subtree( ti, ett_bpq );
proto_tree_add_item( bpq_tree, hf_bpq_len, tvb, offset, BPQ_HEADER_SIZE, TRUE );
}
/* Call sub-dissectors here */
offset += BPQ_HEADER_SIZE;
saved_private_data = pinfo->private_data;
/* XXX - use the length */
next_tvb = tvb_new_subset( tvb, offset, -1, -1 );
call_dissector( ax25_handle, next_tvb, pinfo, parent_tree );
pinfo->private_data = saved_private_data;
}
void
proto_register_bpq(void)
{
/* Setup list of header fields */
static hf_register_info hf[] = {
{ &hf_bpq_len,
{ "BPQ len", "bpq.len",
FT_UINT16, BASE_DEC, NULL, 0x0,
"BPQ len", HFILL }
},
};
/* Setup protocol subtree array */
static gint *ett[] = {
&ett_bpq,
};
/* Register the protocol name and description */
proto_bpq = proto_register_protocol( "Amateur Radio BPQ", "BPQ", "bpq" );
/* Register the dissector */
register_dissector( "bpq", dissect_bpq, proto_bpq );
/* Required function calls to register the header fields and subtrees used */
proto_register_field_array( proto_bpq, hf, array_length( hf ) );
proto_register_subtree_array( ett, array_length( ett ) );
}
void
proto_reg_handoff_bpq(void)
{
static gboolean inited = FALSE;
if( !inited ) {
dissector_handle_t bpq_handle;
bpq_handle = create_dissector_handle( dissect_bpq, proto_bpq );
dissector_add("ethertype", ETHERTYPE_BPQ, bpq_handle);
/* BPQ is only implemented for AX.25 */
ax25_handle = find_dissector( "ax25" );
inited = TRUE;
}
}
void
capture_bpq( const guchar *pd, int offset, int len, packet_counts *ld)
{
int l_offset;
if ( ! BYTES_ARE_IN_FRAME( offset, len, BPQ_HEADER_SIZE ) )
{
ld->other++;
return;
}
l_offset = offset;
l_offset += BPQ_HEADER_SIZE; /* step over bpq header to point at the AX.25 packet*/
capture_ax25( pd, l_offset, len, ld );
}

View File

@ -0,0 +1,32 @@
/* packet-bpq.h
*
* Routines for Amateur Packet Radio protocol dissection
* Copyright 2005,2006,2007,2008,2009,2010,2012 R.W. Stearn <richard@rns-stearn.demon.co.uk>
*
* $Id:
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
* 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.
*/
#ifndef __PACKET_BPQ_H__
#define __PACKET_BPQ_H__
void capture_bpq(const guchar *, int, int, packet_counts *);
#endif

View File

@ -32,6 +32,7 @@
#include <glib.h>
#include <epan/packet.h>
#include "packet-bpq.h"
#include "packet-eth.h"
#include "packet-frame.h"
#include "packet-ip.h"
@ -172,6 +173,7 @@ const value_string etype_vals[] = {
{ ETHERTYPE_TDMOE, "Digium TDM over Ethernet Protocol" },
{ ETHERTYPE_WAI, "WAI Authentication Protocol" },
{ ETHERTYPE_HSR, "High-availability Seamless Redundancy (IEC62439 Part 3)" },
{ ETHERTYPE_BPQ, "AX.25"},
{ 0, NULL }
};
@ -207,6 +209,9 @@ capture_ethertype(guint16 etype, const guchar *pd, int offset, int len,
case ETHERTYPE_VINES_ECHO:
capture_vines(ld);
break;
case ETHERTYPE_BPQ:
capture_bpq(pd, offset, len, ld);
break;
default:
ld->other++;
break;

View File

@ -84,6 +84,10 @@
#define ETHERTYPE_WMX_M2M 0x08F0
#endif
#ifndef ETHERTYPE_BPQ
#define ETHERTYPE_BPQ 0x08ff /* AX.25 over ethernet (not officially registered) */
#endif
#ifndef ETHERTYPE_VINES_IP
#define ETHERTYPE_VINES_IP 0x0BAD
#endif