From Richard Stearn: add support for BPQ (AX.25 on Ethernet).
svn path=/trunk/; revision=44232
This commit is contained in:
parent
1b876c36f1
commit
931a1077ea
|
@ -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
|
||||
|
|
|
@ -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 \
|
||||
|
|
|
@ -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 );
|
||||
}
|
|
@ -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
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue