# 0 1 2 3 # 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ # | LS age | Options | LS type | # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ # | Link State ID | # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ # | Advertising Router | # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ # | LS sequence number | # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ # | LS checksum | length | # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ #### sub decode_header { my $buff = shift; my %lsa; print dump_hex(substr($buff,0,20)); ($lsa{age}, $lsa{options}, $lsa{type}, $lsa{lsid}, $lsa{advRouter}, $lsa{seqNo}, $lsa{checksum}, $lsa{length}) = unpack('nCCNNNnn',$buff); $lsa{lsid} = N_to_dottedQuad($lsa{lsid}); $lsa{advRouter} = N_to_dottedQuad($lsa{advRouter}); $lsa{type} = $OSPF{LSTYPE}{$lsa{type}}; $lsa{options} = decode_lsa_options($lsa{options}); return \%lsa; } #### Dump: [000] 00 05 22 01 AC 32 00 02 AC 32 00 02 80 20 FF 99 [016] 05 90 00 48 $VAR1 = { 'seqNo' => '2149646233', 'length' => 72, 'checksum' => 1424, 'advRouter' => '172.50.0.2', 'options' => '*|-|DC|-|-|-|E|*', 'lsid' => '172.50.0.2', 'type' => 'Router-LSA', 'age' => 5 }; #### [000] 00 00 22 02 20 01 01 02 20 01 FE 01 80 00 00 10 [016] 41 A5 00 20 $VAR1 = { 'seqNo' => '2147483664', 'length' => 32, 'checksum' => 16805, 'advRouter' => '32.1.254.1', 'options' => '*|-|DC|-|-|-|E|*', 'lsid' => '32.1.1.2', 'type' => 'Network-LSA', 'age' => '0' };