digraph {
rankdir=LR;
node [shape=plaintext];
subgraph cluster__pcap {
label="Pcap";
graph[style=dotted];
pcap__seq [label=<
pos | size | type | id |
0 | 24 | Header | hdr |
24 | ... | Packet | packets |
repeat to end of stream |
>];
subgraph cluster__header {
label="Pcap::Header";
graph[style=dotted];
header__seq [label=<
pos | size | type | id |
0 | 4 | | magic_number |
4 | 2 | u2le | version_major |
6 | 2 | u2le | version_minor |
8 | 4 | s4le | thiszone |
12 | 4 | u4le | sigfigs |
16 | 4 | u4le | snaplen |
20 | 4 | u4le→Linktype | network |
>];
}
subgraph cluster__packet {
label="Pcap::Packet";
graph[style=dotted];
packet__seq [label=<
pos | size | type | id |
0 | 4 | u4le | ts_sec |
4 | 4 | u4le | ts_usec |
8 | 4 | u4le | incl_len |
12 | 4 | u4le | orig_len |
16 | ... | switch (_root.hdr.network) | body |
>];
packet__seq_body_switch [label=<
case | type |
:linktype_ppi | PacketPpi |
:linktype_ethernet | EthernetFrame |
>];
}
}
pcap__seq:hdr_type -> header__seq [style=bold];
pcap__seq:packets_type -> packet__seq [style=bold];
packet__seq:body_type -> packet__seq_body_switch [style=bold];
packet__seq_body_switch:case0 -> packet_ppi__seq [style=bold];
packet__seq_body_switch:case1 -> ethernet_frame__seq [style=bold];
header__seq:network_type -> packet__seq:body_type [color="#404040"];
}