digraph {
rankdir=LR;
node [shape=plaintext];
subgraph cluster__protocol_body {
label="ProtocolBody";
graph[style=dotted];
protocol_body__seq [label=<
pos | size | type | id |
0 | ... | switch (protocol) | body |
>];
protocol_body__inst__protocol [label=<
id | value |
protocol | Kaitai::Struct::Stream::resolve_enum(PROTOCOL_ENUM, protocol_num) |
>];
protocol_body__seq_body_switch [label=<
case | type |
:protocol_enum_ipv6_nonxt | NoNextHeader |
:protocol_enum_ipv4 | Ipv4Packet |
:protocol_enum_udp | UdpDatagram |
:protocol_enum_icmp | IcmpPacket |
:protocol_enum_hopopt | OptionHopByHop |
:protocol_enum_ipv6 | Ipv6Packet |
:protocol_enum_tcp | TcpSegment |
>];
subgraph cluster__no_next_header {
label="ProtocolBody::NoNextHeader";
graph[style=dotted];
no_next_header__seq [label=<>];
}
subgraph cluster__option_hop_by_hop {
label="ProtocolBody::OptionHopByHop";
graph[style=dotted];
option_hop_by_hop__seq [label=<
pos | size | type | id |
0 | 1 | u1 | next_header_type |
1 | 1 | u1 | hdr_ext_len |
2 | (hdr_ext_len > 0 ? (hdr_ext_len - 1) : 1) | | body |
... | ... | ProtocolBody | next_header |
>];
}
}
protocol_body__seq:body_type -> protocol_body__seq_body_switch [style=bold];
protocol_body__seq_body_switch:case0 -> no_next_header__seq [style=bold];
protocol_body__seq_body_switch:case1 -> ipv4_packet__seq [style=bold];
protocol_body__seq_body_switch:case2 -> udp_datagram__seq [style=bold];
protocol_body__seq_body_switch:case3 -> icmp_packet__seq [style=bold];
protocol_body__seq_body_switch:case4 -> option_hop_by_hop__seq [style=bold];
protocol_body__seq_body_switch:case5 -> ipv6_packet__seq [style=bold];
protocol_body__seq_body_switch:case6 -> tcp_segment__seq [style=bold];
protocol_body__inst__protocol:protocol_type -> protocol_body__seq:body_type [color="#404040"];
protocol_body__params:protocol_num_type -> protocol_body__inst__protocol [color="#404040"];
option_hop_by_hop__seq:hdr_ext_len_type -> option_hop_by_hop__seq:body_size [color="#404040"];
option_hop_by_hop__seq:hdr_ext_len_type -> option_hop_by_hop__seq:body_size [color="#404040"];
option_hop_by_hop__seq:next_header_type -> protocol_body__seq [style=bold];
}