Ethereal-dev: [Ethereal-dev] error in a simple dissector of DSR

Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.

From: david martinez <davidmfcg@xxxxxxxx>
Date: Sun, 26 Feb 2006 21:36:04 +0100 (CET)
hi everyone, i`m creating a very simple dissector for
a DSR protocol. The protocol`s head is 3 fields:
nextheader(1 byte,it indicates waht protocol go after
dsr TCP UDP or ICMP),reserved(1 byte) and payload (2
bytes, it indicates the length of the payload of the
dsrpacket), i only want that my dissector shows the
header fields of DSR, but when i do click in a DSR
packet ethereal close itself y appear a violation
segment like error, why my dissector doesn't work,
here is the code: i don't find the error in this
simple code!!!!:
 

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#include <stdio.h>
#include <stdlib.h>
#include <string.h>



#include <glib.h>

#include <epan/packet.h>
#include <epan/ipproto.h>


void proto_reg_handoff_dsr(void);

static int proto_dsr=-1;
static int hf_dsr_nextheader=-1;
static int hf_dsr_reserved=-1;
static int hf_dsr_payloadlength=-1;
static gint ett_dsr=-1;





static void
dissect_dsr(tvbuff_t *tvb,packet_info
*pinfo,proto_tree *tree)
{



proto_item *tp,*t0,*t1,*t2;
proto_tree *dsr_tree;
guint8 nextheader;
guint8 reserved;
guint16 payloadlength;



pinfo->current_proto="DSR";
if(check_col(pinfo->cinfo,COL_PROTOCOL))

    col_set_str(pinfo->cinfo,COL_PROTOCOL,"DSR");

if(check_col(pinfo->cinfo,COL_INFO))
    col_clear(pinfo->cinfo,COL_INFO);

if(check_col(pinfo->cinfo,COL_INFO))

col_set_str(pinfo->cinfo,COL_INFO,"DynamicSourceRoute");

nextheader=tvb_get_guint8(tvb,0);
reserved=tvb_get_guint8(tvb,1);
payloadlength=tvb_get_letohs(tvb,2);
dsr_tree=proto_item_add_subtree(tp,ett_dsr);
t0=proto_tree_add_uint(dsr_tree,hf_dsr_nextheader,tvb,0,1,nextheader);
t1=proto_tree_add_uint(dsr_tree,hf_dsr_reserved,tvb,1,1,reserved);
t2=proto_tree_add_uint(dsr_tree,hf_dsr_payloadlength,tvb,2,2,payloadlength);



}

 
 
 
 
void 
proto_register_dsr(void)
{ 
       	    static hf_register_info hf[]= { 
{ &hf_dsr_nextheader,
     {
"nextheader","dsr.nextheader",FT_UINT8,BASE_DEC,NULL,0x00,"",HFILL}
},
 
  
{ &hf_dsr_reserved,
     {
"reserved","dsr.reserved",FT_UINT8,BASE_HEX,NULL,0x00,"",HFILL}
},
 
  
{ &hf_dsr_payloadlength,
     {
"payloadlength","dsr.payloadlength",FT_UINT16,BASE_DEC,NULL,0x00,"",HFILL}
},

  
};



 static gint *ett[]= { 
     &ett_dsr,
  };
 
 
proto_dsr=proto_register_protocol("DynamicSourceRoute","DSR","dsr");

proto_register_field_array(proto_dsr,hf,array_length(hf));
proto_register_subtree_array(ett,array_length(ett)); 




}


void proto_reg_handoff_dsr(void)
{ 

         
dissector_handle_t dsr_handle;
dsr_handle=create_dissector_handle(dissect_dsr,proto_dsr);
dissector_add("ip.proto",IP_PROTO_DSR,dsr_handle);



}


		
______________________________________________ 
LLama Gratis a cualquier PC del Mundo. 
Llamadas a fijos y móviles desde 1 céntimo por minuto. 
http://es.voice.yahoo.com