[Gd-chatter] r11707 - trunk/libraries/protocols
lobo at gwydiondylan.org
lobo at gwydiondylan.org
Mon Feb 25 00:32:26 CET 2008
Author: lobo
Date: Mon Feb 25 00:32:25 2008
New Revision: 11707
Modified:
trunk/libraries/protocols/eigrp.dylan
trunk/libraries/protocols/protocols-library.dylan
Log:
Bug: 7299
Added some TLV fields to EIGRP
Modified: trunk/libraries/protocols/eigrp.dylan
==============================================================================
--- trunk/libraries/protocols/eigrp.dylan (original)
+++ trunk/libraries/protocols/eigrp.dylan Mon Feb 25 00:32:25 2008
@@ -3,22 +3,77 @@
//Enhanced Interior Gateway Routing Protocol (EIGRP)
//http://www.rhyshaden.com/eigrp.htm
//http://www.oreilly.com/catalog/iprouting/chapter/ch04.html
-
define protocol eigrp (container-frame)
summary "EIGRP Opcode: %= AS Number: %=", opcode, autonomoussystem;
over <ipv4-frame> 88;
field version :: <unsigned-byte> = 2;
-// Opcodes
-// 1 - Update
-// 2 - Request
-// 3 - Query
-// 4 - Replay
-// 5 - Hello
- layering field opcode :: <unsigned-byte> = 5;
+ enum field opcode :: <unsigned-byte> = 5,
+ mappings: { 1 <=> #"update",
+ 2 <=> #"request",
+ 3 <=> #"query",
+ 4 <=> #"rely",
+ 5 <=> #"hello" };
//checksum(this layer + payload)
field checksum :: <2byte-big-endian-unsigned-integer>;
field flags :: <big-endian-unsigned-integer-4byte> = 0;
field sequence :: <big-endian-unsigned-integer-4byte> = 0;
field acknowledge :: <big-endian-unsigned-integer-4byte> = 0;
field autonomoussystem :: <big-endian-unsigned-integer-4byte> = 100;
+ repeated field tlv-payload :: <eigrp-tlv>, reached-end?: #f;
+end;
+
+define abstract protocol eigrp-tlv (variably-typed-container-frame)
+ layering field tlv-type :: <2byte-big-endian-unsigned-integer>;
+ field tlv-length :: <2byte-big-endian-unsigned-integer>;
+end;
+
+define abstract protocol eigrp-parameters (eigrp-tlv)
+ over <eigrp-tlv> 1;
+ field k1 :: <unsigned-byte> = 1;
+ field k2 :: <unsigned-byte> = 0;
+ field k3 :: <unsigned-byte> = 1;
+ field k4 :: <unsigned-byte> = 0;
+ field k5 :: <unsigned-byte> = 0;
+ field reserved :: <unsigned-byte> = 0;
+ field hold-time :: <2byte-big-endian-unsigned-integer> = 15;
+end;
+
+define abstract protocol eigrp-authentication-data (eigrp-tlv)
+ over <eigrp-tlv> 2;
+ field authentication-data :: <raw-frame>, length: frame.tlv-length * 8 - 32;
+end;
+
+define abstract protocol eigrp-sequence (eigrp-tlv)
+ over <eigrp-tlv> 3;
+ field address-length :: <unsigned-byte> = 4;
+ field ip-address :: <ipv4-address>;
+end;
+
+define abstract protocol eigrp-software-version (eigrp-tlv)
+ over <eigrp-tlv> 4;
+ field ios-version :: <2byte-big-endian-unsigned-integer>;
+ field eigrp-version :: <2byte-big-endian-unsigned-integer>;
+end;
+
+define abstract protocol eigrp-next-multicast-sequence (eigrp-tlv)
+ over <eigrp-tlv> 5;
+ field next-multicast-sequence :: <big-endian-unsigned-integer-4byte> = 144;
+end;
+
+define abstract protocol eigrp-internal-route (eigrp-tlv)
+ over <eigrp-tlv> 258;
+ field next-hop :: <ipv4-address>;
+ field delay :: <big-endian-unsigned-integer-4byte> = 0;
+ field bandwidth :: <big-endian-unsigned-integer-4byte> = 0;
+ field mtu :: <3byte-big-endian-unsigned-integer> = 1500;
+ field hop-count :: <unsigned-byte> = 0;
+ field reliability :: <unsigned-byte> = 0;
+ field load :: <unsigned-byte> = 0;
+ field reserved :: <2byte-big-endian-unsigned-integer> = 0;
+ field prefix-length :: <unsigned-byte> = 24;
+ // 25 bytes = next-hop + dely + bandwidth + mtu + hop-count + reliability +
+ // load +reserved + prefix-length
+ // zeros at the end of an ip address will be omitted
+ field destination :: <raw-frame>, length: frame.tlv-length * 8 - 25 * 8;
end;
+
Modified: trunk/libraries/protocols/protocols-library.dylan
==============================================================================
--- trunk/libraries/protocols/protocols-library.dylan (original)
+++ trunk/libraries/protocols/protocols-library.dylan Mon Feb 25 00:32:25 2008
@@ -23,7 +23,8 @@
pppoe,
bittorrent,
hdlc,
- socks;
+ socks,
+ eigrp;
end;
define module logical-link
@@ -567,6 +568,6 @@
use dylan;
use packetizer;
- use ipv4, import: { <ipv4-frame> };
+ use ipv4, import: { <ipv4-frame>, <ipv4-address> };
end;
More information about the chatter
mailing list