[Gd-chatter] r11668 - trunk/libraries/protocols
hannes at gwydiondylan.org
hannes at gwydiondylan.org
Wed Feb 6 03:13:55 CET 2008
Author: hannes
Date: Wed Feb 6 03:13:54 2008
New Revision: 11668
Modified:
trunk/libraries/protocols/hsrp.dylan
Log:
Bug: 7299
some more hsrp hacking... advertising operation is stolen from wireshark
Modified: trunk/libraries/protocols/hsrp.dylan
==============================================================================
--- trunk/libraries/protocols/hsrp.dylan (original)
+++ trunk/libraries/protocols/hsrp.dylan Wed Feb 6 03:13:54 2008
@@ -1,58 +1,60 @@
module: hsrp
//Cisco Hot Standby Router Protocol (HSRP) RFC 2281
-define protocol hsrp (container-frame)
+define abstract protocol hsrp (variably-typed-container-frame)
over <udp-frame> 1985;
field version :: <unsigned-byte> = 0;
- /*
- 0 Hello
- 1 Coup
- 2 Resign
- */
- field opcode :: <unsigned-byte> = 0;
- /*
- 0 Initial
- 1 Learn
- 2 Listen
- 4 Speak
- 8 Standby
- 16 Active
- */
- field state :: <unsigned-byte> = 16;
+ layering field opcode :: <unsigned-byte> = 0;
+end;
+
+define abstract protocol hsrp-rfc2881 (hsrp)
+ summary "HSRP v%= (%=)", version, state;
+ enum field state :: <unsigned-byte> = 16,
+ mappings: { 0 <=> #"Initial",
+ 1 <=> #"Learn",
+ 2 <=> #"Listen",
+ 4 <=> #"Speak",
+ 8 <=> #"Standby",
+ 16 <=> #"Active" };
field hello-time :: <unsigned-byte> = 3;
field hold-time :: <unsigned-byte> = 10;
field priority :: <unsigned-byte> = 120;
field group :: <unsigned-byte> = 1;
field reserved :: <unsigned-byte> = 0;
- //recommended default value 0x63 0x69 0x73 0x63 0x6F 0x00 0x00 0x00
- field authentication-data :: <raw-frame>, static-length: 8 * 8;
+ field authentication-data :: <raw-frame> =
+ as(<raw-frame>, #(#x63, #x69, #x73, #x63, #x6F, #x00, #x00, #x00)),
+ static-length: 8 * 8;
field virtual-ip :: <ipv4-address>;
end;
+define protocol hsrp-hello (hsrp-rfc2881)
+ over <hsrp> 0;
+end;
+
+define protocol hsrp-coup (hsrp-rfc2881)
+ over <hsrp> 1;
+end;
-define method summary (frame :: <hsrp>) => (res :: <string>)
- if(frame.opcode = 0)
- if(frame.state = 0)
- format-to-string("HSRP v%= Hello (Initial)", frame.version)
- elseif(frame.state = 1)
- format-to-string("HSRP v%= Hello (Learn)", frame.version)
- elseif(frame.state = 2)
- format-to-string("HSRP v%= Hello (Listen)", frame.version)
- elseif(frame.state = 4)
- format-to-string("HSRP v%= Hello (Speak)", frame.version)
- elseif(frame.state = 8)
- format-to-string("HSRP v%= Hello (Standby)", frame.version)
- elseif(frame.state = 16)
- format-to-string("HSRP v%= Hello (Active)", frame.version)
- else
- format-to-string("HSRP v%= Hello state: %=",
- frame.version,
- frame.state)
- end
- else
- format-to-string("HSRP v%= opcode: %= state: %=",
- frame.version,
- frame.opcode,
- frame.state)
- end
+define protocol hsrp-resign (hsrp-rfc2881)
+ over <hsrp> 2;
end;
+
+define protocol hsrp-advertisement (hsrp)
+ summary "HSRP v%= (%=)", version, state;
+ length frame.advertisement-length * 8;
+ over <hsrp> 3;
+ field hsrp-interface-state :: <2byte-big-endian-unsigned-integer> = 1;
+ field advertisement-length :: <2byte-big-endian-unsigned-integer>,
+ fixup: byte-offset(frame-size(frame));
+ enum field state :: <unsigned-byte> = 16,
+ mappings: { 0 <=> #"Initial",
+ 1 <=> #"Learn",
+ 2 <=> #"Listen",
+ 4 <=> #"Speak",
+ 8 <=> #"Standby",
+ 16 <=> #"Active" };
+ field reserverd1 :: <unsigned-byte>;
+ field active-groups :: <2byte-big-endian-unsigned-integer>;
+ field passive-groups :: <2byte-big-endian-unsigned-integer>;
+ field reserved2 :: <big-endian-unsigned-integer-4byte>;
+end;
\ No newline at end of file
More information about the chatter
mailing list