Ethereal-dev: [Ethereal-dev] [patch] PIM hello options decode
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: "Kevin Humphries" <khumphries@xxxxxxxxxxxx>
Date: Wed, 17 Apr 2002 22:22:04 -0600
Here is a patch to decode all know PIM hello options as of draft-ietf-pim-sm-v2-new-05. The only one that I could not test was option 2 - LAN Prune Delay. Thanks for considering this patch. Kevin Index: packet-pim.c =================================================================== RCS file: /cvsroot/ethereal/packet-pim.c,v retrieving revision 1.39 diff -u -r1.39 packet-pim.c --- packet-pim.c 2002/02/01 07:06:32 1.39 +++ packet-pim.c 2002/04/18 03:47:24 @@ -749,17 +749,65 @@ case 0: /*hello*/ { while (tvb_reported_length_remaining(tvb, offset) >= 2) { - if (tvb_get_ntohs(tvb, offset) == 1 && - tvb_get_ntohs(tvb, offset + 2) == 2) { - guint16 holdtime; + guint16 hello_opt, opt_len; + guint16 holdtime; + guint16 lan_delay; + guint16 override_interval; + guint32 priority; + guint32 opt_value = 0; - holdtime = tvb_get_ntohs(tvb, offset + 4); - proto_tree_add_text(pimopt_tree, tvb, offset, 6, - "Holdtime: %u%s", holdtime, - holdtime == 0xffff ? " (infty)" : ""); - offset += 6; - } else - break; + hello_opt = tvb_get_ntohs(tvb, offset); + opt_len = tvb_get_ntohs(tvb, offset + 2); + + if(opt_len == 2) + opt_value = tvb_get_ntohs(tvb, offset + 4); + if(opt_len == 4) + opt_value = tvb_get_ntohl(tvb, offset + 4); + + switch(hello_opt) { + case 1: /* holdtime */ + holdtime = opt_value; + proto_tree_add_text(pimopt_tree, tvb, offset, 4 + opt_len, + "Holdtime: %u%s", holdtime, + holdtime == 0xffff ? " (infty)" : ""); + break; + case 2: /* LAN prune delay */ + { + proto_tree *sub_tree = NULL; + proto_item *landelay_option; + + landelay_option = proto_tree_add_text(pim_tree, tvb, offset, -1, + "LAN Prune Delay"); + sub_tree = proto_item_add_subtree(landelay_option, ett_pim); + + lan_delay = (opt_value & 0x7f00) >> 8; + override_interval = opt_value & 0xff; + proto_tree_add_text(sub_tree, tvb, offset, 4 + opt_len, + "T bit is %s", + opt_value & 0x8000 ? "set" : "not set"); + proto_tree_add_text(sub_tree, tvb, offset, 4 + opt_len, + "LAN Delay: %u", lan_delay); + proto_tree_add_text(sub_tree, tvb, offset, 4 + opt_len, + "Override Interval: %u", override_interval); + break; + } + case 19: /* priority */ + priority = opt_value; + proto_tree_add_text(pimopt_tree, tvb, offset, 4 + opt_len, + "DR Priority: %u", priority); + break; + case 20: /* generation ID */ + proto_tree_add_text(pimopt_tree, tvb, offset, 4 + opt_len, + "Generation ID: %d", opt_value); + break; + + default: + proto_tree_add_text(pimopt_tree, tvb, offset, 4 + opt_len, + "Unknown option: %d len: %d value: 0x%x", + hello_opt, opt_len, opt_value); + break; + } + offset += 4 + opt_len; } break; } ********************************* Get your free E-Mail and Homepage Go to http://www.networld.com *********************************
- Prev by Date: [Ethereal-dev] MANGLED_ON_PURPOSE[18]:cerpc-netlogon.c packet-dcerpc-nt.c packet-dcerpc-nt.h packet-dcerpc-samr.c packet-dcerpc-spoolss.c
- Next by Date: [Ethereal-dev] [patch] PIM hello options decode (again)
- Previous by thread: [Ethereal-dev] MANGLED_ON_PURPOSE[18]:cerpc-netlogon.c packet-dcerpc-nt.c packet-dcerpc-nt.h packet-dcerpc-samr.c packet-dcerpc-spoolss.c
- Next by thread: [Ethereal-dev] [patch] PIM hello options decode (again)
- Index(es):