1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
//! Open Shortest Path First (OSPFv2 RFC 2328 / OSPFv3 RFC 5340) AST definitions.
//!
//! Defines link-state Interior Gateway Protocol (IGP) control packets transmitted directly over IP
//! protocol `89` (`0x59`) to multicast AllSPFRouters (`224.0.0.5` for IPv4, `ff02::5` for IPv6).
//! The 24-byte OSPF header encodes `Version` (`2`), `Type` (`1` `HELLO`, `2` `DBD`, `3` `LSR`, `4`
//! `LSU`, `5` `LSACK`), 16-bit `Packet Length`, 32-bit `Router ID` (`ROUTER_ID`), 32-bit `Area ID`
//! (`AREA_ID`, default `0` backbone `0.0.0.0`), 16-bit Checksum, `AuType`, and 64-bit Authentication,
//! followed by a 20-byte Hello body specifying `Network Mask`, `HelloInterval` (`HELLO_INTERVAL`,
//! default `10`s), `Options`, `Rtr Pri` (`PRIORITY`, default `1`), and `RouterDeadInterval` (`DEAD_INTERVAL`, default `40`s).
//!
//! Canonical `.fasm` syntax:
//! `a -> b OSPF [HELLO | DBD | LSR | LSU | LSACK] [ROUTER_ID <ipv4>] [AREA_ID <u32>] [HELLO_INTERVAL <u16>] [DEAD_INTERVAL <u32>] [PRIORITY <u8>]`
use PhantomData;
use IpAddr;
/// RFC 2328 / RFC 5340 OSPF packet type code.
/// Open Shortest Path First (RFC 2328 OSPFv2 / RFC 5340 OSPFv3) specification over IP protocol `89`.
///
/// Syntax mapping: `OSPF [HELLO | DBD | LSR | LSU | LSACK] [ROUTER_ID <ipv4>] [AREA_ID <u32>] [HELLO_INTERVAL <u16>] [DEAD_INTERVAL <u32>] [PRIORITY <u8>]`