forked from osmocom/wireshark
Ralf Schneider's changes to enhance to OSI CLNP, CLTP, and ISIS support
and to add OSI ESIS support. svn path=/trunk/; revision=1865
This commit is contained in:
parent
26ca4597f6
commit
c9d4dd080d
5
AUTHORS
5
AUTHORS
|
@ -294,6 +294,11 @@ Graham Bloice <graham.bloice@trihedral.com> {
|
|||
add version/copyright/etc. information to Win32 executables
|
||||
}
|
||||
|
||||
Ralf Schneider <ralf.schneider@alcatel.se> {
|
||||
Enhancements to OSI CLNP, CLTP, and ISIS support
|
||||
OSI ESIS support
|
||||
}
|
||||
|
||||
Alain Magloire <alainm@rcsm.ece.mcgill.ca> was kind enough to
|
||||
give his permission to use his version of snprintf.c.
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# Makefile.am
|
||||
# Automake file for Ethereal
|
||||
#
|
||||
# $Id: Makefile.am,v 1.184 2000/04/15 04:10:27 guy Exp $
|
||||
# $Id: Makefile.am,v 1.185 2000/04/15 22:11:07 guy Exp $
|
||||
#
|
||||
# Ethereal - Network traffic analyzer
|
||||
# By Gerald Combs <gerald@zing.org>
|
||||
|
@ -58,11 +58,15 @@ DISSECTOR_SOURCES = \
|
|||
packet-cgmp.h \
|
||||
packet-clip.c \
|
||||
packet-clip.h \
|
||||
packet-clnp.c \
|
||||
packet-clnp.h \
|
||||
packet-data.c \
|
||||
packet-ddtp.c \
|
||||
packet-ddtp.h \
|
||||
packet-dns.c \
|
||||
packet-dns.h \
|
||||
packet-esis.h \
|
||||
packet-esis.c \
|
||||
packet-eth.c \
|
||||
packet-eth.h \
|
||||
packet-ethertype.c \
|
||||
|
@ -140,6 +144,8 @@ DISSECTOR_SOURCES = \
|
|||
packet-null.h \
|
||||
packet-osi.c \
|
||||
packet-osi.h \
|
||||
packet-osi-options.c \
|
||||
packet-osi-options.h \
|
||||
packet-ospf.c \
|
||||
packet-ospf.h \
|
||||
packet-pim.c \
|
||||
|
|
|
@ -840,6 +840,7 @@ B<http://ethereal.zing.org>.
|
|||
Andreas Sikkema <andreas.sikkema@philips.com>
|
||||
Mark Muhlestein <mmm@netapp.com>
|
||||
Graham Bloice <graham.bloice@trihedral.com>
|
||||
Ralf Schneider <ralf.schneider@alcatel.se>
|
||||
|
||||
Alain Magloire <alainm@rcsm.ece.mcgill.ca> was kind enough to give his
|
||||
permission to use his version of snprintf.c.
|
||||
|
|
4
nlpid.h
4
nlpid.h
|
@ -2,7 +2,7 @@
|
|||
* Definitions of OSI NLPIDs (Network Layer Protocol IDs)
|
||||
* Laurent Deniel <deniel@worldnet.fr>
|
||||
*
|
||||
* $Id: nlpid.h,v 1.3 2000/01/30 05:50:02 guy Exp $
|
||||
* $Id: nlpid.h,v 1.4 2000/04/15 22:11:07 guy Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@zing.org>
|
||||
|
@ -36,7 +36,7 @@
|
|||
#define NLPID_ISO8473_CLNP 0x81 /* X.233 */
|
||||
#define NLPID_ISO9542_ESIS 0x82
|
||||
#define NLPID_ISO10589_ISIS 0x83
|
||||
#define NLPID_ISO10747 0x85
|
||||
#define NLPID_ISO10747_IDRP 0x85
|
||||
#define NLPID_ISO9542X25_ESIS 0x8a
|
||||
#define NLPID_ISO10030 0x8c
|
||||
#define NLPID_ISO11577 0x8d /* X.273 */
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,41 @@
|
|||
/* packet-clnp.h
|
||||
* Defines and such for CLNP (and COTP) protocol decode.
|
||||
*
|
||||
* $Id: packet-clnp.h,v 1.1 2000/04/15 22:11:08 guy Exp $
|
||||
* Ralf Schneider <Ralf.Schneider@t-online.de>
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@zing.org>
|
||||
* 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_CLNP_H
|
||||
#define _PACKET_CLNP_H
|
||||
|
||||
/*
|
||||
* published API functions
|
||||
*/
|
||||
|
||||
extern
|
||||
void dissect_clnp( const u_char *, int, frame_data *, proto_tree * );
|
||||
extern
|
||||
void dissect_cotp(const u_char *, int, frame_data *, proto_tree *);
|
||||
|
||||
#endif /* _PACKET_CLNP_H */
|
|
@ -0,0 +1,438 @@
|
|||
/* packet-esis.c
|
||||
* Routines for ISO/OSI End System to Intermediate System
|
||||
* Routeing Exchange Protocol ISO 9542.
|
||||
*
|
||||
* $Id: packet-esis.c,v 1.1 2000/04/15 22:11:08 guy Exp $
|
||||
* Ralf Schneider <Ralf.Schneider@t-online.de>
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@zing.org>
|
||||
* 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.
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SYS_TYPES_H
|
||||
# include <sys/types.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <glib.h>
|
||||
#include "packet.h"
|
||||
#include "nlpid.h"
|
||||
#include "packet-osi.h"
|
||||
#include "packet-osi-options.h"
|
||||
#include "packet-esis.h"
|
||||
|
||||
|
||||
/* esis base header */
|
||||
static int proto_esis = -1;
|
||||
|
||||
static int hf_esis_nlpi = -1;
|
||||
static int hf_esis_length = -1;
|
||||
static int hf_esis_version = -1;
|
||||
static int hf_esis_reserved = -1;
|
||||
static int hf_esis_type = -1;
|
||||
static int hf_esis_holdtime = -1;
|
||||
static int hf_esis_checksum = -1;
|
||||
|
||||
static gint ett_esis = -1;
|
||||
static gint ett_esis_area_addr = -1;
|
||||
|
||||
static const value_string esis_vals[] = {
|
||||
{ ESIS_ESH_PDU, "ES HELLO"},
|
||||
{ ESIS_ISH_PDU, "IS HELLO"},
|
||||
{ ESIS_RD_PDU, "RD REQUEST"},
|
||||
{ 0, NULL} };
|
||||
|
||||
/* internal prototypes */
|
||||
|
||||
void esis_dissect_esh_pdu( u_char len, const u_char *pd, int offset,
|
||||
frame_data *fd, proto_tree *treepd);
|
||||
void esis_dissect_ish_pdu( u_char len, const u_char *pd, int offset,
|
||||
frame_data *fd, proto_tree *tree);
|
||||
void esis_dissect_redirect_pdu( u_char len, const u_char *pd, int offset,
|
||||
frame_data *fd, proto_tree *tree);
|
||||
|
||||
/* ################## Descriptions ###########################################*/
|
||||
/* Parameters for the ESH PDU
|
||||
* Source Address Parameter:
|
||||
*
|
||||
* Octet: Length: Parameter Type:
|
||||
* 10 1 Number of Source Adresses ( NSAPs served by this Network
|
||||
* 11 1 Source Address Length Indicator ( SAL ) # Entity )
|
||||
* 12-m-1 variable Source Address ( NSAP )
|
||||
* m Options, dissected in osi.c
|
||||
*
|
||||
*
|
||||
* Parameter for the ISH PDU:
|
||||
* Network Entity Title Parameter:
|
||||
*
|
||||
* Octet: Length: Parameter Type:
|
||||
* 10 1 Network Entity Title Length Indicator ( NETL )
|
||||
* 11-m-1 variable Network Entity Title ( NET )
|
||||
* m Options, dissected in osi.c
|
||||
*
|
||||
*
|
||||
* Parameter for the RD PDU:
|
||||
* When re-directed to an IS:
|
||||
*
|
||||
* Octet: Length: Parameter Type:
|
||||
* 10 1 Destination Address Length Indicator ( DAL )
|
||||
* 11>m-1 variable Destination Address ( DA )
|
||||
* m 1 Subnetwork Address Length Indicator ( BSNPAL )
|
||||
* m+1>n-1 variable Subnetwork Address ( BSNPA )
|
||||
* n 1 Network Entity Title Length Indicator ( NETL )
|
||||
* n+1>p-1 variable Network Entity Title ( NET )
|
||||
* p Options, dissected in osi.c
|
||||
*
|
||||
*
|
||||
* Parameter for the RD PDU:
|
||||
* When re-directed to an ES:
|
||||
*
|
||||
* Octet: Length: Parameter Type:
|
||||
* 10 1 Destination Address Length Indicator ( DAL )
|
||||
* 11>m-1 variable Destination Address ( DA )
|
||||
* m 1 Subnetwork Address Length Indicator ( BSNPAL )
|
||||
* m+1>n-1 variable Subnetwork Address ( BSNPA )
|
||||
* n 1 Network Entity Title Length Indicator ( NETL ) == 0
|
||||
* n+1 Options, dissected in osi.c
|
||||
*
|
||||
*/
|
||||
|
||||
/* ############################ Tool Functions ############################## */
|
||||
|
||||
|
||||
/* ############################## Dissection Functions ###################### */
|
||||
/*
|
||||
* Name: dissect_esis_unknown()
|
||||
*
|
||||
* Description:
|
||||
* There was some error in the protocol and we are in unknown space
|
||||
* here. Add a tree item to cover the error and go on. Note
|
||||
* that we make sure we don't go off the end of the bleedin packet here!
|
||||
*
|
||||
* This is just a copy of isis.c and isis.h, so I keep the stuff also
|
||||
* and adapt the names to cover possible protocol errors! Ive really no
|
||||
* idea wether I need this or not.
|
||||
*
|
||||
* Input
|
||||
* int offset : Current offset into packet data.
|
||||
* int len : length of to dump.
|
||||
* proto_tree * : tree of display data. May be NULL.
|
||||
* frame_data * fd : frame data
|
||||
* char * : format text
|
||||
*
|
||||
* Output:
|
||||
* void (may modify proto tree)
|
||||
*/
|
||||
void
|
||||
esis_dissect_unknown(int offset,guint length,proto_tree *tree,frame_data *fd,
|
||||
char *fmat, ...){
|
||||
va_list ap;
|
||||
|
||||
if ( !IS_DATA_IN_FRAME(offset) ) {
|
||||
/*
|
||||
* big oops They were off the end of the packet already.
|
||||
* Just ignore this one.
|
||||
*/
|
||||
return;
|
||||
}
|
||||
if ( !BYTES_ARE_IN_FRAME(offset, length) ) {
|
||||
/*
|
||||
* length will take us past eop. Truncate length.
|
||||
*/
|
||||
length = END_OF_FRAME;
|
||||
}
|
||||
|
||||
va_start(ap, fmat);
|
||||
proto_tree_add_text(tree, offset, length, fmat, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
esis_dissect_esh_pdu( u_char len, const u_char *pd, int offset,
|
||||
frame_data *fd, proto_tree *tree) {
|
||||
proto_tree *esis_area_tree;
|
||||
int no_sa = 0;
|
||||
int sal = 0;
|
||||
|
||||
proto_item *ti;
|
||||
|
||||
if (tree) {
|
||||
offset += ESIS_HDR_FIXED_LENGTH;
|
||||
|
||||
no_sa = pd[offset];
|
||||
len -= 1;
|
||||
|
||||
ti = proto_tree_add_text( tree, offset++, END_OF_FRAME,
|
||||
"Number of Source Addresses (SA, Format: NSAP) : %u", no_sa );
|
||||
|
||||
esis_area_tree = proto_item_add_subtree( ti, ett_esis_area_addr );
|
||||
while ( no_sa-- > 0 ) {
|
||||
sal = (int) pd[offset++];
|
||||
proto_tree_add_text(esis_area_tree, offset, 1, "SAL: %2u Octets", sal);
|
||||
proto_tree_add_text(esis_area_tree, offset + 1, sal,
|
||||
" SA: %s", print_nsap_net( &pd[offset], sal ) );
|
||||
offset += sal;
|
||||
len -= ( sal + 1 );
|
||||
}
|
||||
dissect_osi_options( PDU_TYPE_ESIS_ESH, len, pd, offset, fd, tree );
|
||||
}
|
||||
} /* esis_dissect_esh_pdu */ ;
|
||||
|
||||
void
|
||||
esis_dissect_ish_pdu( u_char len, const u_char *pd, int offset,
|
||||
frame_data *fd, proto_tree *tree) {
|
||||
|
||||
int netl = 0;
|
||||
|
||||
if (tree) {
|
||||
offset += ESIS_HDR_FIXED_LENGTH;
|
||||
|
||||
netl = (int) pd[ offset ];
|
||||
proto_tree_add_text( tree, offset, netl + 1,
|
||||
"### Network Entity Titel Section ###");
|
||||
proto_tree_add_text( tree, offset++, 1, "NETL: %2u Octets", netl);
|
||||
proto_tree_add_text( tree, offset, netl,
|
||||
" NET: %s", print_nsap_net( &pd[offset], netl ) );
|
||||
offset += netl;
|
||||
len -= ( netl + 1 );
|
||||
|
||||
dissect_osi_options( PDU_TYPE_ESIS_ISH, len, pd, offset, fd, tree );
|
||||
}
|
||||
};
|
||||
|
||||
void
|
||||
esis_dissect_redirect_pdu( u_char len, const u_char *pd, int offset,
|
||||
frame_data *fd, proto_tree *tree) {
|
||||
|
||||
int tmpl = 0;
|
||||
|
||||
if (tree) {
|
||||
offset += ESIS_HDR_FIXED_LENGTH;
|
||||
|
||||
tmpl = (int) pd[ offset ];
|
||||
proto_tree_add_text( tree, offset, tmpl + 1,
|
||||
"### Destination Address Section ###" );
|
||||
proto_tree_add_text( tree, offset++, 1, "DAL: %2u Octets", tmpl);
|
||||
proto_tree_add_text( tree, offset, tmpl,
|
||||
" DA : %s", print_nsap_net( &pd[offset], tmpl ) );
|
||||
offset += tmpl;
|
||||
len -= ( tmpl + 1 );
|
||||
tmpl = (int) pd[ offset ];
|
||||
|
||||
proto_tree_add_text( tree, offset, tmpl + 1,
|
||||
"### Subnetwork Address Section ###");
|
||||
proto_tree_add_text( tree, offset++, 1, "BSNPAL: %2u Octets", tmpl);
|
||||
proto_tree_add_text( tree, offset, tmpl,
|
||||
" BSNPA: %s", print_system_id( &pd[offset], tmpl ) );
|
||||
offset += tmpl;
|
||||
len -= ( tmpl + 1 );
|
||||
tmpl = (int) pd[ offset ];
|
||||
|
||||
if ( 0 == tmpl ) {
|
||||
proto_tree_add_text( tree, offset, 1,
|
||||
"### No Network Entity Title Section ###" );
|
||||
offset++;
|
||||
len--;
|
||||
}
|
||||
else {
|
||||
proto_tree_add_text( tree, offset, 1,
|
||||
"### Network Entity Title Section ###" );
|
||||
proto_tree_add_text( tree, offset++, 1, "NETL: %2u Octets", tmpl );
|
||||
proto_tree_add_text( tree, offset, tmpl,
|
||||
" NET: %s", print_nsap_net( &pd[offset], tmpl ) );
|
||||
offset += tmpl;
|
||||
len -= ( tmpl + 1 );
|
||||
}
|
||||
dissect_osi_options( PDU_TYPE_ESIS_RD, len, pd, offset, fd, tree );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Name: dissect_esis()
|
||||
*
|
||||
* Description:
|
||||
* Main entry area for esis de-mangling. This will build the
|
||||
* main esis tree data and call the sub-protocols as needed.
|
||||
*
|
||||
* Input:
|
||||
* u_char * : packet data
|
||||
* int : offset into packet where we are (packet_data[offset]== start
|
||||
* of what we care about)
|
||||
* frame_data * : frame data (whole packet with extra info)
|
||||
* proto_tree * : tree of display data. May be NULL.
|
||||
*
|
||||
* Output:
|
||||
* void, but we will add to the proto_tree if it is not NULL.
|
||||
*/
|
||||
void
|
||||
dissect_esis(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
|
||||
char *pdu_type_string = NULL;
|
||||
char *pdu_type_format_string = "PDU Type : %s (R:%s%s%s)";
|
||||
esis_hdr_t *ehdr;
|
||||
proto_item *ti;
|
||||
proto_tree *esis_tree = NULL;
|
||||
int variable_len = 0;
|
||||
u_int tmp_uint = 0;
|
||||
|
||||
if (check_col(fd, COL_PROTOCOL))
|
||||
col_add_str(fd, COL_PROTOCOL, "ESIS");
|
||||
|
||||
if (!BYTES_ARE_IN_FRAME(offset, sizeof(*ehdr))) {
|
||||
esis_dissect_unknown(offset, sizeof(*ehdr), tree, fd,
|
||||
"Not enough capture data for header (%d vs %d)",
|
||||
sizeof(*ehdr), END_OF_FRAME);
|
||||
return;
|
||||
}
|
||||
|
||||
ehdr = (esis_hdr_t *) &pd[offset];
|
||||
|
||||
if (ehdr->esis_version != ESIS_REQUIRED_VERSION){
|
||||
esis_dissect_unknown(offset, END_OF_FRAME, tree, fd,
|
||||
"Unknown ESIS version (%d vs %d)",
|
||||
ehdr->esis_version, ESIS_REQUIRED_VERSION );
|
||||
return;
|
||||
}
|
||||
|
||||
if (tree) {
|
||||
ti = proto_tree_add_item(tree, proto_esis, offset, END_OF_FRAME, NULL );
|
||||
esis_tree = proto_item_add_subtree(ti, ett_esis);
|
||||
|
||||
proto_tree_add_item( esis_tree, hf_esis_nlpi, offset, 1, ehdr->esis_nlpi );
|
||||
proto_tree_add_item( esis_tree, hf_esis_length,
|
||||
offset + 1, 1, ehdr->esis_length );
|
||||
proto_tree_add_item( esis_tree, hf_esis_version, offset + 2, 1,
|
||||
ehdr->esis_version );
|
||||
proto_tree_add_item( esis_tree, hf_esis_reserved, offset + 3, 1,
|
||||
ehdr->esis_reserved );
|
||||
|
||||
pdu_type_string = val_to_str(ehdr->esis_type&OSI_PDU_TYPE_MASK,
|
||||
esis_vals, "Unknown (0x%x)");
|
||||
|
||||
proto_tree_add_uint_format( esis_tree, hf_esis_type, offset + 4, 1,
|
||||
ehdr->esis_type,
|
||||
pdu_type_format_string,
|
||||
pdu_type_string,
|
||||
(ehdr->esis_type&BIT_8) ? "1" : "0",
|
||||
(ehdr->esis_type&BIT_7) ? "1" : "0",
|
||||
(ehdr->esis_type&BIT_6) ? "1" : "0");
|
||||
|
||||
tmp_uint = pntohs( ehdr->esis_holdtime );
|
||||
proto_tree_add_uint_format(esis_tree, hf_esis_holdtime, offset + 5, 2,
|
||||
tmp_uint, "Holding Time : %u seconds",
|
||||
tmp_uint );
|
||||
|
||||
tmp_uint = pntohs( ehdr->esis_checksum );
|
||||
|
||||
proto_tree_add_uint_format( esis_tree, hf_esis_checksum, offset + 7, 2,
|
||||
tmp_uint, "Checksum : 0x%x ( %s )",
|
||||
tmp_uint, calc_checksum( &pd[offset],
|
||||
ehdr->esis_length ,
|
||||
tmp_uint ) );
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Let us make sure we use the same names for all our decodes
|
||||
* here. First, dump the name into info column, and THEN
|
||||
* dispatch the sub-type.
|
||||
*/
|
||||
if (check_col(fd, COL_INFO)) {
|
||||
col_add_str(fd, COL_INFO,
|
||||
val_to_str( ehdr->esis_type&OSI_PDU_TYPE_MASK, esis_vals,
|
||||
"Unknown (0x%x)" ) );
|
||||
}
|
||||
|
||||
variable_len = ehdr->esis_length - ESIS_HDR_FIXED_LENGTH;
|
||||
|
||||
switch (ehdr->esis_type) {
|
||||
case ESIS_ESH_PDU:
|
||||
esis_dissect_esh_pdu( variable_len, pd, offset, fd, esis_tree);
|
||||
break;
|
||||
case ESIS_ISH_PDU:
|
||||
esis_dissect_ish_pdu( variable_len, pd, offset, fd, esis_tree);
|
||||
break;
|
||||
case ESIS_RD_PDU:
|
||||
esis_dissect_redirect_pdu( variable_len, pd, offset, fd,
|
||||
esis_tree);
|
||||
break;
|
||||
default:
|
||||
esis_dissect_unknown(offset, END_OF_FRAME, tree, fd,
|
||||
"unknown esis packet type" );
|
||||
}
|
||||
} /* dissect_esis */
|
||||
|
||||
|
||||
/*
|
||||
* Name: proto_register_esisesis()
|
||||
*
|
||||
* Description:
|
||||
* main register for esis protocol set. We register some display
|
||||
* formats and the protocol module variables.
|
||||
*
|
||||
* NOTE: this procedure to autolinked by the makefile process that
|
||||
* builds register.c
|
||||
*
|
||||
* Input:
|
||||
* void
|
||||
*
|
||||
* Output:
|
||||
* void
|
||||
*/
|
||||
void
|
||||
proto_register_esis(void) {
|
||||
static hf_register_info hf[] = {
|
||||
{ &hf_esis_nlpi,
|
||||
{ "Network Layer Protocol Identifier", "esis.nlpi",
|
||||
FT_UINT8, BASE_HEX, VALS(nlpid_vals), 0x0, "" }},
|
||||
{ &hf_esis_length,
|
||||
{ "PDU Length ", "esis.length", FT_UINT8, BASE_DEC, NULL, 0x0, "" }},
|
||||
{ &hf_esis_version,
|
||||
{ "Version (==1) ", "esis.ver", FT_UINT8, BASE_DEC, NULL, 0x0, "" }},
|
||||
{ &hf_esis_reserved,
|
||||
{ "Reserved(==0) ", "esis.res", FT_UINT8, BASE_DEC, NULL, 0x0, "" }},
|
||||
{ &hf_esis_type,
|
||||
{ "PDU Type ", "esis.type", FT_UINT8, BASE_DEC, VALS(esis_vals),
|
||||
0xff, "" }},
|
||||
{ &hf_esis_holdtime,
|
||||
{ "Holding Time ", "esis.htime", FT_UINT16, BASE_DEC, NULL, 0x0, " s"}},
|
||||
{ &hf_esis_checksum,
|
||||
{ "Checksum ", "esis.chksum", FT_UINT16, BASE_HEX, NULL, 0x0, "" }}
|
||||
};
|
||||
/*
|
||||
*
|
||||
*
|
||||
*/
|
||||
static gint *ett[] = {
|
||||
&ett_esis,
|
||||
&ett_esis_area_addr,
|
||||
};
|
||||
|
||||
proto_esis = proto_register_protocol( PROTO_STRING_ESIS, "esis");
|
||||
proto_register_field_array(proto_esis, hf, array_length(hf));
|
||||
proto_register_subtree_array(ett, array_length(ett));
|
||||
};
|
|
@ -0,0 +1,69 @@
|
|||
/* packet-esis.h
|
||||
* Defines and such for ESIS protocol decode.
|
||||
*
|
||||
* $Id: packet-esis.h,v 1.1 2000/04/15 22:11:09 guy Exp $
|
||||
* Ralf Schneider <Ralf.Schneider@t-online.de>
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@zing.org>
|
||||
* 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_ESIS_H
|
||||
#define _PACKET_ESIS_H
|
||||
|
||||
/* The version we support is 1 */
|
||||
#define ESIS_REQUIRED_VERSION 1
|
||||
|
||||
/* ESIS PDU types */
|
||||
#define ESIS_ESH_PDU 02
|
||||
#define ESIS_ISH_PDU 04
|
||||
#define ESIS_RD_PDU 06
|
||||
|
||||
/* The length of the fixed part */
|
||||
#define ESIS_HDR_FIXED_LENGTH 9
|
||||
|
||||
/* Inline Defines for masking */
|
||||
#define esis_type esis_type_reserved&OSI_PDU_TYPE_MASK
|
||||
#define esis_r8 esis_type_reserved&BIT_8
|
||||
#define esis_r7 esis_type_reserved&BIT_7
|
||||
#define esis_r6 esis_type_reserved&BIT_6
|
||||
|
||||
/* The fixed part (9 octets) of the ESIS protocol header */
|
||||
typedef struct {
|
||||
guint8 esis_nlpi; /* Network Layer Protocol Identifier == 0x82 */
|
||||
guint8 esis_length; /* Header ( PDU too, NoData ) length in octets */
|
||||
guint8 esis_version; /* ISIS version, must be 0x01 */
|
||||
guint8 esis_reserved; /* reserved byte, must be 0 */
|
||||
guint8 esis_type_reserved; /* packet type & MS-Bits (8-6) reserved */
|
||||
guint8 esis_holdtime[2]; /* Maximum time (sec) this PDU is valid */
|
||||
guint8 esis_checksum[2]; /* Computed on whole PDU Header, 0 means ignore */
|
||||
} esis_hdr_t;
|
||||
|
||||
/*
|
||||
* published API functions
|
||||
*/
|
||||
extern void dissect_esis(const u_char *pd, int offset, frame_data *fd,
|
||||
proto_tree *tree);
|
||||
extern void proto_register_esis(void);
|
||||
extern void esis_dissect_unknown(int offset,guint length, proto_tree *tree,
|
||||
frame_data *fd, char *fmat, ...);
|
||||
|
||||
#endif /* _PACKET_ESIS_H */
|
|
@ -1,7 +1,7 @@
|
|||
/* packet-isis-clv.c
|
||||
* Common CLV decode routines.
|
||||
*
|
||||
* $Id: packet-isis-clv.c,v 1.2 1999/12/15 22:52:04 guy Exp $
|
||||
* $Id: packet-isis-clv.c,v 1.3 2000/04/15 22:11:09 guy Exp $
|
||||
* Stuart Stanley <stuarts@mxmail.net>
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
|
@ -47,6 +47,7 @@
|
|||
#include <string.h>
|
||||
#include <glib.h>
|
||||
#include "packet.h"
|
||||
#include "packet-osi.h"
|
||||
#include "packet-isis.h"
|
||||
#include "packet-isis-clv.h"
|
||||
|
||||
|
@ -93,7 +94,8 @@ isis_dissect_area_address_clv(const u_char *pd, int offset,
|
|||
* Lets turn the area address into "standard" 0000.0000.etc
|
||||
* format string.
|
||||
*/
|
||||
sbuf = isis_address_to_string ( pd, offset + 1, mylen );
|
||||
/* sbuf = isis_address_to_string ( pd, offset + 1, mylen );*/
|
||||
sbuf = print_nsap_net( pd + offset + 1, mylen );
|
||||
/* and spit it out */
|
||||
if ( tree ) {
|
||||
proto_tree_add_text ( tree, offset, mylen + 1,
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* packet-isis-hello.c
|
||||
* Routines for decoding isis hello packets and their CLVs
|
||||
*
|
||||
* $Id: packet-isis-hello.c,v 1.5 2000/03/28 06:12:15 guy Exp $
|
||||
* $Id: packet-isis-hello.c,v 1.6 2000/04/15 22:11:09 guy Exp $
|
||||
* Stuart Stanley <stuarts@mxmail.net>
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
|
@ -38,28 +38,29 @@
|
|||
#include <string.h>
|
||||
#include <glib.h>
|
||||
#include "packet.h"
|
||||
#include "packet-osi.h"
|
||||
#include "packet-isis.h"
|
||||
#include "packet-isis-clv.h"
|
||||
#include "packet-isis-hello.h"
|
||||
|
||||
/* hello packets */
|
||||
static int proto_isis_hello = -1;
|
||||
static int hf_isis_hello_circuit_reserved = -1;
|
||||
static int hf_isis_hello_source_id = -1;
|
||||
static int hf_isis_hello_holding_timer = -1;
|
||||
static int hf_isis_hello_pdu_length = -1;
|
||||
static int hf_isis_hello_priority_reserved = -1;
|
||||
static int hf_isis_hello_lan_id = -1;
|
||||
static int hf_isis_hello_local_circuit_id = -1;
|
||||
static int hf_isis_hello_clv_ipv4_int_addr = -1;
|
||||
static int proto_isis_hello = -1;
|
||||
static int hf_isis_hello_circuit_reserved = -1;
|
||||
static int hf_isis_hello_source_id = -1;
|
||||
static int hf_isis_hello_holding_timer = -1;
|
||||
static int hf_isis_hello_pdu_length = -1;
|
||||
static int hf_isis_hello_priority_reserved = -1;
|
||||
static int hf_isis_hello_lan_id = -1;
|
||||
static int hf_isis_hello_local_circuit_id = -1;
|
||||
static int hf_isis_hello_clv_ipv4_int_addr = -1;
|
||||
|
||||
static gint ett_isis_hello = -1;
|
||||
static gint ett_isis_hello_clv_area_addr = -1;
|
||||
static gint ett_isis_hello_clv_is_neighbors = -1;
|
||||
static gint ett_isis_hello_clv_padding = -1;
|
||||
static gint ett_isis_hello_clv_unknown = -1;
|
||||
static gint ett_isis_hello_clv_nlpid = -1;
|
||||
static gint ett_isis_hello_clv_auth = -1;
|
||||
static gint ett_isis_hello = -1;
|
||||
static gint ett_isis_hello_clv_area_addr = -1;
|
||||
static gint ett_isis_hello_clv_is_neighbors = -1;
|
||||
static gint ett_isis_hello_clv_padding = -1;
|
||||
static gint ett_isis_hello_clv_unknown = -1;
|
||||
static gint ett_isis_hello_clv_nlpid = -1;
|
||||
static gint ett_isis_hello_clv_auth = -1;
|
||||
static gint ett_isis_hello_clv_ipv4_int_addr = -1;
|
||||
|
||||
static const value_string isis_hello_circuit_type_vals[] = {
|
||||
|
@ -360,9 +361,7 @@ dissect_hello_is_neighbors_clv(const u_char *pd, int offset,
|
|||
*/
|
||||
if ( tree ) {
|
||||
proto_tree_add_text ( tree, offset, 6,
|
||||
"IS Neighbor: %02x%02x.%02x%02x.%02x%02x",
|
||||
pd[offset], pd[offset+1], pd[offset+2],
|
||||
pd[offset+3], pd[offset+4], pd[offset+5] );
|
||||
"IS Neighbor: %s", print_system_id( pd + offset, 6 ) );
|
||||
}
|
||||
offset += 6;
|
||||
length -= 6;
|
||||
|
@ -443,7 +442,7 @@ isis_dissect_isis_hello(int hello_type, int header_length,
|
|||
proto_tree_add_uint_format(hello_tree,
|
||||
hf_isis_hello_circuit_reserved,
|
||||
offset, 1, ihp->isis_hello_circuit_reserved,
|
||||
"Circuit type: %s, reserved(0x%02x == 0)",
|
||||
"Circuit type : %s, reserved(0x%02x == 0)",
|
||||
val_to_str(ihp->isis_hello_circuit,
|
||||
isis_hello_circuit_type_vals,
|
||||
"Unknown (0x%x)"),
|
||||
|
@ -451,40 +450,25 @@ isis_dissect_isis_hello(int hello_type, int header_length,
|
|||
);
|
||||
|
||||
proto_tree_add_string_format(hello_tree, hf_isis_hello_lan_id,
|
||||
offset + 1, 6, ihp->isis_hello_source_id,
|
||||
"Lan ID: %02x%02x.%02x%02x.%02x%02x",
|
||||
ihp->isis_hello_lan_id[0],
|
||||
ihp->isis_hello_lan_id[1],
|
||||
ihp->isis_hello_lan_id[2],
|
||||
ihp->isis_hello_lan_id[3],
|
||||
ihp->isis_hello_lan_id[4],
|
||||
ihp->isis_hello_lan_id[5]);
|
||||
offset + 1, 6, ihp->isis_hello_source_id,
|
||||
"SystemID{ Sender of PDU } : %s",
|
||||
print_system_id( pd + offset + 1, 6 ) );
|
||||
proto_tree_add_item(hello_tree, hf_isis_hello_holding_timer,
|
||||
offset + 7, 2,pntohs(&ihp->isis_hello_holding_timer[0]));
|
||||
offset + 7, 2,pntohs(&ihp->isis_hello_holding_timer[0]));
|
||||
proto_tree_add_item(hello_tree, hf_isis_hello_pdu_length,
|
||||
offset + 9, 2,pntohs(&ihp->isis_hello_pdu_length[0]));
|
||||
proto_tree_add_uint_format(hello_tree,
|
||||
hf_isis_hello_priority_reserved,
|
||||
offset + 11, 1, ihp->isis_hello_priority_reserved,
|
||||
"Priority: %d, reserved(0x%02x == 0)",
|
||||
ihp->isis_hello_priority,
|
||||
ihp->isis_hello_preserved );
|
||||
offset + 9, 2,pntohs(&ihp->isis_hello_pdu_length[0]));
|
||||
proto_tree_add_uint_format(hello_tree, hf_isis_hello_priority_reserved,
|
||||
offset + 11, 1, ihp->isis_hello_priority_reserved,
|
||||
"Priority : %d, reserved(0x%02x == 0)",
|
||||
ihp->isis_hello_priority, ihp->isis_hello_preserved );
|
||||
if (hello_type == ISIS_TYPE_PTP_HELLO) {
|
||||
proto_tree_add_item(hello_tree,
|
||||
hf_isis_hello_local_circuit_id,
|
||||
offset + 12, 1, ihp->isis_hello_lan_id[0] );
|
||||
proto_tree_add_item(hello_tree, hf_isis_hello_local_circuit_id,
|
||||
offset + 12, 1, ihp->isis_hello_lan_id[0] );
|
||||
} else {
|
||||
proto_tree_add_string_format(hello_tree,
|
||||
hf_isis_hello_lan_id, offset + 12, 7,
|
||||
ihp->isis_hello_lan_id,
|
||||
"Lan ID: %02x%02x.%02x%02x.%02x%02x-%02d",
|
||||
ihp->isis_hello_lan_id[0],
|
||||
ihp->isis_hello_lan_id[1],
|
||||
ihp->isis_hello_lan_id[2],
|
||||
ihp->isis_hello_lan_id[3],
|
||||
ihp->isis_hello_lan_id[4],
|
||||
ihp->isis_hello_lan_id[5],
|
||||
ihp->isis_hello_lan_id[6]);
|
||||
proto_tree_add_string_format(hello_tree, hf_isis_hello_lan_id,
|
||||
offset + 12, 7, ihp->isis_hello_lan_id,
|
||||
"SystemID{ Designated IS } : %s",
|
||||
print_system_id( pd + offset + 12, 7 ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -531,34 +515,35 @@ void
|
|||
proto_register_isis_hello(void) {
|
||||
static hf_register_info hf[] = {
|
||||
{ &hf_isis_hello_circuit_reserved,
|
||||
{ "Circuit type", "isis_hello.circuite_type",
|
||||
{ "Circuit type ", "isis_hello.circuite_type",
|
||||
FT_UINT8, BASE_HEX, NULL, 0x0, "" }},
|
||||
|
||||
{ &hf_isis_hello_source_id,
|
||||
{ "Source ID", "isis_hello.source_id",
|
||||
{ "SystemID{ Sender of PDU } ", "isis_hello.source_id",
|
||||
FT_ETHER, BASE_HEX, NULL, 0x0, "" }},
|
||||
|
||||
{ &hf_isis_hello_holding_timer,
|
||||
{ "Holding timer", "isis_hello.holding_timer",
|
||||
{ "Holding timer ", "isis_hello.holding_timer",
|
||||
FT_UINT16, BASE_DEC, NULL, 0x0, "" }},
|
||||
|
||||
{ &hf_isis_hello_pdu_length,
|
||||
{ "PDU length", "isis_hello.pdu_length",
|
||||
{ "PDU length ", "isis_hello.pdu_length",
|
||||
FT_UINT16, BASE_DEC, NULL, 0x0, "" }},
|
||||
|
||||
{ &hf_isis_hello_priority_reserved,
|
||||
{ "Priority", "isis_hello.priority",FT_UINT8, BASE_DEC, NULL,
|
||||
ISIS_HELLO_P_RESERVED_MASK, "" }},
|
||||
{ "Priority ", "isis_hello.priority",FT_UINT8, BASE_DEC, NULL,
|
||||
ISIS_HELLO_P_RESERVED_MASK, "" }},
|
||||
|
||||
{ &hf_isis_hello_lan_id,
|
||||
{ "LAN ID", "isis_hello.lan_id", FT_STRING, BASE_DEC, NULL, 0x0, "" }},
|
||||
{ "SystemID{ Designated IS } ", "isis_hello.lan_id", FT_STRING, BASE_DEC, NULL,
|
||||
0x0, "" }},
|
||||
|
||||
{ &hf_isis_hello_local_circuit_id,
|
||||
{ "Local circuit ID", "isis_hello.local_circuit_id", FT_UINT8,
|
||||
{ "Local circuit ID ", "isis_hello.local_circuit_id", FT_UINT8,
|
||||
BASE_DEC, NULL, 0x0, "" }},
|
||||
|
||||
{ &hf_isis_hello_clv_ipv4_int_addr,
|
||||
{ "IPv4 interface address", "isis_hello.clv_ipv4_int_addr", FT_IPv4,
|
||||
{ "IPv4 interface address ", "isis_hello.clv_ipv4_int_addr", FT_IPv4,
|
||||
BASE_NONE, NULL, 0x0, "" }},
|
||||
|
||||
};
|
||||
|
@ -573,7 +558,7 @@ proto_register_isis_hello(void) {
|
|||
&ett_isis_hello_clv_ipv4_int_addr,
|
||||
};
|
||||
|
||||
proto_isis_hello = proto_register_protocol("ISIS hello", "isis_hello");
|
||||
proto_isis_hello = proto_register_protocol("ISIS HELLO", "isis_hello");
|
||||
proto_register_field_array(proto_isis_hello, hf, array_length(hf));
|
||||
proto_register_subtree_array(ett, array_length(ett));
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* packet-isis-lsp.c
|
||||
* Routines for decoding isis lsp packets and their CLVs
|
||||
*
|
||||
* $Id: packet-isis-lsp.c,v 1.4 2000/03/20 22:52:42 gram Exp $
|
||||
* $Id: packet-isis-lsp.c,v 1.5 2000/04/15 22:11:09 guy Exp $
|
||||
* Stuart Stanley <stuarts@mxmail.net>
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
|
@ -43,6 +43,7 @@
|
|||
#endif
|
||||
|
||||
#include "packet.h"
|
||||
#include "packet-osi.h"
|
||||
#include "packet-isis.h"
|
||||
#include "packet-isis-clv.h"
|
||||
#include "packet-isis-lsp.h"
|
||||
|
@ -515,17 +516,12 @@ dissect_lsp_eis_neighbors_clv_inner(const u_char *pd, int offset,
|
|||
if ( tree ) {
|
||||
if ( is_eis ) {
|
||||
ti = proto_tree_add_text ( tree, offset, 11,
|
||||
"ES Neighbor: %02x%02x.%02x%02x.%02x%02x",
|
||||
pd[offset+4], pd[offset+5],
|
||||
pd[offset+6], pd[offset+7],
|
||||
pd[offset+8], pd[offset+9] );
|
||||
"ES Neighbor: %s",
|
||||
print_system_id( pd + offset + 4, 6 ) );
|
||||
} else {
|
||||
ti = proto_tree_add_text ( tree, offset, 11,
|
||||
"IS Neighbor: %02x%02x.%02x%02x.%02x%02x-%02x",
|
||||
pd[offset+4], pd[offset+5],
|
||||
pd[offset+6], pd[offset+7],
|
||||
pd[offset+8], pd[offset+9],
|
||||
pd[offset+10] );
|
||||
"IS Neighbor: %s",
|
||||
print_system_id( pd + offset + 4, 6 ) );
|
||||
}
|
||||
ntree = proto_item_add_subtree(ti,
|
||||
ett_isis_lsp_clv_is_neighbors);
|
||||
|
@ -648,9 +644,8 @@ dissect_lsp_partition_dis_clv(const u_char *pd, int offset,
|
|||
*/
|
||||
if ( tree ) {
|
||||
proto_tree_add_text ( tree, offset+4, 6,
|
||||
"Partition designated L2 IS: %02x%02x.%02x%02x.%02x%02x",
|
||||
pd[offset], pd[offset+1], pd[offset+2],
|
||||
pd[offset+3], pd[offset+4], pd[offset+5]);
|
||||
"Partition designated L2 IS: %s",
|
||||
print_system_id( pd + offset, 6 ) );
|
||||
}
|
||||
length -= 6;
|
||||
offset += 6;
|
||||
|
@ -720,7 +715,7 @@ dissect_lsp_prefix_neighbors_clv(const u_char *pd, int offset,
|
|||
* Lets turn the area address into "standard" 0000.0000.etc
|
||||
* format string.
|
||||
*/
|
||||
sbuf = isis_address_to_string ( pd, offset + 1, mylen );
|
||||
sbuf = print_area( pd + offset + 1, mylen );
|
||||
/* and spit it out */
|
||||
if ( tree ) {
|
||||
proto_tree_add_text ( tree, offset, mylen + 1,
|
||||
|
@ -750,13 +745,8 @@ void
|
|||
isis_lsp_decode_lsp_id(char *tstr, proto_tree *tree, int offset,
|
||||
isis_lsp_id_t *id ) {
|
||||
proto_tree_add_text(tree, offset, 8,
|
||||
"%s: %02x%02x.%02x%02x.%02x%02x.%02x-%02x", tstr,
|
||||
id->source_id[0],
|
||||
id->source_id[1],
|
||||
id->source_id[2],
|
||||
id->source_id[3],
|
||||
id->source_id[4],
|
||||
id->source_id[5],
|
||||
"%s: %s.%02x-%02x", tstr,
|
||||
print_system_id( id->source_id, 6 ),
|
||||
id->psuodonode_id,
|
||||
id->lsp_number );
|
||||
}
|
||||
|
@ -923,7 +913,7 @@ proto_register_isis_lsp(void) {
|
|||
&ett_isis_lsp_clv_ip_reachability,
|
||||
};
|
||||
|
||||
proto_isis_lsp = proto_register_protocol("ISIS lsp", "ISIS-lsp");
|
||||
proto_isis_lsp = proto_register_protocol( PROTO_STRING_LSP, "isis_lsp");
|
||||
proto_register_field_array(proto_isis_lsp, hf, array_length(hf));
|
||||
proto_register_subtree_array(ett, array_length(ett));
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* packet-isis-snp.c
|
||||
* Routines for decoding isis complete & partial SNP and their payload
|
||||
*
|
||||
* $Id: packet-isis-snp.c,v 1.2 2000/01/24 03:33:32 guy Exp $
|
||||
* $Id: packet-isis-snp.c,v 1.3 2000/04/15 22:11:10 guy Exp $
|
||||
* Stuart Stanley <stuarts@mxmail.net>
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
|
@ -38,6 +38,7 @@
|
|||
#include <string.h>
|
||||
#include <glib.h>
|
||||
#include "packet.h"
|
||||
#include "packet-osi.h"
|
||||
#include "packet-isis.h"
|
||||
#include "packet-isis-clv.h"
|
||||
#include "packet-isis-lsp.h"
|
||||
|
@ -196,16 +197,16 @@ dissect_snp_lsp_entries(const u_char *pd, int offset, guint length,
|
|||
return;
|
||||
}
|
||||
|
||||
proto_tree_add_text(tree, offset, 2, "Remaining life: %d",
|
||||
proto_tree_add_text(tree, offset, 2, "Remaining life : %d",
|
||||
pntohs(&ps->isis_snp_remaining_lifetime));
|
||||
isis_lsp_decode_lsp_id( "LSP ID", tree, offset + 2,
|
||||
isis_lsp_decode_lsp_id( "LSP ID ", tree, offset + 2,
|
||||
&ps->isis_snp_lsp_id );
|
||||
proto_tree_add_text(tree, offset+10, 4,
|
||||
"LSP Sequence Number: 0x%04x",
|
||||
"LSP Sequence Number : 0x%04x",
|
||||
pntohl(&ps->isis_snp_sequence_number));
|
||||
proto_tree_add_text(tree, offset+14, 2,
|
||||
"LSP checksum: 0x%02x",
|
||||
pntohl(&ps->isis_snp_checksum));
|
||||
"LSP checksum : 0x%02x",
|
||||
pntohs(&ps->isis_snp_checksum));
|
||||
length -= sizeof ( isis_snp_t );
|
||||
offset += sizeof ( isis_snp_t );
|
||||
ps++;
|
||||
|
@ -258,18 +259,12 @@ isis_dissect_isis_csnp(int type, int header_length, const u_char *pd,
|
|||
proto_tree_add_item(csnp_tree, hf_isis_csnp_pdu_length,
|
||||
offset, 2, pntohs(&ilp->isis_csnp_pdu_length));
|
||||
proto_tree_add_text(csnp_tree, offset + 2, 7,
|
||||
"Source id: %02x%02x.%02x%02x.%02x%02x.%02x",
|
||||
ilp->isis_csnp_source_id[0],
|
||||
ilp->isis_csnp_source_id[1],
|
||||
ilp->isis_csnp_source_id[2],
|
||||
ilp->isis_csnp_source_id[3],
|
||||
ilp->isis_csnp_source_id[4],
|
||||
ilp->isis_csnp_source_id[5],
|
||||
ilp->isis_csnp_source_id[6] );
|
||||
isis_lsp_decode_lsp_id( "Start LSP id", csnp_tree, offset + 9,
|
||||
&ilp->isis_csnp_start_lsp_id );
|
||||
isis_lsp_decode_lsp_id( "End LSP id", csnp_tree, offset + 17,
|
||||
"Source id : %s",
|
||||
print_system_id( pd + offset + 2, 7 ) );
|
||||
isis_lsp_decode_lsp_id( "Start LSP id ", csnp_tree, offset + 9,
|
||||
&ilp->isis_csnp_start_lsp_id );
|
||||
isis_lsp_decode_lsp_id( "End LSP id ", csnp_tree, offset + 17,
|
||||
&ilp->isis_csnp_end_lsp_id );
|
||||
}
|
||||
|
||||
offset += hlen;
|
||||
|
@ -332,14 +327,8 @@ isis_dissect_isis_psnp(int type, int header_length, const u_char *pd,
|
|||
proto_tree_add_item(psnp_tree, hf_isis_psnp_pdu_length,
|
||||
offset, 2, pntohs(&ilp->isis_psnp_pdu_length));
|
||||
proto_tree_add_text(psnp_tree, offset + 2, 7,
|
||||
"Source id: %02x%02x.%02x%02x.%02x%02x.%02x",
|
||||
ilp->isis_psnp_source_id[0],
|
||||
ilp->isis_psnp_source_id[1],
|
||||
ilp->isis_psnp_source_id[2],
|
||||
ilp->isis_psnp_source_id[3],
|
||||
ilp->isis_psnp_source_id[4],
|
||||
ilp->isis_psnp_source_id[5],
|
||||
ilp->isis_psnp_source_id[6] );
|
||||
"Source id: %s",
|
||||
print_system_id( pd + offset + 2, 7 ) );
|
||||
}
|
||||
|
||||
offset += hlen;
|
||||
|
@ -441,7 +430,7 @@ proto_register_isis_csnp(void) {
|
|||
&ett_isis_csnp_clv_unknown,
|
||||
};
|
||||
|
||||
proto_isis_csnp = proto_register_protocol("ISIS csnp", "ISIS-csnp");
|
||||
proto_isis_csnp = proto_register_protocol(PROTO_STRING_CSNP, "isis_csnp");
|
||||
proto_register_field_array(proto_isis_csnp, hf, array_length(hf));
|
||||
proto_register_subtree_array(ett, array_length(ett));
|
||||
}
|
||||
|
@ -479,7 +468,7 @@ proto_register_isis_psnp(void) {
|
|||
&ett_isis_psnp_clv_unknown,
|
||||
};
|
||||
|
||||
proto_isis_psnp = proto_register_protocol("ISIS psnp", "ISIS-psnp");
|
||||
proto_isis_psnp = proto_register_protocol(PROTO_STRING_PSNP, "isis_psnp");
|
||||
proto_register_field_array(proto_isis_psnp, hf, array_length(hf));
|
||||
proto_register_subtree_array(ett, array_length(ett));
|
||||
}
|
||||
|
|
173
packet-isis.c
173
packet-isis.c
|
@ -2,7 +2,7 @@
|
|||
* Routines for ISO/OSI network and transport protocol packet disassembly, core
|
||||
* bits.
|
||||
*
|
||||
* $Id: packet-isis.c,v 1.6 2000/04/13 08:14:35 guy Exp $
|
||||
* $Id: packet-isis.c,v 1.7 2000/04/15 22:11:11 guy Exp $
|
||||
* Stuart Stanley <stuarts@mxmail.net>
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
|
@ -40,37 +40,38 @@
|
|||
#include <glib.h>
|
||||
#include "packet.h"
|
||||
#include "nlpid.h"
|
||||
#include "packet-osi.h"
|
||||
#include "packet-isis.h"
|
||||
#include "packet-isis-lsp.h"
|
||||
#include "packet-isis-hello.h"
|
||||
#include "packet-isis-snp.h"
|
||||
|
||||
|
||||
/* isis base header */
|
||||
static int proto_isis = -1;
|
||||
static int proto_isis = -1;
|
||||
|
||||
static int hf_isis_irpd = -1;
|
||||
static int hf_isis_header_length = -1;
|
||||
static int hf_isis_version = -1;
|
||||
static int hf_isis_reserved = -1;
|
||||
static int hf_isis_type = -1;
|
||||
static int hf_isis_version2 = -1;
|
||||
static int hf_isis_eco = -1;
|
||||
static int hf_isis_user_eco = -1;
|
||||
static int hf_isis_irpd = -1;
|
||||
static int hf_isis_header_length = -1;
|
||||
static int hf_isis_version = -1;
|
||||
static int hf_isis_system_id_length = -1;
|
||||
static int hf_isis_type = -1;
|
||||
static int hf_isis_version2 = -1;
|
||||
static int hf_isis_reserved = -1;
|
||||
static int hf_isis_max_area_adr = -1;
|
||||
|
||||
static gint ett_isis = -1;
|
||||
static gint ett_isis = -1;
|
||||
|
||||
static const value_string isis_vals[] = {
|
||||
{ ISIS_TYPE_L1_HELLO, "L1 HELLO"},
|
||||
{ ISIS_TYPE_L2_HELLO, "L2 HELLO"},
|
||||
{ ISIS_TYPE_PTP_HELLO, "P2P HELLO"},
|
||||
{ ISIS_TYPE_L1_LSP, "L1 LSP"},
|
||||
{ ISIS_TYPE_L2_LSP, "L2 LSP"},
|
||||
{ ISIS_TYPE_L1_CSNP, "L1 CSNP"},
|
||||
{ ISIS_TYPE_L2_CSNP, "L2 CSNP"},
|
||||
{ ISIS_TYPE_L1_PSNP, "L1 PSNP"},
|
||||
{ ISIS_TYPE_L2_PSNP, "L2 PSNP"},
|
||||
{ 0, NULL} };
|
||||
|
||||
{ ISIS_TYPE_L1_HELLO, "L1 HELLO"},
|
||||
{ ISIS_TYPE_L2_HELLO, "L2 HELLO"},
|
||||
{ ISIS_TYPE_PTP_HELLO, "P2P HELLO"},
|
||||
{ ISIS_TYPE_L1_LSP, "L1 LSP"},
|
||||
{ ISIS_TYPE_L2_LSP, "L2 LSP"},
|
||||
{ ISIS_TYPE_L1_CSNP, "L1 CSNP"},
|
||||
{ ISIS_TYPE_L2_CSNP, "L2 CSNP"},
|
||||
{ ISIS_TYPE_L1_PSNP, "L1 PSNP"},
|
||||
{ ISIS_TYPE_L2_PSNP, "L2 PSNP"},
|
||||
{ 0, NULL} };
|
||||
|
||||
/*
|
||||
* Name: dissect_isis_unknown()
|
||||
|
@ -113,47 +114,6 @@ isis_dissect_unknown(int offset,guint length,proto_tree *tree,frame_data *fd,
|
|||
proto_tree_add_text(tree, offset, length, fmat, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
/*
|
||||
* Name: isis_address_to_string()
|
||||
*
|
||||
* Description:
|
||||
* Function for taking a byte string and turn it into a "0000.0000...."
|
||||
* format ISIS address.
|
||||
*
|
||||
* Input:
|
||||
* u_char * : Packet data
|
||||
* unt offset : Current offset into packet data.
|
||||
* int len : length of to dump.
|
||||
*
|
||||
* Output:
|
||||
* static char * : print string
|
||||
*/
|
||||
char
|
||||
*isis_address_to_string ( const u_char *pd, int offset, int len ) {
|
||||
static char sbuf[768];
|
||||
char *s;
|
||||
|
||||
sbuf[0] = 0;
|
||||
s = sbuf;
|
||||
while ( len > 0 ) {
|
||||
/* special case: len is 1, put ending on it */
|
||||
if ( len == 1 ) {
|
||||
s += sprintf ( s, "%02x", pd[offset++] );
|
||||
len--;
|
||||
} else {
|
||||
/* general case, just add 2 bytes */
|
||||
s+= sprintf ( s, "%02x%02x", pd[offset++],
|
||||
pd[offset++] );
|
||||
len -= 2;
|
||||
}
|
||||
if ( len > 0 ) {
|
||||
s += sprintf ( s, "." );
|
||||
}
|
||||
}
|
||||
return sbuf;
|
||||
}
|
||||
|
||||
/*
|
||||
* Name: dissect_isis()
|
||||
*
|
||||
|
@ -208,22 +168,22 @@ dissect_isis(const u_char *pd, int offset, frame_data *fd,
|
|||
offset + 1, 1, ihdr->isis_header_length );
|
||||
proto_tree_add_item(isis_tree, hf_isis_version,
|
||||
offset + 2, 1, ihdr->isis_version );
|
||||
proto_tree_add_item(isis_tree, hf_isis_reserved,
|
||||
offset + 3, 1, ihdr->isis_reserved );
|
||||
proto_tree_add_item(isis_tree, hf_isis_system_id_length,
|
||||
offset + 3, 1, ihdr->isis_system_id_len );
|
||||
proto_tree_add_uint_format(isis_tree, hf_isis_type,
|
||||
offset + 4, 1, ihdr->isis_type,
|
||||
"Type: %s (R:%s%s%s)",
|
||||
"Type : %s (R:%s%s%s)",
|
||||
val_to_str(ihdr->isis_type & ISIS_TYPE_MASK, isis_vals,
|
||||
"Unknown (0x%x)"),
|
||||
"Unknown (0x%x)"),
|
||||
(ihdr->isis_type & ISIS_R8_MASK) ? "1" : "0",
|
||||
(ihdr->isis_type & ISIS_R7_MASK) ? "1" : "0",
|
||||
(ihdr->isis_type & ISIS_R6_MASK) ? "1" : "0");
|
||||
proto_tree_add_item(isis_tree, hf_isis_version2,
|
||||
offset + 5, 1, ihdr->isis_version2 );
|
||||
proto_tree_add_item(isis_tree, hf_isis_eco,
|
||||
offset + 6, 1, ihdr->isis_eco );
|
||||
proto_tree_add_item(isis_tree, hf_isis_user_eco,
|
||||
offset + 7, 1, ihdr->isis_user_eco );
|
||||
proto_tree_add_item(isis_tree, hf_isis_reserved,
|
||||
offset + 6, 1, ihdr->isis_reserved );
|
||||
proto_tree_add_item(isis_tree, hf_isis_max_area_adr,
|
||||
offset + 7, 1, ihdr->isis_max_area_adr );
|
||||
}
|
||||
|
||||
|
||||
|
@ -304,49 +264,48 @@ dissect_isis(const u_char *pd, int offset, frame_data *fd,
|
|||
*/
|
||||
void
|
||||
proto_register_isis(void) {
|
||||
static hf_register_info hf[] = {
|
||||
{ &hf_isis_irpd,
|
||||
{ "Intradomain Routing Protocol Discriminator", "isis.irpd",
|
||||
FT_UINT8, BASE_HEX, VALS(nlpid_vals), 0x0, "" }},
|
||||
static hf_register_info hf[] = {
|
||||
{ &hf_isis_irpd,
|
||||
{ "Intra Domain Routing Protocol Discriminator", "isis.irpd",
|
||||
FT_UINT8, BASE_HEX, VALS(nlpid_vals), 0x0, "" }},
|
||||
|
||||
{ &hf_isis_header_length,
|
||||
{ "HDR Length", "isis.hdr_len", FT_UINT8, BASE_DEC,
|
||||
NULL, 0x0, "" }},
|
||||
{ &hf_isis_header_length,
|
||||
{ "PDU Header Length ", "isis.len", FT_UINT8, BASE_DEC, NULL, 0x0, "" }},
|
||||
|
||||
{ &hf_isis_version,
|
||||
{ "Version (==1)", "isis.version", FT_UINT8,
|
||||
BASE_DEC, NULL, 0x0, "" }},
|
||||
{ &hf_isis_version,
|
||||
{ "Version (==1) ", "isis.version", FT_UINT8,
|
||||
BASE_DEC, NULL, 0x0, "" }},
|
||||
|
||||
{ &hf_isis_reserved,
|
||||
{ "Reserved(==0)", "isis.reserved",
|
||||
FT_UINT8, BASE_DEC, NULL, 0x0, "" }},
|
||||
{ &hf_isis_system_id_length,
|
||||
{ "System ID Length ", "isis.sysid_len",
|
||||
FT_UINT8, BASE_DEC, NULL, 0x0, "" }},
|
||||
|
||||
{ &hf_isis_type,
|
||||
{ "Type code", "isis.type", FT_UINT8, BASE_DEC,
|
||||
VALS(isis_vals), 0xff, "" }},
|
||||
{ &hf_isis_type,
|
||||
{ "PDU Type :", "isis.type", FT_UINT8, BASE_DEC,
|
||||
VALS(isis_vals), 0xff, "" }},
|
||||
|
||||
{ &hf_isis_version2,
|
||||
{ "Version2(==1)", "isis.version2", FT_UINT8, BASE_DEC, NULL,
|
||||
0x0, "" }},
|
||||
{ &hf_isis_version2,
|
||||
{ "Version2 (==1) ", "isis.version2", FT_UINT8, BASE_DEC, NULL,
|
||||
0x0, "" }},
|
||||
|
||||
{ &hf_isis_eco,
|
||||
{ "ECO (==0)", "isis.eco",FT_UINT8, BASE_DEC, NULL,
|
||||
0x0, "" }},
|
||||
{ &hf_isis_reserved,
|
||||
{ "Reserved (==0) ", "isis.reserved", FT_UINT8, BASE_DEC, NULL,
|
||||
0x0, "" }},
|
||||
|
||||
{ &hf_isis_user_eco,
|
||||
{ "User ECO (==0)", "isis.user_eco", FT_UINT8, BASE_DEC, NULL,
|
||||
0x0, "" }},
|
||||
{ &hf_isis_max_area_adr,
|
||||
{ "Max.AREAs: (0==3) ", "isis.max_area_adr", FT_UINT8, BASE_DEC, NULL,
|
||||
0x0, "" }},
|
||||
|
||||
};
|
||||
/*
|
||||
* Note, we pull in the unknown CLV handler here, since it
|
||||
* is used by all ISIS packet types.
|
||||
*/
|
||||
static gint *ett[] = {
|
||||
&ett_isis,
|
||||
};
|
||||
};
|
||||
/*
|
||||
* Note, we pull in the unknown CLV handler here, since it
|
||||
* is used by all ISIS packet types.
|
||||
*/
|
||||
static gint *ett[] = {
|
||||
&ett_isis,
|
||||
};
|
||||
|
||||
proto_isis = proto_register_protocol("clnp ISIS", "isis");
|
||||
proto_register_field_array(proto_isis, hf, array_length(hf));
|
||||
proto_register_subtree_array(ett, array_length(ett));
|
||||
proto_isis = proto_register_protocol(PROTO_STRING_ISIS, "isis");
|
||||
proto_register_field_array(proto_isis, hf, array_length(hf));
|
||||
proto_register_subtree_array(ett, array_length(ett));
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* packet-isis.h
|
||||
* Defines and such for core isis protcol decode.
|
||||
*
|
||||
* $Id: packet-isis.h,v 1.2 2000/01/13 06:07:52 guy Exp $
|
||||
* $Id: packet-isis.h,v 1.3 2000/04/15 22:11:11 guy Exp $
|
||||
* Stuart Stanley <stuarts@mxmail.net>
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
|
@ -37,48 +37,50 @@
|
|||
/*
|
||||
* ISIS type field values
|
||||
*/
|
||||
#define ISIS_TYPE_L1_HELLO 15
|
||||
#define ISIS_TYPE_L2_HELLO 16
|
||||
#define ISIS_TYPE_PTP_HELLO 17
|
||||
#define ISIS_TYPE_L1_LSP 18
|
||||
#define ISIS_TYPE_L2_LSP 20
|
||||
#define ISIS_TYPE_L1_CSNP 24
|
||||
#define ISIS_TYPE_L2_CSNP 25
|
||||
#define ISIS_TYPE_L1_PSNP 26
|
||||
#define ISIS_TYPE_L2_PSNP 27
|
||||
#define ISIS_TYPE_L1_HELLO 15
|
||||
#define ISIS_TYPE_L2_HELLO 16
|
||||
#define ISIS_TYPE_PTP_HELLO 17
|
||||
#define ISIS_TYPE_L1_LSP 18
|
||||
#define ISIS_TYPE_L2_LSP 20
|
||||
#define ISIS_TYPE_L1_CSNP 24
|
||||
#define ISIS_TYPE_L2_CSNP 25
|
||||
#define ISIS_TYPE_L1_PSNP 26
|
||||
#define ISIS_TYPE_L2_PSNP 27
|
||||
|
||||
#define ISIS_TYPE_MASK 0x1f
|
||||
#define ISIS_R8_MASK 0x80
|
||||
#define ISIS_R7_MASK 0x40
|
||||
#define ISIS_R6_MASK 0x20
|
||||
|
||||
/*
|
||||
* The common first 8 octets of the ISIS protocol header.
|
||||
*/
|
||||
typedef struct {
|
||||
guint8 isis_irpd; /* Intradomain Routing Protocol Descriminator. Must be 0x83 */
|
||||
guint8 isis_header_length; /* header length in octets */
|
||||
guint8 isis_version; /* isis version, must be 0x01 */
|
||||
guint8 isis_reserved; /* res byte, must be 0 */
|
||||
guint8 isis_type_reserved; /* packet type & reserved */
|
||||
#define ISIS_TYPE_MASK 0x1f
|
||||
#define ISIS_R8_MASK 0x80
|
||||
#define ISIS_R7_MASK 0x40
|
||||
#define ISIS_R6_MASK 0x20
|
||||
guint8 isis_version2; /* another version(?!), must be 0x01 */
|
||||
|
||||
guint8 isis_eco; /* ECO, must be 0 */
|
||||
guint8 isis_user_eco; /* user ECO, must be 0 */
|
||||
} isis_hdr_t;
|
||||
guint8 isis_irpd; /* Intradomain Routing Protocol Descriminator: 0x83 */
|
||||
guint8 isis_header_length; /* header length in octets */
|
||||
guint8 isis_version; /* isis version, must be 0x01 */
|
||||
guint8 isis_system_id_len; /* length of the system ID fields */
|
||||
guint8 isis_type_reserved; /* packet type & reserved */
|
||||
guint8 isis_version2; /* another version(?!), must be 0x01 */
|
||||
guint8 isis_reserved; /* reserved, must be 0 */
|
||||
guint8 isis_max_area_adr; /* Maximum Number of AREA Addresses permitted */
|
||||
} isis_hdr_t; /* for this AREA. Value of 0 allows 3 Addresses */
|
||||
|
||||
#define isis_type isis_type_reserved&ISIS_TYPE_MASK
|
||||
#define isis_r8 isis_type_reserved&ISIS_R8_MASK
|
||||
#define isis_r7 isis_type_reserved&ISIS_R7_MASK
|
||||
#define isis_r6 isis_type_reserved&ISIS_R6_MASK
|
||||
#define isis_r8 isis_type_reserved&ISIS_R8_MASK
|
||||
#define isis_r7 isis_type_reserved&ISIS_R7_MASK
|
||||
#define isis_r6 isis_type_reserved&ISIS_R6_MASK
|
||||
|
||||
|
||||
/*
|
||||
* published API functions
|
||||
*/
|
||||
|
||||
extern char *isis_address_to_string ( const u_char *pd, int offset, int len );
|
||||
extern void dissect_isis(const u_char *pd, int offset, frame_data *fd,
|
||||
proto_tree *tree);
|
||||
extern void dissect_isis( const u_char *pd, int offset, frame_data *fd,
|
||||
proto_tree *tree);
|
||||
extern void proto_register_isis(void);
|
||||
extern void isis_dissect_unknown(int offset,guint length,proto_tree *tree,frame_data *fd,
|
||||
char *fmat, ...);
|
||||
extern void isis_dissect_unknown( int offset, guint length, proto_tree *tree,
|
||||
frame_data *fd, char *fmat, ...);
|
||||
|
||||
#endif /* _PACKET_ISIS_H */
|
||||
|
|
|
@ -0,0 +1,466 @@
|
|||
/* packet-osi-options.c
|
||||
* Routines for the decode of ISO/OSI option part
|
||||
* Covers:
|
||||
* ISO 8473 CLNP (ConnectionLess Mode Network Service Protocol)
|
||||
* ISO 10589 ISIS (Intradomain Routeing Information Exchange Protocol)
|
||||
* ISO 9542 ESIS (End System To Intermediate System Routeing Exchange Protocol)
|
||||
*
|
||||
* $Id: packet-osi-options.c,v 1.1 2000/04/15 22:11:11 guy Exp $
|
||||
* Ralf Schneider <Ralf.Schneider@t-online.de>
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@zing.org>
|
||||
* 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.
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SYS_TYPES_H
|
||||
# include <sys/types.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <glib.h>
|
||||
#include "packet.h"
|
||||
#include "nlpid.h"
|
||||
#include "packet-osi.h"
|
||||
#include "packet-isis.h"
|
||||
#include "packet-isis-clv.h"
|
||||
#include "packet-isis-hello.h"
|
||||
#include "packet-isis-lsp.h"
|
||||
#include "packet-isis-snp.h"
|
||||
#include "packet-esis.h"
|
||||
#include "packet-clnp.h"
|
||||
#include "packet-osi-options.h"
|
||||
|
||||
#define OSI_OPT_SECURITY 0xc5
|
||||
#define OSI_OPT_QOS_MAINTANANCE 0xc3
|
||||
#define OSI_OPT_PRIORITY 0xcd
|
||||
#define OSI_OPT_ADDRESS_MASK 0xe1
|
||||
#define OSI_OPT_SNPA_MASK 0xe2
|
||||
#define OSI_OPT_ES_CONFIG_TIMER 0xc6
|
||||
|
||||
#define OSI_OPT_MAX_PRIORITY 0x0e
|
||||
|
||||
#define OSI_OPT_PADDING 0xcc
|
||||
#define OSI_OPT_SOURCE_ROUTING 0xc8
|
||||
#define OSI_OPT_RECORD_OF_ROUTE 0xcb
|
||||
#define OSI_OPT_REASON_OF_DISCARD 0xc1
|
||||
|
||||
#define OSI_OPT_SEC_MASK 0xc0
|
||||
#define OSI_OPT_SEC_RESERVED 0x00
|
||||
#define OSI_OPT_SEC_SRC_ADR_SPEC 0x40
|
||||
#define OSI_OPT_SEC_DST_ADR_SPEC 0x80
|
||||
#define OSI_OPT_SEC_GLOBAL_UNIQUE 0xc0
|
||||
|
||||
#define OSI_OPT_QOS_MASK 0xc0
|
||||
#define OSI_OPT_QOS_RESERVED 0x00
|
||||
#define OSI_OPT_QOS_SRC_ADR_SPEC 0x40
|
||||
#define OSI_OPT_QOS_DST_ADR_SPEC 0x80
|
||||
#define OSI_OPT_QOS_GLOBAL_UNIQUE 0xc0
|
||||
|
||||
#define OSI_OPT_QOS_SUB_MASK 0x3f
|
||||
#define OSI_OPT_QOS_SUB_RSVD 0x20
|
||||
#define OSI_OPT_QOS_SUB_SEQ_VS_TRS 0x10
|
||||
#define OSI_OPT_QOS_SUB_CONG_EXPED 0x08
|
||||
#define OSI_OPT_QOS_SUB_TSD_VS_COST 0x04
|
||||
#define OSI_OPT_QOS_SUB_RESERR_TRS 0x02
|
||||
#define OSI_OPT_QOS_SUB_RESERR_COST 0x01
|
||||
|
||||
#define OSI_OPT_RFD_GENERAL 0x00
|
||||
#define OSI_OPT_RFD_ADDRESS 0x80
|
||||
#define OSI_OPT_RFD_SOURCE_ROUTEING 0x90
|
||||
#define OSI_OPT_RFD_LIFETIME 0xa0
|
||||
#define OSI_OPT_RFD_PDU_DISCARDED 0xb0
|
||||
#define OSI_OPT_RFD_REASSEMBLY 0xc0
|
||||
|
||||
#define OSI_OPT_RFD_MASK 0xf0
|
||||
#define OSI_OPT_RFD_SUB_MASK 0x0f
|
||||
|
||||
|
||||
|
||||
|
||||
static gint ott_osi_options = -1;
|
||||
static gint ott_osi_qos = -1;
|
||||
static gint ott_osi_route = -1;
|
||||
static gint ott_osi_redirect = -1;
|
||||
|
||||
static const value_string osi_opt_sec_vals[] = {
|
||||
{ OSI_OPT_SEC_RESERVED, "Reserved"},
|
||||
{ OSI_OPT_SEC_SRC_ADR_SPEC, "Source Address Specific"},
|
||||
{ OSI_OPT_SEC_DST_ADR_SPEC, "Destination Address Specific"},
|
||||
{ OSI_OPT_SEC_GLOBAL_UNIQUE, "Globally Unique"},
|
||||
{ 0, NULL} };
|
||||
|
||||
static const value_string osi_opt_qos_vals[] = {
|
||||
{ OSI_OPT_QOS_RESERVED, "Reserved"},
|
||||
{ OSI_OPT_QOS_SRC_ADR_SPEC, "Source Address Specific"},
|
||||
{ OSI_OPT_QOS_DST_ADR_SPEC, "Destination Address Specific"},
|
||||
{ OSI_OPT_QOS_GLOBAL_UNIQUE, "Globally Unique"},
|
||||
{ 0, NULL} };
|
||||
|
||||
static const value_string osi_opt_qos_sub_vals[] = {
|
||||
{ 0x20, " xx10 0000 Reserved"},
|
||||
{ 0x10, " xx01 0000 Sequencing versus transit delay"},
|
||||
{ 0x08, " xx00 1000 Congestion experienced"},
|
||||
{ 0x04, " xx00 0100 Transit delay versus cost"},
|
||||
{ 0x02, " xx00 0010 Residual error probability versus transit delay"},
|
||||
{ 0x01, " xx00 0001 Residual error probability versus cost"},
|
||||
{ 0, NULL} };
|
||||
|
||||
static const value_string osi_opt_rfd_general[] = {
|
||||
{ 0x00, "Reason not specified"},
|
||||
{ 0x01, "Protocol procedure error"},
|
||||
{ 0x02, "Incorrect checksum"},
|
||||
{ 0x03, "PDU discarded due to congestion"},
|
||||
{ 0x04, "Header syntax error ( cannot be parsed )"},
|
||||
{ 0x05, "Segmentation needed but not permitted"},
|
||||
{ 0x06, "Incomplete PDU received"},
|
||||
{ 0x07, "Duplicate option"},
|
||||
{ 0, NULL} };
|
||||
|
||||
static const value_string osi_opt_rfd_address[] = {
|
||||
{ 0x00, "Destination Address unreachable"},
|
||||
{ 0x01, "Destination Address unknown"},
|
||||
{ 0, NULL} };
|
||||
|
||||
static const value_string osi_opt_rfd_src_route[] = {
|
||||
{ 0x00, "Unspecified source routeing error"},
|
||||
{ 0x01, "Syntax error in source routeing field"},
|
||||
{ 0x02, "Unknown address in source routeing field"},
|
||||
{ 0x03, "Path not acceptable"},
|
||||
{ 0, NULL} };
|
||||
|
||||
static const value_string osi_opt_rfd_lifetime[] = {
|
||||
{ 0x00, "Lifetime expired while data unit in transit"},
|
||||
{ 0x01, "Lifetime expired during reassembly"},
|
||||
{ 0, NULL} };
|
||||
|
||||
static const value_string osi_opt_rfd_discarded[] = {
|
||||
{ 0x00, "Unsupported option not specified"},
|
||||
{ 0x01, "Unsupported protocol version"},
|
||||
{ 0x02, "Unsupported security option"},
|
||||
{ 0x03, "Unsupported source routeing option"},
|
||||
{ 0x04, "Unsupported recording of route option"},
|
||||
{ 0, NULL} };
|
||||
|
||||
static const value_string osi_opt_rfd_reassembly[] = {
|
||||
{ 0x00, "Reassembly interference"},
|
||||
{ 0, NULL} };
|
||||
|
||||
|
||||
void
|
||||
dissect_option_qos( const u_char type, const u_char sub_type, u_char offset,
|
||||
u_char len, const u_char *pd, proto_tree *tree ) {
|
||||
|
||||
u_char tmp_type = 0;
|
||||
proto_item *ti;
|
||||
proto_tree *osi_qos_tree = NULL;
|
||||
|
||||
|
||||
ti = proto_tree_add_text( tree, offset, len,
|
||||
"Quality of service maintenance: %s",
|
||||
val_to_str( type, osi_opt_qos_vals, "Unknown (0x%x)") );
|
||||
|
||||
osi_qos_tree = proto_item_add_subtree( ti, ott_osi_qos );
|
||||
|
||||
if ( OSI_OPT_SEC_MASK == type ) { /* Analye BIT field to get all Values */
|
||||
|
||||
tmp_type = sub_type & OSI_OPT_QOS_SUB_RSVD;
|
||||
if ( tmp_type ) {
|
||||
proto_tree_add_text( osi_qos_tree, offset, len,
|
||||
val_to_str( tmp_type, osi_opt_qos_sub_vals, "Unknown (0x%x)") );
|
||||
}
|
||||
tmp_type = sub_type & OSI_OPT_QOS_SUB_SEQ_VS_TRS;
|
||||
if ( tmp_type ) {
|
||||
proto_tree_add_text( osi_qos_tree, offset, len,
|
||||
val_to_str( tmp_type, osi_opt_qos_sub_vals, "Unknown (0x%x)") );
|
||||
}
|
||||
tmp_type = sub_type &OSI_OPT_QOS_SUB_CONG_EXPED;
|
||||
if ( tmp_type ) {
|
||||
proto_tree_add_text( osi_qos_tree, offset, len,
|
||||
val_to_str( tmp_type, osi_opt_qos_sub_vals, "Unknown (0x%x)") );
|
||||
}
|
||||
tmp_type = sub_type & OSI_OPT_QOS_SUB_TSD_VS_COST;
|
||||
|
||||
if ( tmp_type ) {
|
||||
proto_tree_add_text( osi_qos_tree, offset, len,
|
||||
val_to_str( tmp_type, osi_opt_qos_sub_vals, "Unknown (0x%x)") );
|
||||
}
|
||||
tmp_type = sub_type & OSI_OPT_QOS_SUB_RESERR_TRS;
|
||||
if ( tmp_type ) {
|
||||
proto_tree_add_text( osi_qos_tree, offset, len,
|
||||
val_to_str( tmp_type, osi_opt_qos_sub_vals, "Unknown (0x%x)") );
|
||||
}
|
||||
tmp_type = sub_type & OSI_OPT_QOS_SUB_RESERR_COST;
|
||||
if ( tmp_type ) {
|
||||
proto_tree_add_text( osi_qos_tree, offset, len,
|
||||
val_to_str( tmp_type, osi_opt_qos_sub_vals, "Unknown (0x%x)") );
|
||||
}
|
||||
}
|
||||
};
|
||||
void
|
||||
dissect_option_route( u_char parm_type, u_char offset, u_char parm_len,
|
||||
const u_char *pd, proto_tree *tree ) {
|
||||
|
||||
u_char next_hop = 0;
|
||||
u_char this_hop = 0;
|
||||
u_char netl = 0;
|
||||
u_char last_hop = 0;
|
||||
u_char cnt_hops = 0;
|
||||
|
||||
proto_item *ti;
|
||||
proto_tree *osi_route_tree = NULL;
|
||||
|
||||
static const value_string osi_opt_route[] = {
|
||||
{ 0x03, "No Network Entity Titles Recorded Yet"},
|
||||
{ 0xff, "Recording Terminated !"},
|
||||
{ 0, NULL} };
|
||||
|
||||
if ( parm_type == OSI_OPT_SOURCE_ROUTING ) {
|
||||
next_hop = pd[offset + 1 ];
|
||||
netl = pd[next_hop + 2 ];
|
||||
this_hop = offset + 3; /* points to first netl */
|
||||
|
||||
ti = proto_tree_add_text( tree, offset + next_hop, netl,
|
||||
"Source Routing: %s ( Next Hop Highlighted In Data Buffer )",
|
||||
(pd[offset] == 0) ? "Partial Source Routeing" :
|
||||
"Complete Source Routeing" );
|
||||
}
|
||||
else {
|
||||
last_hop = pd[offset + 1 ]; /* points to the end of the list */
|
||||
netl = pd[ last_hop ]; /* mis-used to highlight buffer */
|
||||
|
||||
ti = proto_tree_add_text( tree, offset + next_hop, netl,
|
||||
"Record of Route: %s : %s",
|
||||
(pd[offset] == 0) ? "Partial Source Routeing" :
|
||||
"Complete Source Routeing" ,
|
||||
val_to_str( last_hop, osi_opt_route, "Unknown (0x%x" ) );
|
||||
if ( 255 == last_hop )
|
||||
this_hop = parm_len + 1; /* recording terminated, nothing to show */
|
||||
else
|
||||
this_hop = offset + 3;
|
||||
}
|
||||
osi_route_tree = proto_item_add_subtree( ti, ott_osi_route );
|
||||
|
||||
while ( this_hop < parm_len ) {
|
||||
netl = pd[this_hop + 1];
|
||||
proto_tree_add_text( osi_route_tree, offset + this_hop, netl,
|
||||
"Hop #%3u NETL: %2u, NET: %s",
|
||||
cnt_hops++,
|
||||
netl,
|
||||
print_nsap_net( &pd[this_hop + 1], netl ) );
|
||||
this_hop += 1 + netl;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void
|
||||
dissect_option_rfd( const u_char error, const u_char field, u_char offset,
|
||||
u_char len, const u_char *pd, proto_tree *tree ) {
|
||||
u_char error_class = 0;
|
||||
char *format_string[] =
|
||||
{ "Reason for discard {General} : %s, in field %u",
|
||||
"Reason for discard {Address} : %s, in field %u",
|
||||
"Reason for discard {Source Routeing}: %s, in field %u",
|
||||
"Reason for discard {Lifetime} : %s, in field %u",
|
||||
"Reason for discard {PDU discarded} : %s, in field %u",
|
||||
"Reason for discard {Reassembly} : %s, in field %u"
|
||||
};
|
||||
|
||||
error_class = error & OSI_OPT_RFD_MASK;
|
||||
|
||||
if ( OSI_OPT_RFD_GENERAL == error_class ) {
|
||||
proto_tree_add_text( tree, offset + field, 1, format_string[0],
|
||||
val_to_str( error & OSI_OPT_RFD_SUB_MASK,
|
||||
osi_opt_rfd_general, "Unknown (0x%x)"), field );
|
||||
}
|
||||
else if ( OSI_OPT_RFD_ADDRESS == error_class ) {
|
||||
proto_tree_add_text( tree, offset + field, 1, format_string[1],
|
||||
val_to_str( error & OSI_OPT_RFD_SUB_MASK,
|
||||
osi_opt_rfd_address, "Unknown (0x%x)"), field );
|
||||
}
|
||||
else if ( OSI_OPT_RFD_SOURCE_ROUTEING == error_class ) {
|
||||
proto_tree_add_text( tree, offset + field, 1, format_string[2],
|
||||
val_to_str( error & OSI_OPT_RFD_SUB_MASK,
|
||||
osi_opt_rfd_src_route, "Unknown (0x%x)"), field );
|
||||
}
|
||||
else if ( OSI_OPT_RFD_LIFETIME == error_class ) {
|
||||
proto_tree_add_text( tree, offset + field, 1, format_string[3],
|
||||
val_to_str( error & OSI_OPT_RFD_SUB_MASK,
|
||||
osi_opt_rfd_lifetime, "Unknown (0x%x)"), field );
|
||||
}
|
||||
else if ( OSI_OPT_RFD_PDU_DISCARDED == error_class ) {
|
||||
proto_tree_add_text( tree, offset + field, 1, format_string[4],
|
||||
val_to_str( error & OSI_OPT_RFD_SUB_MASK,
|
||||
osi_opt_rfd_discarded, "Unknown (0x%x)"), field );
|
||||
}
|
||||
else if ( OSI_OPT_RFD_REASSEMBLY == error_class ) {
|
||||
proto_tree_add_text( tree, offset + field, 1, format_string[5],
|
||||
val_to_str( error & OSI_OPT_RFD_SUB_MASK,
|
||||
osi_opt_rfd_reassembly, "Unknown (0x%x)"), field );
|
||||
}
|
||||
else {
|
||||
proto_tree_add_text( tree, offset, len,
|
||||
"Reason for discard: UNKNOWN Error Class" );
|
||||
}
|
||||
};
|
||||
|
||||
/* ############################## Dissection Functions ###################### */
|
||||
|
||||
/*
|
||||
* Name: dissect_osi_options()
|
||||
*
|
||||
* Description:
|
||||
* Main entry area for esis de-mangling. This will build the
|
||||
* main esis tree data and call the sub-protocols as needed.
|
||||
*
|
||||
* Input:
|
||||
* u_char : PDU type to check if option is allowed or not
|
||||
* u_char : length of option section
|
||||
* u_char * : packet data
|
||||
* int : offset into packet where we are (packet_data[offset]== start
|
||||
* of what we care about)
|
||||
* frame_data * : frame data (whole packet with extra info)
|
||||
* proto_tree * : tree of display data. May be NULL.
|
||||
*
|
||||
* Output:
|
||||
* void, but we will add to the proto_tree if it is not NULL.
|
||||
*/
|
||||
void
|
||||
dissect_osi_options( u_char pdu_type, u_char opt_len, const u_char *pd,
|
||||
int offset, frame_data *fd, proto_tree *tree) {
|
||||
proto_item *ti;
|
||||
proto_tree *osi_option_tree = NULL;
|
||||
u_char parm_len = 0;
|
||||
u_char parm_type = 0;
|
||||
|
||||
if (tree) {
|
||||
if ( 0 == opt_len ) {
|
||||
proto_tree_add_text( tree, offset, 0,
|
||||
"### No Options for this PDU ###" );
|
||||
return;
|
||||
}
|
||||
|
||||
if ( opt_len > END_OF_FRAME ) {
|
||||
proto_tree_add_text( tree, offset, END_OF_FRAME,
|
||||
"### Options go past the end of the captured data in this PDU ###" );
|
||||
return;
|
||||
}
|
||||
|
||||
ti = proto_tree_add_text( tree, offset, opt_len,
|
||||
"### Option Section ###" );
|
||||
osi_option_tree = proto_item_add_subtree( ti, ott_osi_options );
|
||||
|
||||
while ( 0 < opt_len ) {
|
||||
parm_type = (int) pd[offset++];
|
||||
parm_len = (int) pd[offset++];
|
||||
|
||||
switch ( parm_type ) {
|
||||
case OSI_OPT_QOS_MAINTANANCE:
|
||||
dissect_option_qos( pd[offset]&OSI_OPT_QOS_MASK,
|
||||
pd[offset]&OSI_OPT_QOS_SUB_MASK,
|
||||
offset, parm_len, pd, osi_option_tree );
|
||||
break;
|
||||
case OSI_OPT_SECURITY:
|
||||
proto_tree_add_text( osi_option_tree, offset, parm_len,
|
||||
"Security type: %s",
|
||||
val_to_str( pd[offset]&OSI_OPT_SEC_MASK,
|
||||
osi_opt_sec_vals, "Unknown (0x%x)") );
|
||||
break;
|
||||
case OSI_OPT_PRIORITY:
|
||||
if ( OSI_OPT_MAX_PRIORITY >= pd[offset] ) {
|
||||
proto_tree_add_text( osi_option_tree, offset, parm_len,
|
||||
"Priority : %u", pd[offset] );
|
||||
}
|
||||
else {
|
||||
proto_tree_add_text( osi_option_tree, offset, parm_len,
|
||||
"Priority : %u ( Invalid )",
|
||||
pd[offset] );
|
||||
}
|
||||
break;
|
||||
case OSI_OPT_ADDRESS_MASK:
|
||||
proto_tree_add_text( osi_option_tree, offset, parm_len,
|
||||
"Address Mask: %s", print_area( &pd[offset], parm_len ) );
|
||||
break;
|
||||
case OSI_OPT_SNPA_MASK:
|
||||
proto_tree_add_text( osi_option_tree, offset, parm_len,
|
||||
"SNPA Mask : %s", print_system_id( &pd[offset], parm_len ));
|
||||
break;
|
||||
case OSI_OPT_ES_CONFIG_TIMER:
|
||||
proto_tree_add_text( osi_option_tree, offset, parm_len,
|
||||
"ESCT : %u seconds", pntohs( &pd[offset] ) );
|
||||
break;
|
||||
case OSI_OPT_PADDING:
|
||||
proto_tree_add_text( osi_option_tree, offset, parm_len,
|
||||
"Padding : %u Octets", parm_len ) ;
|
||||
break;
|
||||
case OSI_OPT_SOURCE_ROUTING:
|
||||
case OSI_OPT_RECORD_OF_ROUTE:
|
||||
dissect_option_route( parm_type,
|
||||
offset, parm_len, pd, osi_option_tree );
|
||||
break;
|
||||
case OSI_OPT_REASON_OF_DISCARD:
|
||||
dissect_option_rfd( pd[offset],
|
||||
pd[offset + 1],
|
||||
offset, parm_len, pd, osi_option_tree );
|
||||
break;
|
||||
}
|
||||
opt_len -= parm_len + 2;
|
||||
offset += parm_len;
|
||||
}
|
||||
}
|
||||
}; /* dissect-osi-options */
|
||||
|
||||
|
||||
/*
|
||||
* Name: proto_register_osi_options()
|
||||
*
|
||||
* Description:
|
||||
* main register for esis protocol set. We register some display
|
||||
* formats and the protocol module variables.
|
||||
*
|
||||
* NOTE: this procedure to autolinked by the makefile process that
|
||||
* builds register.c
|
||||
*
|
||||
* Input:
|
||||
* void
|
||||
*
|
||||
* Output:
|
||||
* void
|
||||
*/
|
||||
|
||||
void
|
||||
proto_register_osi_options(void) {
|
||||
static gint *ott[] = {
|
||||
&ott_osi_options,
|
||||
&ott_osi_qos,
|
||||
&ott_osi_route,
|
||||
&ott_osi_redirect,
|
||||
};
|
||||
proto_register_subtree_array( ott, array_length(ott));
|
||||
};
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
/* packet-osi-options.h
|
||||
* Defines for OSI options part decode
|
||||
*
|
||||
* $Id: packet-osi-options.h,v 1.1 2000/04/15 22:11:12 guy Exp $
|
||||
* Ralf Schneider <Ralf.Schneider@t-online.de>
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@zing.org>
|
||||
* 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_OSI_OPTION_H
|
||||
#define _PACKET_OSI_OPTIONS_H
|
||||
|
||||
/*
|
||||
* published API functions
|
||||
*/
|
||||
extern void dissect_osi_options( u_char, u_char, const u_char *, int,
|
||||
frame_data *, proto_tree *);
|
||||
extern void proto_register_osi_options(void);
|
||||
|
||||
#endif /* _PACKET_OSI_OPTIONS_H */
|
1886
packet-osi.c
1886
packet-osi.c
File diff suppressed because it is too large
Load Diff
90
packet-osi.h
90
packet-osi.h
|
@ -1,6 +1,6 @@
|
|||
/* packet-osi.h
|
||||
*
|
||||
* $Id: packet-osi.h,v 1.1 2000/02/15 21:02:48 gram Exp $
|
||||
* $Id: packet-osi.h,v 1.2 2000/04/15 22:11:12 guy Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@zing.org>
|
||||
|
@ -20,8 +20,92 @@
|
|||
* 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_OSI_H
|
||||
#define _PACKET_OSI_H
|
||||
|
||||
/* OSI Global defines, common for all OSI protocols */
|
||||
|
||||
#define MAX_NSAP_LEN 30
|
||||
#define MAX_SYSTEMID_LEN 15
|
||||
#define MAX_AREA_LEN 30
|
||||
|
||||
#define RFC1237_NSAP_LEN 20
|
||||
#define RFC1237_FULLAREA_LEN 13
|
||||
#define RFC1237_SYSTEMID_LEN 6
|
||||
#define RFC1237_SELECTOR_LEN 1
|
||||
|
||||
#define RFC1237_IDI_LEN 2
|
||||
#define RFC1237_AFI_LEN 1
|
||||
#define RFC1237_DFI_LEN 1
|
||||
#define RFC1237_ORG_LEN 3
|
||||
#define RFC1237_AA_LEN 3
|
||||
#define RFC1237_RSVD_LEN 2
|
||||
#define RFC1237_RD_LEN 2
|
||||
#define RFC1237_AREA_LEN 3
|
||||
|
||||
|
||||
#define NSAP_IDI_ISODCC 0x39
|
||||
#define NSAP_IDI_GOSIP2 0x47
|
||||
|
||||
#define PDU_TYPE_ESIS_ESH 100
|
||||
#define PDU_TYPE_ESIS_ISH 101
|
||||
#define PDU_TYPE_ESIS_RD 102
|
||||
|
||||
#define PDU_TYPE_ISIS_L1_HELLO 201
|
||||
#define PDU_TYPE_ISIS_L2_HELLO 202
|
||||
#define PDU_TYPE_ISIS_PTP_HELLO 203
|
||||
#define PDU_TYPE_ISIS_L1_CSNP 204
|
||||
#define PDU_TYPE_ISIS_L1_PSNP 205
|
||||
#define PDU_TYPE_ISIS_L2_CSNP 206
|
||||
#define PDU_TYPE_ISIS_L2_PSNP 207
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#define PROTO_STRING_ISIS "ISO 10598 ISIS InTRA Domain Routeing Information Exchange Protocol"
|
||||
#define PROTO_STRING_IDRP "ISO 10747 IDRP InTER Domain Routeing Information Exchange Protocol"
|
||||
#define PROTO_STRING_ESIS "ISO 9542 ESIS Routeing Information Exchange Protocol"
|
||||
#define PROTO_STRING_CLNP "ISO 8473 CLNP ConnectionLess Network Protocol"
|
||||
#define PROTO_STRING_COTP "ISO 8073 COTP Connection-Oriented Transport Protocol"
|
||||
#define PROTO_STRING_LSP "ISO 10598 ISIS Link State Protocol Data Unit"
|
||||
#define PROTO_STRING_CSNP "ISO 10598 ISIS Complete Sequence Numbers Protocol Data Unit"
|
||||
#define PROTO_STRING_PSNP "ISO 10598 ISIS Partial Sequence Numbers Protocol Data Unit"
|
||||
|
||||
#define OSI_PDU_TYPE_MASK 0x1f
|
||||
#define BIS_PDU_TYPE MASK 0xff
|
||||
|
||||
|
||||
#define BIT_1 0x01
|
||||
#define BIT_2 0x02
|
||||
#define BIT_3 0x04
|
||||
#define BIT_4 0x08
|
||||
#define BIT_5 0x10
|
||||
#define BIT_6 0x20
|
||||
#define BIT_7 0x40
|
||||
#define BIT_8 0x80
|
||||
|
||||
#define BIT_9 0x0100
|
||||
#define BIT_10 0x0200
|
||||
#define BIT_11 0x0400
|
||||
#define BIT_12 0x0800
|
||||
#define BIT_13 0x1000
|
||||
#define BIT_14 0x2000
|
||||
#define BIT_15 0x4000
|
||||
#define BIT_16 0x8000
|
||||
|
||||
|
||||
/*
|
||||
* published API functions
|
||||
*/
|
||||
|
||||
extern void dissect_osi( const u_char *, int, frame_data *, proto_tree *);
|
||||
extern gchar *print_nsap_net ( const u_char *, int );
|
||||
extern gchar *print_area ( const u_char *, int );
|
||||
extern gchar *print_system_id( const u_char *, int );
|
||||
extern gchar *calc_checksum ( const u_char *, u_int, u_int );
|
||||
|
||||
#endif /* _PACKET_OSI_H */
|
||||
|
||||
void dissect_cotp(const u_char *, int, frame_data *, proto_tree *);
|
||||
void dissect_osi(const u_char *, int, frame_data *, proto_tree *);
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* Routines for x25 packet disassembly
|
||||
* Olivier Abad <abad@daba.dhis.net>
|
||||
*
|
||||
* $Id: packet-x25.c,v 1.23 2000/04/13 18:18:53 gram Exp $
|
||||
* $Id: packet-x25.c,v 1.24 2000/04/15 22:11:12 guy Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@zing.org>
|
||||
|
@ -40,6 +40,7 @@
|
|||
#include "packet.h"
|
||||
#include "packet-ip.h"
|
||||
#include "packet-osi.h"
|
||||
#include "packet-clnp.h"
|
||||
#include "nlpid.h"
|
||||
|
||||
#define FROM_DCE 0x80
|
||||
|
|
Loading…
Reference in New Issue